模型训练
创建训练任务
参数说明
-
分类:任务的分类,根据实际情况从调试、推理、训练、特别中选择一个。选择调试分类时,将提供专有的调试集群以保证调试工作尽量无需排队,随时开始。
-
项目:任务所属的项目,可以从左侧菜单的 [研发项目] 模块查看,若需添加请联系运维;
-
名称:训练任务的名称。
-
单机/多机:单机训练默认实例数量为1,不可更改,多机训练sku数量需大于等于5
-
超时时间:仅针对调试任务,为防止调试任务在无人使用时持续占用资源,调试任务默认超时时间为6小时,最长不能超过12小时,超时后任务将自动终止。
-
框架
-
MpiJob,可以用mpirun或deepspeed的方式进行训练。系统会自动生成hostfile,路径在环境变量OMPI_MCA_orte_default_hostfile里面,可以在执行命令中使用该环境变量。注意:只有launcher节点才有hostfile,laucher节点就是Pod名称后面有laucher-xx的节点,ssh登录调试的时候要注意。
-
PyTorchJob,可以用pytorch的方式进行分布式训练。系统会自动生成MASTER_ADDR, MASTER_PORT, RANK, WORLD_SIZE, PET_NPROC_PER_NODE等环境变量,可以在执行命令中使用这些环境变量。PyTorchJob所有的环境变量如下:
-
MASTER_PORT: master节点端口号
-
PET_MASTER_PORT: master节点端口号
-
MASTER_ADDR: master节点地址
-
PET_MASTER_ADDR: master节点地址
-
WORLD_SIZE: GPU总数
-
RANK: 节点索引(取值0~节点数-1)
-
PET_NPROC_PER_NODE: 单节点的GPU数量
-
PET_NODE_RANK: 同RANK
-
PET_NNODES: 节点总数
-
-
执行命令:MpiJob框架会在launcher节点执行命令,mpirun和deepspeed会自动SSH登录到worker节点执行训练命令。PyTorchJob框架和单机训练则会在所有节点执行命令,环境变量的值会自动根据节点生成。例如:
deepspeed示例命令:
deepspeed --hostfile $OMPI_MCA_orte_default_hostfile train.py
pytorch示例命令:
python -m torch.distributed.launch --nproc_per_node $PET_NPROC_PER_NODE --nnodes $PET_NNODES --node_rank $RANK --master_addr=$MASTER_ADDR --master_port=$MASTER_PORT train.py
一些NCCL和CUDA的环境变量如果设置错误,容易出现NCCL通信错误,相关说明和建议如下:
| 环境变量 | 用途 | 负面影响 | 建议值 |
|---|---|---|---|
| NCCL_DEBUG=INFO | 检查拓扑建立过程,是否成功调用IB/ROCE,获取底层异常信息等。 | (1)训练起来后仍会持续打印大量无价值的日志,掩盖有效信息; (2)Pytorch分布式库本身对nccl异常包了一层,训练起来后nccl日志价值不大 |
非调试不应设置 |
| NCCL_SOCKET_IFNAME | 无论是单机多卡还是多机多卡,均需要一张可正常TCP通信的网卡进行初始化握手。如果有其他性能更好的网卡(IB/ROCE)可供使用,握手网卡不是最终要使用的网卡。 | 如果设置的网卡均不可用或不存在,nccl建立通信的流程报错 | 交给AI Hub平台自动设置。 开启IB网络时,自动设置为front1; 不开启IB网络时,自动设置为en。 |
| NCCL_IB_DISABLE=1 | 这个变量名有歧义,其实叫“NCCL_RDMA_DISABLE”更为合适。 用于强制RDMA网卡(IB网卡和ROCE网卡)按普通以太网卡使用,作为调试手段。 |
经实测,可跑满100Gbps的ROCE网络,若被设置成普通以太网卡(协议栈开销大、需要走CPU和PCIE绕远路)使用,带宽仅可跑到30Gbps。 | 交给AI Hub平台自动设置。 开启IB网络时,自动设置为0; 不开启IB网络时,自动设置为1。 理论上ROCE也不应设置为1,ROCE不设置是否会导致训不起来还在调查中,欢迎提供案例。 |
| NCCL_P2P_DISABLE=1 | 强制关闭GPUtoGPU,GPUtoRDMA网卡的点对点通信。 | 本身支持点对点通信的GPU,被迫走CPU和PCIE绕远路,影响效率 | 正常情况下不应设置。 4090不支持P2P通信,早期某些机器因驱动和CUDA版本问题需要此设置避免报错。 |
| CUDA_LAUNCH_BLOCKING=1 | Pytorch中CPU做Kernel Launch和GPU做Kernel执行是异步操作,当GPU执行Kernel报错时,CPU已在执行后面的算子,给出的崩溃栈位置是不准确的。 使用该环境变量实现当前Kernel执行完成前,CPU堵塞,从而实现CPU和GPU的强制同步。 |
异步执行有利于缓解CPU执行Python代码 Launch Kernel跟不上GPU 执行Kernel效率的问题。强制同步会导致前向包含大量的GPU等待CPU下发Kernel的时间(气泡时间) | 非调试不应设置 |
| PYTORCH_NO_CUDA_MEMORY_CACHING=1 | 强制关闭Pytorch显存池 用于调试OOM问题。 |
显存临时分配和释放属于系统调用,开销较大 显存池将显存的分配和释放在用户态实现以减小开销 显然关闭显存池会有明显的性能开销 |
非调试不应设置 |
- 镜像地址:如果是MpiJob框架或者开启SSH,需要在镜像里面安装好SSH,Dockerfile的相关命令如下:
RUN apt-get update && apt-get install -y --no-install-recommends \
openssh-client \
openssh-server \
pdsh \
&& rm -rf /var/lib/apt/lists/*
另外,不要修改ssh的默认端口号(22),也就是/etc/ssh/ssh_config里面的Port,否则会导致worker节点训练无法启动。
-
总是拉取镜像:如果选是,则启动任务的时候会拉取最新的镜像;如果选择否,则会用已有的镜像。
-
共享内存:单位GB,建议。
-
实例数量:训练节点(Node)的数量,worker节点数量。
-
开启SSH:如果开启SSH,需要先在镜像中安装好SSH。之后在POD详情中的SSH信息中可以看到登录SSH的方法,例如:
-
IB网络:如果开启IB网络,需要虚拟集群支持才行。
-
描述:选填。
-
通知设置: 可选在任务完成或仅失败时发送通知到用户邮箱和通知中心,也可以选择不通知。
-
环境变量:配置环境变量后,会打到每个pod中
-
虚拟集群:按GPU资源分组的虚拟集群。集群可用的资源可以在左侧菜单的【Dashboard - 集群概览】查看, 当分类选择调试时, 将仅展示专用调试集群, 其他分类展示通用集群。
-
高级选项:
-
开启SYS_ADMIN:获得更高系统权限以开启NVIDIA Nsight Compute 进行 GPU 性能分析。如无该选项,请联系管理员开通权限。注:此功能仅允许用于 GPU 性能分析,如有其他用途,请与管理员联系确认。
-
计算资源数量:每个计算节点(Node)分配的虚拟集群资源SKU数量。单个节点消耗的资源数等于:SKU数量*虚拟集群SKU资源。
-
数据存储:可访问的外部存储,勾选后可在pod内访问,路径字段为在pod内访问的路径,目前支持的存储
-
内网:华为存储
-
外网:深信服存储
查看pod状态和操作pod
任务创建后,系统将自动创建任务pod,单机任务创建一个pod,多机任务创建和实例数量相等的pod,pod是任务运行的载体,用户可以通过pod查看任务的运行状态或进行更多操作。
-
查看和操作pod
点击任务名称前的加号展开pod列表,可以查看pod名称,状态,查看pod的日志,k8s事件,k8s YAML文件,还可以exec进入pod执行操作或将当前pod提交为镜像。

- 查看pod日志
- 查看k8s事件
- 查看k8s YAML文件
- exec进入pod执行操作:点击“Exec进入容器”按钮,点击将弹出新页面命令行,无需安装ssh也可以进入容器执行命令;
- 将当前pod提交为镜像:点击跳转到镜像管理生成镜像页面,可以更快捷的从模型训练生成镜像,详情请见【镜像管理 - 创建镜像】。
查看资源指标
-
查看任务的资源指标
点击任务名称跳转到详情页
点击资源指标按钮跳转到监控页
查看该任务当前的资源指标
-
查看Pod的资源指标
点击Pod名称跳转到详情页
点击资源指标按钮跳转到监控页
查看该Pod当前的资源指标
环境变量检查
在导致训练任务失败的原因中,大多数问题是环境变量设置有误引起的。例如引用的环境变量没有初始化导致工作节点Fail、开启IB网络但没有设置相关的环境变量导致socket timeout等等。因此环境变量检查工具能够协助用户更快地定位并解决问题,用户通过埋点的方式上报环境变量后,检查工具会将分析结果通知到用户。如下所示:
使用环境变量检查工具的步骤如下:














