分布式训练
备注
阅读本篇前,请确保已按照 安装教程 准备好昇腾环境及 LLaMA-Factory !
本篇为 快速开始 的进阶,同样首先安装 DeepSpeed 和 ModelScope:
pip install -e ".[deepspeed,modelscope]" -i https://pypi.tuna.tsinghua.edu.cn/simple
多卡 NPU 指定
无论是单机还是多机环境,请先使用 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
显式指定所需 NPU 卡号,此处为 0~3 四卡 NPU。
备注
昇腾 NPU 卡从 0 开始编号,docker 容器内也是如此;
如映射物理机上的 6,7 号 NPU 卡到容器内使用,其对应的卡号分别为 0,1
或使用以下脚本自动检测并指定多卡 NPU:
# ------------------------------ detect npu --------------------------------------
# detect npu via npu-smi
if command -v npu-smi info &> /dev/null; then
num_npus=$(npu-smi info -l | grep "Total Count" | awk -F ":" '{print $NF}')
npu_list=$(seq -s, 0 $((num_npus-1)))
else
num_npus=-1
npu_list="-1"
fi
echo using npu : $npu_list
num_gpus=$(echo $npu_list | awk -F "," '{print NF}')
# --------------------------------------------------------------------------------
export ASCEND_RT_VISIBLE_DEVICES=$npu_list
单机多卡微调
通过 ASCEND_RT_VISIBLE_DEVICES
变量显式指定多卡后,使用 torchrun 启动分布式训练,需指定 nproc_per_node
参数为 NPU 卡数量,其余参数配置与 快速开始 中单卡微调保持一致
torchrun --nproc_per_node $num_npus \
--nnodes 1 \
--node_rank 0 \
--master_addr 127.0.0.1 \
--master_port 7007 \
src/train.py <your_path>/qwen1_5_lora_sft_ds.yaml
多机多卡微调
在每个节点上通过 ASCEND_RT_VISIBLE_DEVICES
变量显式指定需要用到的多个 NPU 卡,如果不指定,则默认使用所有 NPU 卡(此时需要确保显存是否够用)。
其次,必须在每个节点上使用 export HCCL_SOCKET_IFNAME=eth0
来指定当前节点的 HCCL 通信网卡(请使用目标网卡名替换 eth0
)。
以两机环境为例,分别在主、从节点(机器)上执行如下两条命令即可启动多机训练:
# 在主节点执行如下命令,设置 rank_id = 0
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train <your_path>/qwen1_5_lora_sft_ds.yaml
# 在从节点执行如下命令,设置 rank_id = 1
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 \
llamafactory-cli train <your_path>/qwen1_5_lora_sft_ds.yaml
变量名 |
介绍 |
---|---|
FORCE_TORCHRUN |
是否强制使用torchrun |
NNODES |
节点数量 |
NODE_RANK |
各个节点的rank。 |
MASTER_ADDR |
主节点的地址。 |
MASTER_PORT |
主节点的端口。 |