K8S接入昇腾NPU并分配到容器
官方参考地址**(非常全面)**:昇腾 - MindCluster
注: 本文档默认跳过k8s安装、Rancher安装、及华为npu驱动安装。 主要说明如何将华为npu集成到k8s
一、安装容器化支持插件(Ascend Docker Runtime)
要想在容器内使用npu必须安装官方提供的虚拟化插件 - 官方安装Ascend Docker Runtime地址
1、软件下载
官方仓库下载地址
根据CPU架构选择要下载的包arm64 / amd64
2、软件安装
# 将下载的 .run 文件放到服务器上 在服务器上同目录下运行
# chmod u+x 下载的.run 文件。 我这是鲲鹏920arm 芯片 运行如下代码:
# 执行 赋予权限
chmod u+x Ascend-docker-runtime_6.0.0_linux-aarch64.run
# 执行 安装
./Ascend-docker-runtime_6.0.0_linux-aarch64.run --install
# 显示如下后标识成功
# Uncompressing ascend-docker-runtime 100%
# [INFO]: installing ascend docker runtime
# ...
# [INFO] Ascend Docker Runtime install success
二、安装昇腾npu k8s 插件(ascend-k8sdeviceplugin)
安装ascend-k8sdeviceplugin 可实现让k8s获取到npu 官方Ascend Device Plugin 安装教程
ascend-k8sdeviceplugin 可以用镜像的方式安装到节点上
1、拉取官方镜像(ascend-k8sdeviceplugin)
打开华为官方镜像仓库,拉取ascend-k8sdeviceplugin镜像
镜像拉取地址
① 点击“镜像版本”
② 选择版本点击下载
③ 依次执行这三个命令拉取镜像
2、下载官方yaml文件
打开华为官方git 下载对应cpu架构的配置文件 git下载地址
# 修改镜像标签名
docker tag swr.cn-south-1.myhuaweicloud.com/ascendhub/ascend-k8sdeviceplugin:v6.0.0 ascend-k8sdeviceplugin:v6.0.0
给节点打标签!! 根据型号查询需要的标签
# 必须给主节点打标签 这里要根据自己的机器型号查询要打哪些标签 192.168.1.61 是节点名称
kubectl label nodes 192.168.1.61 masterselector=dls-master-node # 管理节点
kubectl label nodes 192.168.1.61 accelerator=huawei-Ascend910
kubectl label nodes 192.168.1.61 node-role.kubernetes.io/worker=worker
kubectl label nodes 192.168.1.61 workerselector=dls-worker-node
kubectl label nodes 192.168.1.61 host-arch=huawei-arm
kubectl label nodes 192.168.1.61 accelerator-type=module
修改yaml配置文件 (有一些目录宿主机没有地址 可以让容器自己创建)
# 在volumes下将 log-path 中 hostPath 的type 修改为 DirectoryOrCreate
volumes:
...
- name: log-path
hostPath:
path: /var/log/mindx-dl/devicePlugin
type: DirectoryOrCreate
...
启动插件
# 解压后将查看当前 昇腾处理器型号
npu-smi info
# 查看出现的型号是 310 还是 910
# 如果是310 则运行
kubectl apply -f {device-plugin-name}-310-{version}.yaml
# 如果是 910 则运行
kubectl apply -f {device-plugin-name}-volcano-{version}.yaml
# 或
kubectl apply -f {device-plugin-name}-910-{version}.yaml
注:
910 这两个命令分别是 :
device-plugin-910-v{version}.yaml 对应:Atlas 训练系列产品或Atlas A2 训练系列产品上不使用MindCluster Volcano的配置文件。
device-plugin-volcano-v{version}.yaml对应:Atlas 训练系列产品或Atlas A2 训练系列产品上使用MindCluster Volcano的配置文件。
{device-plugin-name}:表示对应软件版本yaml文件的前缀名,如上所述,v2.0.3.6版本之前为“ascendplugin”,后续版本为“device-plugin”。
{version}:表示镜像版本,需要和启动的yaml文件版本保持一致。
在kube-system中出现ascend-device… 状态正常则启动成功
3、容器分配算力
# 在yaml 中添加 配置即可分配实体卡
apiVersion: v1
kind: Pod
metadata:
name: test-npu-pod
namespace: npu-apps # 指定命名空间
spec:
containers:
- name: test-container
image: swr.cn-south-1.myhuaweicloud.com/ascendhub/ascend-pytorch:24.0.RC2-A2-2.1.0-ubuntu20.04
imagePullPolicy: Never # 强制使用本地镜像
command: ["sleep", "3600"] # 让容器保持运行状态,便于测试
resources:
limits:
huawei.com/Ascend910: 2 # 分配 2 个 NPU
requests:
huawei.com/Ascend910: 2 # 请求 2 个 NPU
env:
- name: DLS_TASK_NUMBER # 如果需要指定任务编号,可以设置环境变量
value: "2"
restartPolicy: Never