人工智能服务
>
模型训练
>
常见问题
凡涉及到训练命令需要使用机器名称时,可使用实例别名。具体示例如下:
(1)若使用 Horovod 训练框架,使用实例别名的启动命令可参考如下:
#方式1:
horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python train.py
# 参数解释
-np 分布式训练总加速卡数,一般为申请的节点数 * 每节点加速卡数
-H 申请节点的实例别名和每个节点的加速卡数,例如:server1:4,server1为实例别名,加速卡数为4,使用','分隔
python train.py 为具体执行训练脚本的命令
#方式2(使用hostfile文件):
cat myhostfile
server1 slots=4
server2 slots=4
server3 slots=4
server4 slots=4
# 然后运行
horovodrun -np 16 -hostfile myhostfile python train.py
# 参数解释
-np 分布式训练总加速卡数,一般为申请的节点数 * 每节点加速卡数
-hostfile 将节点名称和每个节点使用的加速卡数量写到一个hostfile中,
server1 为实例别名,slots=n,n为加速卡数量
python train.py 为具体执行训练脚本的命令
#方式3(等效mpi命令):
mpirun -np 16 \
-H server1:4,server2:4,server3:4,server4:4 \
-bind-to none -map-by slot \
-x NCCL_DEBUG=INFO -x LD_LIBRARY_PATH -x PATH \
-mca pml ob1 -mca btl ^openib \
python train.py
# 参数解释
-np 分布式训练总加速卡数,一般为申请的节点数 * 每节点加速卡数
-H 申请节点的实例别名和每个节点的加速卡数,例如:server1:4,即server1为实例别名,加速卡数为4,使用','分隔
-bind-to none 指定 Open MPI 不将训练进程绑定到单个 CPU 核心
-map-by slot 允许您混合使用不同的 NUMA 配置,因为默认行为是绑定到套接字
-x NCCL_DEBUG=INFO nccl设置为debug级的信息输出级别,将该信息传递给所有mpi进程
-x LD_LIBRARY_PATH 环境变量,nccl的动态链接库路径,将该环境变量传递给所有mpi进程
-x PATH 其他需要环境变量的路径,将该环境变量传递给所有mpi进程
-mca pml ob1和-mca btl ^openib标志强制使用 TCP 进行 MPI 通信,如果 IB 可用,它将通过 RoCE 或 InfiniBand 使用 RDMA
python train.py 为具体执行训练脚本的命令
(2)若使用 Deepspeed 训练框架,使用实例别名的启动命令可参考如下:
#方式1,
#创建一个 hostfile 文件,
cat hostfile
hostname1 slots=8
hostname2 slots=8
# 然后运行
deepspeed --num_gpus 8 --num_nodes 2 --hostfile hostfile --master_addr hostname1 --master_port=9901 your_program.py <normal cl args> --deepspeed ds_config.json
# 参数解释
--num_gpus 分布式训练总加速卡数量
--num_nodes 分布式训练总节点数量
--hostfile 将实例别名和每个节点使用的加速卡数量写到一个hostfile中,slots=n,n为加速卡数量
--master_addr 分布式训练时的主节点ip
--master_port 分布式训练时的主节点端口号,注意:不能被别的进程占用
your_program.py <normal cl args> 实际训练的脚本文件及脚本文件的参数
--deepspeed deepspeed的配置文件路径