容器挂载方式
物理挂载模式
物理挂载模式: 普通 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
./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