目录
一、简介
本文主要针对vDCU 虚拟化设备插件的安装与初步使用测试进行介绍,包括物理机、容器环境与kubernetes 集群环境下vDCU 设备的使用。
二、基础环境与约束
2.1 硬件环境
- 需要宿主机安装配置了DCU 设备;
- 宿主机安装了DCU 对应版本的驱动驱动程序和DTK;
2.2 软件环境
- 需要保证kubernetes 集群版本在1.18 及以上;
- 需要在宿主机安装DCU 驱动程序,可以在光合开发者社区下载:
https://cancon.hpccube.com:65024/6/main
- 需要在光合开发者社区下载kubernetes 插件:
https://cancon.hpccube.com:65024/5/main
2.3 插件列表
插件名称 | 版本 |
dcu-device-plugin-share | v2.0.0.240718 |
2.4 使用约束
在各个场景下,海光DCU 虚拟化功能总体遵循以下约束:
- 数量约束:目前海光DCU 虚拟化功能在一张物理卡上支持最多4 个vDCU;
- 配置模式:目前海光DCU 虚拟化功能只支持静态配置;
- 资源约束:每个vDCU 可以任意划分计算资源和显存资源,但是每张物理卡上所有vDCU 计算资源和显存资源总和不能超过物理DCU 的标称值;
- 申请约束:每个进程只能使用一张vDCU 卡,如果配置多于一张vDCU,则只有第一张vDCU 被使用;
- 操作约束:只能使用hy-virtual 命令行工具创建或销毁vDCU,手动修改vDCU 配置文件可能导致运行在此vDCU 上的进程崩溃;
- 卡间通信:暂时不支持vDCU 之间的卡间通信;
Docker 容器内使用vDCU 的额外约束:
- 每个容器只能挂载一张vDCU 卡,如果挂载多余一张vDCU 卡,则只有第一张vDCU卡被使用;
- 每张vDCU 卡只能被一个容器使用;
Kubernetes 集群内使用vDCU 的额外约束:
- 目前只支持静态虚拟化方案,每个vDCU 节点需要提前完成vDCU 配置;
- vDCU 节点内所有的vDCU 配置需要保持一致,并给vDCU 节点打上相应标签;
- 每个任务容器最多可以申请一张vDCU。当申请多于1 张vDCU 时,会收到超阈值警告但并不会失败,K8s 资源池会削减等于申请数量的vDCU,但是容器内只有第一张vDCU 会生效;
三、使用指导
3.1 配置vDCU
3.1.1 查询物理DCU 资源
hy-virtual -show-device-info
回显示例:
Device 0:
Actual Device: 0
Compute units: 60
Global memory: 34342961152 bytes
Device 1:
Actual Device: 1
Compute units: 60
Global memory: 34342961152 bytes
参数 | 描述 |
Actual Device | 物理DCU 设备号 |
Compute units | 物理DCU 设备上的计算单元总数 |
Global memory | 物理DCU 设备上的现存总数 |
3.1.2 划分vDCU 示例
根据查询的物理DCU 设备信息,可以在指定的物理DCU 上进行vDCU 示例划分。
命令格式:
hy-virtual -d ${dev_id} \
-create-vdevices ${num_vdcu} \
-vdevice-compute-units $<cu_num, ...> \
-vdevice-memory-size $<mem_size, ...>
正常回显:
The virtual device is created successfully!
参数 | 描述 |
dev_id | 指定虚化划分vDCU 的物理DCU 的id,如未指定则默 认为所有DCU 进行划分 |
num_vdcu | 物理DCU 设备上需要划分的vDCU 数量 |
<cu_num, ...> | 指定每张vDCU 上划分的计算单元数量,划分单位为1 个,根据num_vdcu 数量填写,用逗号隔开 |
<mem_size, ...> | 指定每张vDCU 上划分的显存容量,划分单位为1 MiB,根据num_vdcu 数量填写,用逗号隔开 |
例如,以下指令为划分4 个vDCU,分别包含5,15,20,20 个计算单元以及4096,
8192,8192,8192MiB 的显存
hy-virtual -create-vdevices 4 -d 0 \
-vdevice-compute-units 5,15,20,20 \
-vdevice-memory-size 4096,8192,8192,8192
成功分配的回显为:
The virtual device is created successfully!
3.1.3 查询vDCU 示例信息
使用hy-virtual 命令行工具可以查看已经分配的vDCU 信息。
命令格式:
hy-virtual -show-vdevice-info
回显示例:
Virtual Device 0:
Actual Device: 7
Compute units: 5
Global memory: 4294967296 bytes
Virtual Device 1:
Actual Device: 7
Compute units: 15
Global memory: 8589934592 bytes
Virtual Device 2:
Actual Device: 7
Compute units: 20
Global memory: 8589934592 bytes
Virtual Device 3:
Actual Device: 7
Compute units: 20
Global memory: 8589934592 bytes
参数 | 描述 |
Virtual Device | vDCU 设备编号 |
Actual Device | vDCU 所在的物理DCU 设备号 |
Compute units | 当前vDCU 可使用的计算单元数量 |
Global memory | 当前vDCU 可使用的显存容量 |
3.2 使用vDCU
目前海光DCU 虚拟化方案支持三种使用方式:物理机、原生Docker、K8s 集群。
3.2.1 物理机内使用vDCU
使用命令行工具hdms,可以在特定vDCU 上执行指定程序。
命令格式:
hdms -v ${vdev_id} -p "${target_proc}"
参数 | 描述 |
vdev_id | 指定需要使用的vDCU,每个程序只能指定一块vDCU |
target_proc | 需要使用vDCU 设备的进程 |
3.2.2 Docker 容器内使用vDCU
用户参照配置流程创建vDCU 后,在容器启动的时候执行以下命令将vDCU 挂载至容
器内。以下命令表示用户在启动容器时,挂载第0 号虚拟DCU 实例。
命令格式:
docker run -it --name container_name \
--device=/dev/kfd \
--device=/dev/dri \
--device=/dev/mkfd \
-v /etc/vdev/vdev0.conf:/etc/vdev/docker/vdev0.conf:ro \
${docker_image:tag} \
/bin/bash
参数 | 描述 |
--device | 表示挂载到容器内的设备 |
-v /etc/vdev/vdev0.conf:/etc/vdev/docker/vdev0.conf:ro | 将物理机的0 号vDCU 配置文件映射 到容器目录内 |
docker_image:tag 容器镜像名称,请替换为实际容器 镜像名称 | 容器镜像名称,请替换为实际容器 镜像名称 |
3.2.3 Kubernetes 集群内使用vDCU
K8s 场景下,通过设备插件dcu-device-plugin-share,K8s 集群可以管理vDCU 资源。
目前只支持静态虚拟化方案,需要在DCU 节点提前划分好vDCU 实例,并给节点打上相应
资源标签。
(1).在需要划分虚拟化DCU 实例的节点(vDCU 节点),根据业务需求预设划分方式,
并打上相应标签:
# 此项为固定标签,部署设备插件时需要查询此标签
kubectl label nodes <node-name> dcu-mode=share
(2).在vDCU 节点上部署支持虚拟化功能的vDCU Device Plugin:
kubectl apply -f k8s-dcu-plugin-share.yaml
(3).创建AI 计算任务时,需要在yaml 文件内修改如下配置:
在pod spec 字段,需要添加nodeSelector,选择所需比例的vDCU 节点标签
...
spec:
nodeSelector:
dcu-mode: share # vDCU 节点的资源标签
...
在容器配置字段,resources 设定requests 和limits 资源类型为:hygon.com/dcu- share
...
resources:
requests:
hygon.com/dcu-share: 1 # 请求的vDCU 数量,最大值为1
limits:
hygon.com/dcu-share: 1 # 数值与请求数量一致
...
3.3 销毁vDCU
当前hy-virtual 命令行工具支持统一销毁所有vDCU,或单独指定物理卡并销毁此物理
卡上的全部vDCU。
命令格式:
hy-virtual -d ${dev_id} -destroy-vdevice
参数 | 描述 |
dev_id | 指定物理DCU 设备号,如未指定,则默认选定所有物理卡 |
-destroy-vdevice | 销毁此物理卡上的所有vDCU |