跳到主要内容

MUSA SDK rc3.1.0 安装使用说明

1.下载软件包​

# 软件包中应含包含以下文件
├── Installation_guide_for_MUSA_SDK_rc3.1.0.pdf
├── MUSA SDK rc3.1.0 发布说明.pdf
├── MUSA_Programming_Guide_v0.9.4.pdf
├── MCCL_rc1.7.0
│ ├── MCCL_API_Reference_rc1.7.0.pdf
│ └── mccl_rc1.7.0.tar.gz
├── MT_Linux_Driver_2.7.0
│ └── musa_2.7.0-rc3-0822_Ubuntu_amd64.deb
├── muTriton_rc1.0.0
│ └── triton_rc1.0.0.tar.gz
├── muDNN_rc2.7.0
│ └── mudnn_rc2.7.0.tar.gz
├── MUSA_Toolkits_rc3.1.0
│ ├── docs
│ │ ├── muBLAS_API_Reference_rc1.6.0.pdf
│ │ ├── muDNN_API_Reference_rc2.7.0.pdf
│ │ ├── muFFT_API_Reference_rc1.6.0.pdf
│ │ ├── muSOLVER_API_rc1.0.0.pdf
│ │ ├── muSPARSE_API_Reference_rc1.1.0.pdf
│ │ ├── muPP_API_Reference_rc1.7.0.pdf
│ │ ├── muRAND_API_Reference_rtm1.0.1.pdf
│ │ ├── MUSA_Compiler_Collection_User_Manual_rc3.1.0.pdf
│ │ ├── MUSA_Driver_API_Reference_rc3.1.0.pdf
│ │ └── MUSA_Runtime_API_Reference_rc3.1.0.pdf
│ └── musa_toolkits_rc3.1.0.tar.gz
└── SmartIO_1.2
└── mt-peermem_1.2_amd64.deb

2.驱动安装​

2.1 资源需求:​

  • MT GPU 卡
  • 操作系统:Ubuntu 22.04
  • 内核版本 5.15.0-105-generic

说明:

集群内部机器无法直接在宿主机上安装 deb 包,请卸载 operator 相关组件后安装。

2.2 配置 Bios​

  1. 将显示器连接到主板上,并断开电源重新启动计算机。 在启动过程中,按下 delete 键 以进入 BIOS 设置界面。
  2. 在 BIOS 设置界面中,找到并开启 above 4G 选项。
  3. 查找并将 resize bar 开关置为 ON。请注意,大部分主板在首次开机时此选项默认为 OFF,并且通常显示在 BIOS 菜单的右上角。
  4. 如果使用的是内存 >=256G 的服务器,则必须开启 IOMMU(VT-d) 选项。
# 如果 IOMMU 是关闭的, 可通过如下步骤开启
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu.passthrough=0"/' /etc/default/grub
# 如果你的 CPU 是 AMD/HG, 请改为 amd_iommu=on, 而不是 intel_iommu=on
sudo update-grub
sudo reboot
#根据如下命令判断是否开启IOMMU
sudo cat /var/log/dmesg | grep -e "AMD-Vi: Interrupt remapping enabled" -e "IOMMU enabled"
#注意:第二行会清除系统上原有的quiet,以保证重启后BMC能看到图形界面。另外,请务必选择软重启,硬重启不能保证所有写入行为同步到文件。
  1. 按 F10 键保存 BIOS 配置并退出。

2.3 安装 MT 驱动 Deb 包​

2.3.1 环境依赖​

# 查看 pci 是否识别到显卡
lspci -nn | grep 1ed5
#安装依赖包(若已安装请忽略)
sudo apt install lightdm (安装时,default display manager 选择 lightdm)
sudo apt install dkms (如果为非 dkms deb 包,可忽略该步骤)
sudo apt install libgbm1 libglapi-mesa

2.3.2 卸载驱动​

#卸载 old musa deb
sudo dpkg -P musa
#如果报错 mtgpu is inuse,直接重启即可
sudo rmmod mtgpu
#查询是否仍有 mtgpu ko 残留
lsmod |grep mtgpu

2.3.3 安装驱动​

#安装 MT DDK 驱动,以 musa_2.7.0-rc3-0822_Ubuntu_amd64.deb包为例
sudo dpkg -i musa_2.7.0-rc3-0822_Ubuntu_amd64.deb
# 重启电脑来更换驱动(强烈建议)
sudo reboot
#如果特殊情况下希望不重启更换驱动,可以手动重新加载驱动
modprobe -rv mtgpu && modprobe mtgpu

2.3.4 设置用户组​

非 Root 用户如需获取设备使用权限,可参考以下方式设置:

# 把普通用户账号,加进 render group。
sudo usermod -aG render ${USER}
sudo usermod -aG video ${USER}
# 重新登入账户

2.4 验证安装 && 版本查询​

2.4.1 clinfo && mthreads-gmi​

# 通过 clinfo 校验 DDK 安装。
clinfo |grep "Platform Name"
输出 Moore Threads OpenCL 即安装成功。
# 通过 mthreads-gmi 校验 DDK 安装。
mthreads-gmi

2.4.2 查看版本信息​

#查看 UMD 版本信息
sed -i "1i /usr/lib/uname -m-linux-gnu/musa" /etc/ld.so.conf.d/uname -m-linux-gnu.conf
ldconfig /usr/lib/x86_64-linux-gnu/musa/
clinfo |grep "Driver Version"
#查看 KMD 版本信息
方式一 :dmesg |grep "Driver Version"
方式二 :cat /var/log/dmesg | grep "Driver Version"

2.5 其他​

  • 多卡环境,配置用户可见设备 通过设置 MUSA_VISIBLE_DEVICES 环境变量来指定。

  • 如何开启显示桌面 Ubuntu 22.04 默认使用 gdm3,参考如下命令安装 lightdm:

    apt install lightdm
    dpkg-reconfigure lightdm
  • 安装 video firmware

    #解压 video_firmware 包
    unzip video_firmware.zip
    cd video_firmware/
    sudo cp -rf * /lib/firmware/
  • 设置 DISPLAY 输出选项

    # DP输出
    echo "options mtgpu display=dp" > /etc/modprobe.d/mtgpu.conf
    # HDMI输出
    echo "options mtgpu display=hdmi" > /etc/modprobe.d/mtgpu.conf
    # Dummy输出
    echo "options mtgpu display=dummy" > /etc/modprobe.d/mtgpu.conf
  • 关闭开机自动加载 mtgpu.ko

    #在 /etc/modprobe.d/mtgpu.conf 中设置 blacklist。
    echo "blacklist mtgpu" >> /etc/modprobe.d/mtgpu.conf
  • 重新加载 ko 后需要重启 lightdm 来获取显示

    systemctl stop lightdm
    systemctl start lightdm
  • 删除 Xorg 配置文件

    sed -i "s/lib\/xorg/local\/bin/" /usr/bin/X
    ldconfig /usr/local/lib

3.MUSA Toolkit 安装指南​

本章主要描述了 MUSA Toolkit 的详细安装步骤。

前提条件​

已安装兼容版本 MT GPU 驱动。

3.1 准备工作​

  1. 检查 MT GPU 驱动版本。
mthreads-gmi
  1. 若未安装或未安装适配版本 MT GPU 驱动,请参考上一节驱动安装。

3.2 安装 MUSA Toolkit​

MUSA Toolkit 支持安装到主机(host)或 docker 环境中。

说明:

  • 运行环境在 docker 上,建议在 docker 中安装 musa toolkit。
  • 运行环境在 host 上,且需要安装 container toolkit 时。安装顺序为 musa toolkit > container toolkit,否则会和 container tookit 发生冲突。

3.2.1 安装​

先进入到安装包的下载目录下,然后依次执行:

# 以musa_toolkits_rc3.1.0.tar.gz为例
tar -zxvf musa_toolkits_rc3.1.0.tar.gz
cd musa_toolkits_install
bash ./install.sh -u # 先卸载环境已安装的musa
bash ./install.sh # 以上两条命令非root用户需要sudo提权执行

正常安装完毕后,终端会输出如下提示:

Successfully installed MUSA in /usr/local/musa
Please export /usr/local/musa/bin to PATH in ~/.bashrc
export PATH=/usr/local/musa/bin:${PATH}
Please export /usr/local/musa/lib to LD_LIBRARY_PATH in ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/musa/lib:${LD_LIBRARY_PATH}

3.2.2 设置环境变量​

  1. 文本编辑器打开用户终端配置文件:

    vim ~/.bashrc
  2. 在打开的配置文件末尾追加如下命令:

    export MUSA_INSTALL_PATH=/usr/local/musa
    export PATH=$MUSA_INSTALL_PATH/bin:$PATH
    export LD_LIBRARY_PATH=$MUSA_INSTALL_PATH/lib:$LD_LIBRARY_PATH
  3. 配置文件会在下次启动终端时生效。如果想立即在当前终端生效,请执行:

    source ~/.bashrc

3.2.3 验证​

验证 MUSA Toolkit 是否安装成功,运行以下命令。

musa_version_query

将输出如下结果:

说明:

这里仅展示重要信息,实际运行可能有其他详细信息

# 这里以1.5.0版本为例
musa_toolkits:
{
"version": "1.5.0"
}
mcc:
{
"version": "1.5.0"
}
mublas:
{
"version": "1.1.0",
"build archs": "21"
}
mufft:
{
"version": "1.2.0",
"build archs": "21"
}
muPP:
{
"version": "1.3.0",
"build archs": "21"
}
murand:
{
"version": "0.9.0",
"build archs": "21"
}
musify:
{
"version": "0.2.0"
}
musa_runtime:
{
"version": "1.5.0"
}

检查子模块是否正确包含以及数学库的架构是否正确。

其次验证musa是否能正常运行,运行一下命令musaInfo, 正常会有如下输出:

$ musaInfo

compiler: mcc
--------------------------------------------------------------------------------
device# 0
Name: MTT S80
pciBusID: 1
pciDeviceID: 0
pciDomainID: 0
multiProcessorCount: 32
maxThreadsPerMultiProcessor: 6144
isMultiGpuBoard: 1
clockRate: 1800.04 Mhz
memoryClockRate: 7000 Mhz
memoryBusWidth: 256
totalGlobalMem: 15.92 GB
sharedMemPerMultiprocessor: 28.00 KB
totalConstMem: 8192
sharedMemPerBlock: 28.00 KB
canMapHostMemory: 1
regsPerBlock: 262144
warpSize: 128
l2CacheSize: 25165824
computeMode: 0
maxThreadsPerBlock: 1024
maxThreadsDim.x: 1024
maxThreadsDim.y: 1024
maxThreadsDim.z: 1024
maxGridSize.x: 2147483647
maxGridSize.y: 2147483647
maxGridSize.z: 2147483647
major: 2
minor: 1
concurrentKernels: 1
cooperativeLaunch: 0
cooperativeMultiDeviceLaunch: 0
isIntegrated: 0
maxTexture1D: 32768
maxTexture2D.width: 32768
maxTexture2D.height: 32768
maxTexture3D.width: 16384
maxTexture3D.height: 16384
maxTexture3D.depth: 2048
peers:
non-peers: device#0

memInfo.total: 15.92 GB
memInfo.free: 15.79 GB (99%)

4.muDNN 安装指南​

本章主要描述了 muDNN 的详细安装步骤。

4.1 准备工作​

已安装兼容版本 MT GPU 驱动及MUSA Toolkit。

4.2 安装 muDNN​

4.2.1 安装​

# 以mudnn_rc2.7.0.tar.gz为例
tar -zxvf mudnn_rc2.7.0.tar.gz
cd mudnn && ./install_mudnn.sh -i

4.2.2 设置环境变量​

DNN_PATH=$(realpath mudnn)
export LD_LIBRARY_PATH=${DNN_PATH}/lib:$LD_LIBRARY_PATH

安装完成后,您可以查看 muDNN 的所有 API。

5.MCCL 安装指南​

本章主要描述了如何配置 MCCL 运行环境及其安装步骤。

5.1 资源需求:​

  • 多张 MT GPU 卡
  • 一块或多块 InfiniBand 网卡
  • 已安装 Linux 操作系统的服务器

5.2 检查项目​

确认以下开关、组件及其版本号,以便安装 MCCL 后能顺利运行。

# System BIOS & OS IOMMU enabled
# ib devices & ib driver
# DDK version
# KMD enable_rdma
# Smart IO with mt_peermem
# MUSA Toolkit version

5.3 配置IOMMU​

5.3.1 确认内存容量​

# check system physical memory size
sudo dmidecode -t memory | grep Size: | grep -v "No Module Installed" | awk '{sum+=$2}END{print sum}'

如果内存总量>256 GB,则请开启 IOMMU 以使能 GPU Direct peer-to-peer,否则 MCCL 的传输路径默认为 /dev/shm,该路径的通信带宽较低。

5.3.2 确认grub配置​

sudo cat /var/log/dmesg | grep -e "AMD-Vi: Interrupt remapping enabled" -e "IOMMU enabled"

如出现 kernel: DMAR: IOMMU enabled 或者 kernel: AMD-Vi: Interrupt remapping enabled,则说明 IOMMU 已经打开并使能。

如不出现,则需要在grub中使能IOMMU并重启

# if IOMMU is off, perf the following steps
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu.passthrough=0 pci=disable_acs_redir=pci:1000:c030"/' /etc/default/grub
# If your CPU is AMD/HG, please use amd_iommu=on, not intel_iommu=on
sudo update-grub
sudo reboot

注意:

第二行会清除系统上原有的 quiet,以保证重启后 BMC 能看到图形界面。另外,请务必选择软重启,硬重启不能保证所有写入行为同步到文件。

pci=disable_acs_redir=pci:1000:c030 中的1000:c030 是GPU上游PCIe switch或者root complex设备的vendor:device号,默认为S4000 MCCX2.0中的1000:c030。不同服务器的upstream设备不同,可以按照如下脚本查询

GPU_BDF=$(lspci -nn | grep 1ed5 | awk '{print $1}' | head -n 1)
GPU_PCI_PATH=$(realpath /sys/bus/pci/devices/0000:$GPU_BDF/)
UPSTREAM_BDF=$(echo $GPU_PCI_PATH | awk -F'/' '{print $(NF-1)}' | sed 's/^0000://')
echo $(lspci -nn | grep $UPSTREAM_BDF)

将终端得到的vendor:device字段,如下列的1000:c030填到pci=disable_acs_redir=pci:后即可

07:00.0 PCI bridge [0604]: Broadcom / LSI Device [1000:c030] (rev b0)

5.3.3 确认BIOS配置​

如果 BMC 有 BIOS checking 功能,可以先检查 VT-d (Intel) / IOMMU (AMD or HG) 是否已被打开。

如果当前处于 IOMMU disabled 状态,则需要在 BIOS 以及 grub 中手动开启 IOMMU:

  • Intel 平台:使能(enable) **Intel VT for Directed I/O (VT-d)**选项。
  • AMD 或海光平台:使能 IOMMU选项。

5.4. 配置网络​

如果没有 IB 网卡,只有以太网,则无需配置 IB。

5.4.1 安装 IB 驱动​

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

5.4.2 配置 OpenSM 服务(可选)​

如果没有 IB 交换机,2 台服务器间 IB 端口通过 IB 光纤直连,可配置 OpenSM 服务。

5.4.2.1 配置 OpenSM​

两台服务器都需要做以下配置:

opensm --create-config /etc/opensm/opensm.conf

编辑修改 /etc/opensm/opensm.conf 以下内容:

routing_engine updn
sm_priority 13 # 范围为 0-15,这里两台服务器sm_priority要不一样,数值大的为 master,另一台即为 back。

如果一台服务器有多个 IB 端口,需要同时运行 OpenSM 服务,可进行以下配置:

  • 手动,对每个 IB 端口启动 opensm 服务。

    opensm -B -g <port guid> # 如 opensm -B -g 0xb83fd203005686b2
  • 自动,在 /etc/opensm/opensm.conf中,guid 项添加多个 IB 端口 guid,以逗号隔开,如:

    # DEVICE ATTRIBUTES OPTIONS
    #
    # The port GUID on which the OpenSM is running.
    # Multiple port GUIDs can be specified separated by comas
    guid 0xb83fd2030056874a,0xb83fd203005686b2

5.4.2.2 启动 OpenSM​

手动启动:

systemctl start opensm # 或 /etc/init.d/opensmd start

设置开机启动:

systemctl enable opensm

5.4.2.3 检查 OpenSM 是否正常工作​

sudo mst status

5.4.3 验证 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 网络。

5.5 安装 MT GPU 驱动​

请确保 MT GPU 驱动正确安装,参考前面的驱动安装章节。

如果使用容器环境工作,更新驱动后,请务必重启容器,以便在容器中使能新驱动。

5.6 安装 MT SmartIO​

如果已安装旧版本,请先卸载:

sudo rmmod mt_peermem

安装 MT SmartIO, 以 smartio_rc1.2 为例:

sudo dpkg -i mt-peermem_1.2_amd64.deb

5.7 安装 MUSA Toolkit​

请确保安装正确版本的 MUSA Toolkit,参考前面MUSA Toolkit安装指南章节。

重要提示:

MUSA Toolkit 需要安装在运行环境中:

  • 运行环境在 host 端,则需要先安装 MUSA Toolkit,再安装 MT container toolkits,否则 MUSA Toolkit 会和 MT container toolkits发生文件冲突。
  • 运行环境在 docker 容器中,直接在 docker 容器中安装 MUSA Toolkit。

完装完毕后,请根据提示,配置相关环境变量。

5.8 检查驱动及 MUSA Toolkit 是否安装成功​

/usr/local/musa/bin/driver_version_query
/usr/local/musa/bin/musa_version_query
/usr/local/musa/bin/musaInfo

5.9 安装 MCCL​

安装 MCCL 包,以 mccl_rc1.7.0.tar.gz 为例:

sudo tar -zxvf mccl_rc1.7.0.tar.gz
cd ./mccl
sudo ./install.sh -id /usr/local

5.10 环境优化​

除了 IOMMU 特性,系统中的其他特性也会对通信性能造成一定影响,如:处理器的动态调频技术,UPI 总线的能效管理功能等。

为了获取最佳性能,建议您在不同服务器上为 MCCL 设置如下对应的优化选项。

  • MCCX 1.0 (Lenovo D800)
OPTIONVALUE
OPTIONVALUE
Devices and I/O Ports->MM Config Base3GB
Operation ModeMaximum Performance
Power->Workload ConfigurationI/O sensitive
Memoy->Patrol ScrubDisabled
Processor->SNCEnabled
  • MCCX 2.0 (H3C)
OPTIONVALUE
Socket Configuration→Advance Power Management Configuration→Workload Profile ConfigurationLow Latency
Socket Configuration→Common RefCode Configuration→Virtual NumaEnabled
Socket Configuration→Advance Power Management Configuration→CPU-Advanced PM Tuning→Energy Perf BIAS→Workload ConfigurationI/O sensitive

注意:

在 MCCX 2.0 上,部分 BIOS 优化选项不会生效,如:CPU Power Management 的 governor 配置。所以进入系统后,您可以执行以下命令来使 CPU 进入 performance 模式。

sudo cpupower -c all frequency-set -g performance

如果出现以下日志,则说明当前平台不支持 Linux OS 下配置 CPU 运行频率。

Setting cpu: 0
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid policy?
- Trying to set a specific frequency, but userspace governor is not available,
for example because of hardware which cannot be set to a specific frequency
or because the userspace governor isn't loaded?