昇腾910B虚拟卡(vNPU)创建以及Docker挂载

容器挂载方式

物理挂载模式

物理挂载模式: 普通 Docker 模式(必须配合 --device), 如果你不依赖高级 Runtime,完全手动挂载。

  • 操作方式: 你先用 --device=/dev/davinci_vicap5 , 或者--device=/dev/davinci0, 把特定的虚拟卡或者实体卡挂载进去。

  • 挂载后, 容器内卡号ID变为0,1,2....

Runtime模式

Runtime模式: Ascend Docker Runtime 模式, 需要安装了昇腾专门的容器运行时。

  • 操作方式: 不写 --device,只指定ASCEND_VISIBLE_DEVICES的ID。
  • 运行流程: 此时 Docker 就会去宿主机上寻找对应ID的虚拟卡或者物理卡,并自动帮你挂载。
  • 变量作用: 它扮演了物理卡申请 ID 的角色。

虚拟卡创建

1. 辅助查询命令 (Optional)

在操作之前,你可能需要知道有哪些模板可用:

查看支持的模板规格:

bash 复制代码
npu-smi info -i 1 -c 0 -t template-info

用途:查看模板分别占用多少 AI Core 和显存,避免创建时资源冲突。

参数标注:

  • -i 1 : 板卡 ID (Card ID)。物理机的第几张卡(通常从 0 开始)。
  • -c 0 : 芯片 ID (Chip ID)。卡上的第几个芯片(910B 通常单卡单芯,填 0)。

2. 创建虚拟 NPU (Create)

用于将物理芯片切分为指定规格的虚拟芯片。

命令示例:

bash 复制代码
npu-smi set -t create-vnpu -i 1 -c 0 -f [复制过来的模板名]

参数标注:

  • -i 1 : 板卡 ID (Card ID)。物理机的第几张卡(通常从 0 开始)。
  • -c 0 : 芯片 ID (Chip ID)。卡上的第几个芯片(910B 通常单卡单芯,填 0)。
  • -f vir05_1c_16g : 模板名称 (Template Name)vir05_1c_16g 表示切分规格: 1 个 AI Core,16g显存(05是算力份额)。

3. 查看虚拟 NPU 信息 (Check)

用于确认已创建的 vNPU 状态及其分配的设备 ID。

命令示例:

复制代码
npu-smi info -i 1 -c 0 -t info-vnpu

参数标注:

  • -t info-vnpu : 查询类型。专门用于列出当前芯片下所有已存在的虚拟设备信息。

核心输出字段说明:

  • vDevID : 虚拟设备 ID 。这是最重要的参数(例如 125),对应宿主机的设备节点 /dev/davinci125
  • TemplateName: 该 vNPU 使用的规格模板。

4. 删除虚拟 NPU (Destroy)

用于释放已经创建的虚拟资源,将其归还给物理芯片。

命令示例:

bash 复制代码
npu-smi set -t destroy-vnpu -i 1 -c 0 -v [vDevID]

参数标注:

  • -t destroy-vnpu : 操作类型。销毁/删除指定的虚拟 NPU。
  • -i 1 : 板卡 ID。该 vNPU 所属的物理卡号。
  • -c 0 : 芯片 ID。该 vNPU 所属的芯片号。
  • -v 125 : 虚拟设备 ID (vDevID) 。必须填入通过 info-vnpu 命令查到的具体 ID 号。

Docker应用示例

1. 二进制安装docker

bash 复制代码
tar -zxvf docker-24.0.6.tgz
cp docker/* /usr/bin/

cat > /etc/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

2. 安装Ascend-docker-runtime

下载地址: https://www.hiascend.com/document/detail/zh/mindcluster/730/clustersched/dlug/dlug_installation_009.html

复制代码
./Ascend-docker-runtime_7.3.1_linux-aarch64.run

3. 配置docker

bash 复制代码
# 创建docker配置目录和数据目录
mkdir -p /etc/docker/
mkdir -p /data/docker/

# 添加如下配置

export harbor_url=3.1.38.138:8005

cat > /etc/docker/daemon.json <<EOF
{
    "max-concurrent-downloads": 30,
    "data-root": "/data/docker",
    "log-opts": {"max-size":"10m", "max-file":"3"},
    "insecure-registries":["${harbor_url}"],
    "runtimes": {
        "ascend": {
            "path": "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "ascend"
}

EOF

4. 启动验证

bash 复制代码
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker info

虚拟卡申请

bash 复制代码
# 查看是否有创建过的虚拟卡
npu-smi info -i 1 -c 0 -t info-vnpu

# 查看模板(会有两个模板: vir05_1c_16g和vir10_3c_32g)
npu-smi info -i 1 -c 0 -t template-info

# 根据实际情况选择模板创建虚拟卡
npu-smi set -t create-vnpu -i 1 -c 0 -f vir05_1c_16g

# 确认vNPU是否创建完成
npu-smi info -i 1 -c 0 -t info-vnpu

删除虚拟卡

bash 复制代码
# 查看vNPU划分
npu-smi info -i 1 -c 0 -t info-vnpu

# 删除对应卡位对应vNPU_ID的虚拟卡
npu-smi set -t destroy-vnpu -i 1 -c 0 -v 116

虚拟卡挂载

bash 复制代码
# docker挂载示例
docker run -it \
  --runtime=ascend \   # 关键步骤:指定使用 ascend 运行时
  -e ASCEND_VISIBLE_DEVICES=100 \  # 指定 vNPU ID
  -e ASCEND_RUNTIME_OPTIONS=VIRTUAL \  # 声明挂载的是虚拟芯片
  your_image_name

常用命令

bash 复制代码
# 安装信息
npu-smi info

# 查看模块加载情况
lsmod | grep davinci

# 查看固件版本号
npu-smi info -t board -i 0

# 查看显卡被使用情况
cat /proc/uda/namespace_node
相关推荐
java_logo2 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
生活爱好者!15 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo15 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客16 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
Hui Baby16 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
用户2333768521818 小时前
Docker 端口"时通时不通"的排查实战
docker
做个文艺程序员19 小时前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器
ShiXZ21319 小时前
Redis docker-compose 部署指南
redis·docker·eureka
梦梦代码精21 小时前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范
Zhu75821 小时前
在k8s环境部署Apache Superset最新版
容器·kubernetes·apache