跳到主要内容

USER_GUIDE

前置条件

  • 多张 MT GPU 卡(单节点/多节点)
  • 一块或多块 InfiniBand 网卡
  • 已安装MUSA驱动
  • 已安装MUSA Toolkits软件包
  • 已安装mtml (容器内部直接安装mtml或者通过host端映射(若是通过container-toolkit方式起的容器,会直接映射进去))

配置网络

如果没有 IB 网卡,只有以太网,则无需配置 IB。PH1架构走的RoCE网络,需要使用环境变量指定RoCE v2协议(MCCL_IB_GID_INDEX=3)

安装IB驱动

如果有 IB 网卡,但是 IB 驱动未安装,请先安装 IB 驱动。

验证IB是否工作

通过ibstat命令查看IB端口是否正常工作

$ibstat

CA 'mlx5_0'
CA type: MT4123
Number of ports: 1
Firmware version: 20.31.1014
Hardware version: 0
Node GUID: 0xb83fd203005682a2
System image GUID: 0xb83fd203005682a2
Port 1:
State: Active
Physical state: LinkUp
Rate: 200
Base lid: 12
LMC: 0
SM lid: 5
Capability mask: 0x2651e848
Port GUID: 0xb83fd203005682a2
Link layer: InfiniBand

如果其中一个 network port 的 physical state 是 LinkUp,而且 Link layer 标明为 InfiniBand,就说明已经使能了 IB 网络。

安装mpich或者openMPI(多机场景安装)

MPI工具为MCCL提供跨节点的进程管理和通信基础,协调不同机器间的初始连接。多机场景下需要安装MPI工具。

#以下两种工具二选一安装即可
#1. mpich工具安装,安装mpich-4.2.0rc3版本
wget https://www.mpich.org/static/downloads/4.2.0rc3/mpich-4.2.0rc3.tar.gz
tar -xzf mpich-4.2.0rc3.tar.gz
cd mpich-4.2.0rc3
# 若已经执行过./configure ,需要执行make clean清除
make clean
./configure --with-device=ch3:sock
make -j64
sudo make install
#验证,mpich工具默认装在/usr/local/bin路径
export PATH=/usr/local/bin:$PATH
mpirun --version

#2. openMPI工具安装
#查看可用openmpi版本
apt list -a openmpi-bin
#安装openMPI(Ubuntu 22.04 + Linux 5.15.0-105-generic版本与AI部门对齐统一安装5.0.6版本,方便问题排查)
wget https://oss.mthreads.com/tmp/torch_musa_build/openmpi-5.0.6.tar.bz2
tar -jxf openmpi-5.0.6.tar.bz2
cd openmpi-5.0.6
./configure --prefix=/usr/local/openmpi --without-hcoll --without-ucx
make -j4 all
make install

#验证,openmpi工具手动安装统一装在装在/usr/local/openmpi路径
export PATH=/usr/local/openmpi/bin/:$PATH
mpirun --version

安装MCCL

tar -zxvf mccl*.tar.gz
cd mccl && ./install.sh

验证

确认mccl安装版本

#确认版本
export LD_LIBRARY_PATH=/usr/local/musa/lib:$LD_LIBRARY_PATH
/usr/local/musa/bin/mccl_version

#多机config文件配置(2节点为例)
#1. mpich配置文件:hostfile_with_mpich
<node1_ip>:<process_num>
<node2_ip>:<process_num>


#2. openmpi配置文件:hostfile_with_openmpi
<node1_ip> slots=process_num
<node2_ip> slots=process_num

#功能验证(单机+多机)
export PATH=/usr/local/musa/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/musa/lib:$LD_LIBRARY_PATH
cd mccl/mccl-test/

#单机验证
./all_reduce_perf -b 1M -e 1024M -f 2 -g 1

#multi cluster verify with openmpi
mpirun --allow-run-as-root --mca btl_tcp_if_include bond0 -hostfile ./hostfile_with_openmpi -x LD_LIBRARY_PATH=/usr/local/musa/lib:/usr/local/lib -x MCCL_PROTOS=2 -x MCCL_NET_SHARED_BUFFERS=0 -x MCCL_ALGOS=1 -x MCCL_IB_GID_INDEX=3 ./all_reduce_perf -b 1M -e 1024M -f 2 -g 1

#multi cluster verify with mpich
mpirun -hostfile ./hostfile_with_mpich -env LD_LIBRARY_PATH=/usr/local/musa/lib:/usr/local/lib -env MCCL_PROTOS=2 -env MCCL_NET_SHARED_BUFFERS=0 -env MCCL_ALGOS=1 -env MCCL_IB_GID_INDEX=3 ./all_reduce_perf -b 1M -e 1024M -f 2 -g 1