【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因:
https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html
npu-smi info -l查询所有NPU设备:

[naie@notebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count                    : 1NPU ID                         : 6Chip Count                     : 1

运行脚本:

import torch_npu
from torch_npu.contrib import transfer_to_npu
import torchimport torch
import torch.nn as nnclass SingleConv(nn.Module):def __init__(self, in_ch, out_ch, kernel_size, stride, padding):super(SingleConv, self).__init__()self.single_conv = nn.Sequential(nn.Conv2d(in_ch, out_ch, kernel_size=kernel_size, padding=padding, stride=stride, bias=False),nn.BatchNorm2d(out_ch),nn.ReLU(inplace=True))def forward(self, x):return self.single_conv(x)class DenseFeaureAggregation(nn.Module):def __init__(self, in_ch, out_ch, base_ch):super(DenseFeaureAggregation, self).__init__()self.conv1 = nn.Sequential(nn.BatchNorm2d(num_features=1 * in_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch, base_ch, dilation=2, kernel_size=3, padding=2, stride=1, bias=True),)self.conv2 = nn.Sequential(nn.BatchNorm2d(num_features=in_ch + base_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch + base_ch, base_ch, dilation=3, kernel_size=3, padding=3, stride=1, bias=True),)self.conv3 = nn.Sequential(nn.BatchNorm2d(num_features=in_ch + 2 * base_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch + 2 * base_ch, base_ch, dilation=5, kernel_size=3, padding=5, stride=1, bias=True),)self.conv4 = nn.Sequential(nn.BatchNorm2d(num_features=in_ch + 3 * base_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch + 3 * base_ch, base_ch, dilation=7, kernel_size=3, padding=7, stride=1, bias=True),)self.conv5 = nn.Sequential(nn.BatchNorm2d(num_features=in_ch + 4 * base_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch + 4 * base_ch, base_ch, dilation=9, kernel_size=3, padding=9, stride=1, bias=True),)self.conv_out = nn.Sequential(nn.BatchNorm2d(num_features=in_ch + 5 * base_ch, eps=1e-5, affine=True),nn.ReLU(inplace=True),nn.Conv2d(in_ch + 5 * base_ch, out_ch, dilation=1, kernel_size=1, padding=0, stride=1, bias=True),)def forward(self, x):out_ = self.conv1(x)concat_ = torch.cat((out_, x), dim=1)out_ = self.conv2(concat_)concat_ = torch.cat((concat_, out_), dim=1)out_ = self.conv3(concat_)concat_ = torch.cat((concat_, out_), dim=1)out_ = self.conv4(concat_)concat_ = torch.cat((concat_, out_), dim=1)out_ = self.conv5(concat_)concat_ = torch.cat((concat_, out_), dim=1)out_ = self.conv_out(concat_)return out_class Encoder(nn.Module):def __init__(self, in_ch, list_ch):super(Encoder, self).__init__()self.encoder_1 = nn.Sequential(SingleConv(in_ch, list_ch[1], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[1], list_ch[1], kernel_size=3, stride=1, padding=1))self.encoder_2 = nn.Sequential(nn.MaxPool2d(kernel_size=2, stride=2, padding=0),SingleConv(list_ch[1], list_ch[2], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[2], list_ch[2], kernel_size=3, stride=1, padding=1))self.encoder_3 = nn.Sequential(nn.MaxPool2d(kernel_size=2, stride=2, padding=0),SingleConv(list_ch[2], list_ch[3], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[3], list_ch[3], kernel_size=3, stride=1, padding=1))self.encoder_4 = nn.Sequential(nn.MaxPool2d(kernel_size=2, stride=2, padding=0),SingleConv(list_ch[3], list_ch[4], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[4], list_ch[4], kernel_size=3, stride=1, padding=1))self.DFA = DenseFeaureAggregation(list_ch[4], list_ch[4], list_ch[4])def forward(self, x):out_encoder_1 = self.encoder_1(x)out_encoder_2 = self.encoder_2(out_encoder_1)out_encoder_3 = self.encoder_3(out_encoder_2)out_encoder_4 = self.encoder_4(out_encoder_3)out_encoder_4 = self.DFA(out_encoder_4)return [out_encoder_1, out_encoder_2, out_encoder_3, out_encoder_4]class Decoder(nn.Module):def __init__(self, out_ch, list_ch):super(Decoder, self).__init__()self.upconv_3_1 = nn.ConvTranspose2d(list_ch[4], list_ch[3], kernel_size=2, stride=2, bias=True)self.decoder_conv_3_1 = nn.Sequential(SingleConv(2 * list_ch[3], list_ch[3], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[3], list_ch[3], kernel_size=3, stride=1, padding=1))self.upconv_2_1 = nn.ConvTranspose2d(list_ch[3], list_ch[2], kernel_size=2, stride=2, bias=True)self.decoder_conv_2_1 = nn.Sequential(SingleConv(2 * list_ch[2], list_ch[2], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[2], list_ch[2], kernel_size=3, stride=1, padding=1))self.upconv_1_1 = nn.ConvTranspose2d(list_ch[2], list_ch[1], kernel_size=2, stride=2, bias=True)self.decoder_conv_1_1 = nn.Sequential(SingleConv(2 * list_ch[1], list_ch[1], kernel_size=3, stride=1, padding=1),SingleConv(list_ch[1], list_ch[1], kernel_size=3, stride=1, padding=1))self.conv_out = nn.Sequential(nn.Conv2d(list_ch[1], out_ch, kernel_size=1, padding=0, bias=True))def forward(self, out_encoder):out_encoder_1, out_encoder_2, out_encoder_3, out_encoder_4 = out_encoderout_decoder_3_1 = self.decoder_conv_3_1(torch.cat((self.upconv_3_1(out_encoder_4), out_encoder_3), dim=1))out_decoder_2_1 = self.decoder_conv_2_1(torch.cat((self.upconv_2_1(out_decoder_3_1), out_encoder_2), dim=1))out_decoder_1_1 = self.decoder_conv_1_1(torch.cat((self.upconv_1_1(out_decoder_2_1), out_encoder_1), dim=1))output = self.conv_out(out_decoder_1_1)return [output]class Model(nn.Module):def __init__(self, in_ch, out_ch, list_ch):super(Model, self).__init__()self.encoder = Encoder(in_ch, list_ch)self.decoder = Decoder(out_ch, list_ch)# initself.initialize()@staticmethoddef init_conv_deconv_BN(modules):for m in modules():if isinstance(m, nn.Conv2d):nn.init.kaiming_uniform_(m.weight, mode='fan_in', nonlinearity='relu')if m.bias is not None:nn.init.constant_(m.bias, 0.)elif isinstance(m, nn.ConvTranspose2d):nn.init.kaiming_uniform_(m.weight, mode='fan_in', nonlinearity='relu')if m.bias is not None:nn.init.constant_(m.bias, 0.)elif isinstance(m, nn.BatchNorm2d):nn.init.constant_(m.weight, 1.)nn.init.constant_(m.bias, 0.)def initialize(self):print('# random init encoder weight using nn.init.kaiming_uniform !')self.init_conv_deconv_BN(self.decoder.modules)print('# random init decoder weight using nn.init.kaiming_uniform !')self.init_conv_deconv_BN(self.encoder.modules)def forward(self, x):out_encoder = self.encoder(x)out_decoder = self.decoder(out_encoder)  # is a listreturn out_decoderimport re
import subprocessdef get_npu_id():try:# 执行命令并捕获输出output = subprocess.check_output(['npu-smi', 'info', '-l'], text=True)# 使用正则表达式查找NPU IDmatch = re.search(r'NPU ID\s+:\s+(\d+)', output)if match:return match.group(1)  # 返回匹配的第一个组,即NPU IDelse:return "NPU ID not found"except subprocess.CalledProcessError as e:return f"An error occurred: {e}"network = Model(in_ch=4, out_ch=1,list_ch=[-1, 32, 64, 128, 256])npu_id = get_npu_id()
# list_GPU_ids = [npu_id]
device = torch.device('cuda:' + str(npu_id))
network.to(device)
print("device:",npu_id)

报错:

Traceback (most recent call last):File "/home/work/user-job-dir/app/notebook/RTDosePrediction-main/RTDosePrediction/Src/DCNN/test_device_id.py", line 211, in <module>network.to(device)File "/home/naie/.local/lib/python3.9/site-packages/torch_npu/contrib/transfer_to_npu.py", line 56, in decoratedreturn fn(*args, **kwargs)File "/home/naie/.local/lib/python3.9/site-packages/torch_npu/utils/module.py", line 68, in toreturn self._apply(convert)File "/home/naie/.local/lib/python3.9/site-packages/torch/nn/modules/module.py", line 810, in _applymodule._apply(fn)File "/home/naie/.local/lib/python3.9/site-packages/torch/nn/modules/module.py", line 810, in _applymodule._apply(fn)File "/home/naie/.local/lib/python3.9/site-packages/torch/nn/modules/module.py", line 810, in _applymodule._apply(fn)[Previous line repeated 2 more times]File "/home/naie/.local/lib/python3.9/site-packages/torch/nn/modules/module.py", line 833, in _applyparam_applied = fn(param)File "/home/naie/.local/lib/python3.9/site-packages/torch_npu/utils/module.py", line 66, in convertreturn t.to(device, dtype if t.is_floating_point() or t.is_complex() else None, non_blocking)File "/home/naie/.local/lib/python3.9/site-packages/torch_npu/contrib/transfer_to_npu.py", line 56, in decoratedreturn fn(*args, **kwargs)
RuntimeError: exchangeDevice:torch_npu/csrc/aten/common/CopyKernel.cpp:37 NPU error, error code is 107001
[ERROR] 2024-12-13-10:47:03 (PID:38196, Device:0, RankID:-1) ERR00100 PTA call acl api failed
[Error]: Invalid device ID.Check whether the device ID is valid.
EE1001: 2024-12-13-10:47:03.815.272 The argument is invalid.Reason: Set device failed, invalid device, set device=6, valid device range is [0, 1)Solution: 1.Check the input parameter range of the function. 2.Check the function invocation relationship.TraceBack (most recent call last):rtSetDevice execute failed, reason=[device id error][FUNC:FuncErrorReason][FILE:error_message_manage.cc][LINE:53]open device 6 failed, runtime result = 107001.[FUNC:ReportCallError][FILE:log_inner.cpp][LINE:161]

猜想也许是进行了从物理ID到逻辑ID的映射。
查了一下华为的官方文档:
https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html
还真的存在这么一个映射。
在这里插入图片描述

遂用这个命令查看了当前环境下的芯片映射关系:

[naie@notebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -mNPU ID                         Chip ID                        Chip Logic ID                  Chip Name                     6                              0                              0                              Ascend 910B36                              1                              -                              Mcu 

确实物理ID为6的NPU被映射成了0。这是因为当前环境下(notebook)中只存在一个NPU。

但是还有一个问题:什么时候使用物理ID什么时候使用逻辑ID呢?

物理ID

npu-smi info -t power -i id类似于这种命令里使用的id都是物理ID:
在这里插入图片描述
因为npu-smi info -l查出来的是物理ID。

逻辑ID

device = torch.device('cuda:' + str(npu_id))这种就用的是逻辑ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…

基于Spring Boot的体育商品推荐系统

一、系统背景与目的 随着电子商务的快速发展和人们健康意识的提高&#xff0c;体育商品市场呈现出蓬勃发展的态势。然而&#xff0c;传统的体育商品销售方式存在商品种类繁多、用户选择困难、个性化需求无法满足等问题。为了解决这些问题&#xff0c;基于Spring Boot的体育商品…

【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)

基于TCP的简单Netty自定义协议实现&#xff08;万字&#xff0c;全篇例子&#xff09; 前言 有一阵子没写博客了&#xff0c;最近在学习Netty写一个实时聊天软件&#xff0c;一个高性能异步事件驱动的网络应用框架&#xff0c;我们常用的SpringBoot一般基于Http协议&#xff0…

【2025最新计算机毕业设计】基于SSM校园歌手赛事管理系统【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Visual Studio 使用 GitHub Copilot 协助调试

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

了解ARM的千兆以太网——RK3588

1. 简介 本文并不重点讲解调试内容&#xff0c;重点了解以太网在ARM设计中的框架以及在设备树以及驱动的一个整体框架。了解作为一个驱动开发人员当拿到一款未开发过的ARM板卡应该怎么去把网卡配置使用起来。 2. 基础知识介绍 在嵌入式ARM中实现以太网的解决方案通常有以下两种…

Springboot家政服务管理系统

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

DC-9笔记

靶机信息 官网:DC: 9 ~ VulnHub 只有一个flag,官网上没给其他提示 信息收集 nmap 192.168.66.2-254nmap 192.168.66.146 -A -p-开放了80端口,22端口是filtered的,被过滤? NMAP 六种端口状态解读_nmap filtered-CSDN博客 那来看看http服务吧 http(80) 页脚是空白的,插件也…

STM32-笔记3-驱动蜂鸣器

1、复制03项目&#xff0c;重命名为04项目 打开04项目的Drivers/BSP/led文件夹&#xff0c;把led文件夹更改为beep文件夹&#xff0c;改文件夹内部的.c和.h文件更改为beep.c和beep.h文件&#xff0c;如下图所示。 2、打开工程文件 出现弹窗&#xff0c;显示找不到xx文件&#…

PHP开发日志 ━━ 基础知识:四种不同的变量返回方式该如何调用

最近在给框架升级&#xff0c;其中涉及到古早的缓存系统升级&#xff0c;现在准备区分类型为混合、变量和普通文件&#xff0c;那么变量用什么形式存储到缓存才能给后续开发带来便利和通用性呢&#xff1f;于是就涉及到了本文的php基础知识。 好吧&#xff0c;又是一个无用的知…

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点&#xff1a;每个子区间内概率相等 &#xff0c; λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1&#xff1a;用EXCEL计算泊松分布的概率 3 比较λ不同值时…

Java中的垃圾收集器

文章目录 1. 理解不同类型的垃圾收集器1.1 Serial 收集器1.2 Parallel (吞吐量) 收集器1.3 CMS (Concurrent Mark-Sweep) 收集器1.4 G1 (Garbage First) 收集器1.5 ZGC 和 Shenandoah GC1.6 Epsilon GC1.7 ParNew 收集器1.8 Zing (Azul Systems) 2. 优化垃圾收集器的选择和配置…

测试工程师八股文05|功能测试、业务测试

一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试&#xff1a;针对程序源代码进行测试【开发自测】集成测试&#xff1a;针对模块之间功能交互进行测试系统测试&#xff1a;对整个系统&#xff08;功能、非功能&#xff09;进行全面测试验收测试&#xff…

图(dfs与bfs)算法2

进度&#xff1a;15/100 原题1&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 &#xff08;力扣的图&#xff09; 原题2&#xff1a; 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 原题3&#xff1a; 给…

《鸿蒙开发-答案之书》字符串占位符格式化

《鸿蒙开发-答案之书》字符串占位符格式化 先在string.json定义&#xff1a; {"name":"message_arrive","value":"We will arrive at %s."}使用&#xff0c;它有两种使用方式&#xff1a; 方式一&#xff1a; Text($r(app.string.…

Redis bitmaps 使用

应用场景&#xff1a; 记录id为 1 的用户&#xff0c;2024年12月签到情况&#xff0c;并统计&#xff1b; 记录 1号签到 zxys-redis:0>setbit 1:202412 1 1 记录 2号签到 zxys-redis:0>setbit 1:202412 2 1 记录 3号未签到 zxys-redis:0>setbit 1:202412 3 0 …

【微服务】SpringBoot 整合Redis Stack 构建本地向量数据库相似性查询

目录 一、前言 二、向量数据库介绍 2.1 什么是向量数据库 2.2 向量数据库特点 2.3 向量数据库使用场景 三、常用的向量数据库解决方案 3.1 Milvus 3.1.1 Milvus是什么 3.1.2 Milvus主要特点 3.2 Faiss 3.2.1 Faiss是什么 3.2.2 Faiss主要特点 3.3 Pinecone 3.3.1 …

【数据库】大二数据库复习范围 (快速版)帮助你快速复习数据库

第一章 1. 信息=数据+语义 2:数据库管理系统(database management system, DBMS) 3. 数据库系统(database system, DBS)由数据库、数据库用户、计算机硬件系统和计算机软件系统等几部分组成 4. 数据模型按应用层次可分为概念模型、逻辑模型和物理模型。 5.每个二维表…

FMIKit-Simulink 常见问题解决方案

将解压后的文件夹添加到 MATLAB 路径中&#xff1a; addpath(fullfile(pwd, FMIKit-Simulink-3.1));初始化 FMIKit&#xff1a; FMIKit.initialize(); 设置求解器rtwsfcnfmi.tlc、或grtfmi.tlc再CtrlB即可。 帮助文档可查看导出FUM和导入FMU。 FMIKit-Simulink-3.1\html\index…

UE UMG 多级弹出菜单踩坑

多级弹出菜单 https://www.bilibili.com/video/BV1ub411J7nA 运行时添加 widget 的方法 create widget 然后 add child 到某个组件&#xff0c;比如 canvas 运行时修改 widget 位置的方法 set widget slot position 用起来没效果 怀疑是因为我没有传入 slot 但是暂时不知…