典型场景章节中关于NPU训练任务分为下面两种情况:
使用Volcano作为调度器,NPU训练任务基础流程
- 训练任务需要通信集合配置文件(ranktable file,也叫hccl.json文件),创建如下ConfigMap资源等待配置文件生成,斜体并加粗的内容不可修改,示例如下。注意ConfigMap的名字,去掉前缀“rings-config-”后为mindx-dls-test,示例任务名以mindx-dls-test为例。
apiVersion: v1
kind: ConfigMap
metadata:
name: rings-config-mindx-dls-test
namespace: vcjob
labels:
ring-controller.atlas: ascend-910
data:
hccl.json: |
{
"status":"initializing"
}
- 创建vcjob或Deployment类型的任务。
- vcjob资源示例
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: mindx-dls-test
namespace: vcjob
labels:
ring-controller.atlas: ascend-910
spec:
minAvailable: 1
schedulerName: volcano
maxRetry: 3
queue: default
tasks:
- name: "default-test"
replicas: 1
template:
metadata:
labels:
app: tf
ring-controller.atlas: ascend-910
spec:
containers:
- image: tf_arm64:b030
imagePullPolicy: IfNotPresent
name: tf
env:
- name: mindx-dls-test
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: XDL_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
command: xxxxxxx
resources:
requests:
huawei.com/Ascend910: 8
limits:
huawei.com/Ascend910: 8
volumeMounts:
- name: ascend-910-config
mountPath: /user/serverid/devindex/config
nodeSelector:
host-arch: huawei-arm
volumes:
- name: ascend-910-config
configMap:
name: rings-config-mindx-dls-test
restartPolicy: OnFailure
- 资源的metadata.name需要与1中提到的任务名一致,本例为:mindx-dls-test。
- minAvailable和replicas建议保持一致。
- Job的metadata.labels和spec.tasks中都必须包含标签:ring-controller.atlas: ascend-910。
- 调度器schedulerName必须为:Volcano。
- 申请的资源request和limit中需要指明NPU资源类型,且数量要一致,可通过查看K8s中节点详情确定本节点可以使用的NPU资源类型,如整卡、虚拟化实例后的NPU等。
- 需要将1生成的ConfigMap以文件形式挂载到容器中。
- nodeSelector默认只支持Volcano启动时yaml中配置的键值对且必须使用“host-arch”标签,如需增加用户自己的selector,请参考Volcano调度配置。
- 目前只支持一个Pod中有一个容器使用NPU。
- 挂载驱动相关目录。如果不满足如下两种情况,需要用户自行挂载驱动相关目录。
- 当Ascend Device Plugin启动参数为useAscendDocker=true,用户已安装Ascend docker runtime且生效时,会自动帮用户挂载安装在“/usr/local/Ascend”下的驱动相关目录。
- 当Ascend Device Plugin启动参数为useAscendDocker=false时,也会自动帮用户挂载安装在“/usr/local/Ascend”下的驱动相关目录。
- 用户需要增加数据集、模型代码等路径的挂载,以及增加用户需要的其他内容,如环境变量等。
- 用户需要设置容器的启动命令,对应yaml的command字段,并且需要在任务启动之前自行解析挂载的ConfigMap,为训练任务设置必要的环境变量。
- Deployment资源示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: mindx-dls-test
labels:
app: tf
ring-controller.atlas: ascend-910
namespace: vcjob
spec:
replicas: 1
selector:
matchLabels:
app: tf
template:
metadata:
labels:
app: tf
ring-controller.atlas: ascend-910
deploy-name: mindx-dls-test
spec:
schedulerName: volcano
nodeSelector:
host-arch: huawei-x86
containers:
- image: tf_arm64:b030
imagePullPolicy: IfNotPresent
name: tf
env:
- name: mindx-dls-test
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: XDL_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
command: xxx
resources:
requests:
huawei.com/Ascend910: 8
limits:
huawei.com/Ascend910: 8
volumeMounts:
- name: ascend-910-config
mountPath: /user/serverid/devindex/config
volumes:
- name: ascend-910-config
configMap:
name: rings-config-mindx-dls-test
- 资源的metadata.name需要与1中提到的任务名一致,本例为:mindx-dls-test。
- replicas表示节点个数,单机为1,多节点分布式任务为实际节点个数。
- Deployment的metadata.labels和spec.template中都必须包含标签:ring-controller.atlas: ascend-910,另外spec.template中还必须包含key值“deploy-name”,value值为任务名的标签。
- 其余请参考•vcjob资源示例中说明的第四点及其以后的内容。
不使用Volcano作为调度器,NPU训练任务基础流程
使用某种资源类型创建训练任务,如Job、Deployment或者其他资源类型。Job、Deployment资源的创建请自行参考K8s的官方示例。
- 自行保证任务的一致性,特别是分布式场景,避免因为资源不足导致任务部分运行失败,造成资源浪费;避免单节点任务分配的2、4卡不满足亲和性导致任务失败或者性能下降。
- 需修改request和limit中NPU的资源名字和资源数量。可通过查看K8s中节点的详情确定本节点可以使用的NPU资源类型,如整卡、虚拟化实例后的NPU等。
- 目前只支持一个Pod中有一个容器使用NPU。
- 挂载驱动相关目录。如果不满足如下两种情况,需要用户自行挂载驱动相关目录。
- 当Ascend Device Plugin启动参数为useAscendDocker=true,用户已安装Ascend Docker Runtime且生效时,会自动帮用户挂载安装在“/usr/local/Ascend”下的驱动相关目录。
- 当Ascend Device Plugin启动参数为useAscendDocker=false时,也会自动帮用户挂载安装在“/usr/local/Ascend”下的驱动相关目录。
- 用户需要增加数据集、模型代码等路径的挂载,以及增加用户需要的其他内容,如环境变量等。
- 用户需要设置容器的启动命令,对应yaml的command字段。
- 需要自行为每个训练任务的Pod生成通信集合配置文件,如果是分布式训练任务需要保证这组任务的每个Pod中该文件内容一致。并且在训练任务执行前解析该文件来为训练任务设置必要的环境变量。