多机特性介绍

针对于模型参数特别大的场景(如175B以上参数量模型)以及长序列场景,用户可选择使用多台服务器组合进行推理以达到较优效果,多机通信目前有两种硬件连接方式,PCIE建联以及RDMA建联。使用多机推理时,需要将包含设备ip,进程号信息,服务器ip信息的json文件地址传递给底层通信算子。

多机通信有多种并行策略可以结合,目前主流的并行策略包括Tensor Parallel(TP,张量并行),Pipeline Parallel(PP,流水并行),Sequence Parallel(SP,序列并行)以及MoE(Mixture of Experts)类模型特有的Expert Parallel(EP,专家并行)。通过不同的并行策略的结合,可以最大化整体吞吐量,获得最优性能表现,目前模型默认使用纯TP并行方式执行推理,部分开源模型已经完成多机多卡推理能力构建,其中包括LLaMa系列模型(包括基于LLaMa实现的模型),DeepSeek-MoE以及Mixtral-MoE。

限制与约束

模型适配

模型需预先基于ATB加速库组图方式完成流水图构建,即模型可以通过MindIE LLM调用ATB加速库组图的方式实现单机推理,在此基础上,需要将一个json文件地址传递给通信算子用于设备的ip,进程关系解析,本文件需借助hccn_tool手动生成,生成方式如下:

hccn tool工具的安装及使用详见HCCN Tool 接口参考

执行推理

若需要实现多机推理,在基础单机推理的启动脚本基础上,需要做出以下适配修改,首先应声明以下额外的环境变量,以双机16卡为例:

export BACKEND=hccl
export WORLD_SIZE=16
export RANKTABLEFILE=""(引号内填入RankTableFile的绝对路径)

多机推理时,每一台机器上的推理脚本都需要进行单独的适配修改,在执行推理时,每一台机器上的推理脚本都需要被同步执行。

将torchrun进行进程拉起的部分替换为如下使用python的方式进行拉起:

cd ${ATB_SPEED_HOME_PATH}
RANK_ID_START=0  #主节点该值为0,副节点此值应为(WORLD_SIZE / 2)
WORLD_SIZE_LOCAL=8
for((RANK_ID=$RANK_ID_START;RANK_ID<$((WORLD_SIZE_LOCAL+RANK_ID_START));RANK_ID++));
do
export RANK=$RANK_ID
export LOCAL_RANK=$RANK_ID  #主节点local_rank与rank相同,副节点local_rank = rank - word_size_local
python3 ./examples/run_pa.py  --model_path /data/atb_testdata/weights/llama2-70b/ \
--max_output_length 35  --max_batch_size 1 --input_text "What's Deep Learning?" &
done
wait