更新时间:2024-04-30 GMT+08:00

在容器镜像中安装MLNX_OFED

场景描述

ModelArts GPU服务器上配置了Mellanox Technologies网卡,支持RDMA(Remote Direct Memory Access)。因此可以在容器镜像中安装MLNX_OFED,使得NCCL可以启用该网卡,提高跨节点通信效率。

NCCL启用该网卡后,跨节点通信采用的方法为NET/IB。未启用该网卡时,跨节点通信采用的方法为NET/Socket。NET/IB在时延与带宽方面都要优于NET/Socket。

表1 ModelArts GPU服务器Mellanox Technologies网卡和MLNX_OFED安装情况

服务器GPU型号

Mellanox Technologies网卡

服务器安装的MLNX_OFED版本

推荐容器镜像安装的MLNX_OFED版本

Vnt1

ConnectX-5

4.3-1.0.1.0/4.5-1.0.1.0

4.9-6.0.6.0-LTS

Ant8/Ant1

ConnectX-6 Dx

5.5-1.0.3.2

5.8-2.0.3.0-LTS

安装MLNX_OFED

以Ubuntu18.04的容器镜像为例,安装MLNX_OFED 4.9-6.0.6.0-LTS的Dockerfile示例如下。

Dockerfile中涉及文件下载,构建容器镜像的主机要求能够连通公网。

FROM nvidia/cuda:11.1.1-runtime-ubuntu18.04

RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \
    sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \
    sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \
    echo > /etc/apt/apt.conf.d/00skip-verify-peer.conf "Acquire { https::Verify-Peer false }" && \
    apt-get update && \
    apt-get install --no-install-recommends -y lsb-core curl && \
    curl -k -o /tmp/MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64.tgz https://content.mellanox.com/ofed/MLNX_OFED-4.9-6.0.6.0/MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64.tgz && \
    cd /tmp && \
    tar xzf MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64.tgz && \
    cd MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64 && \
    ./mlnxofedinstall --user-space-only --without-fw-update --without-neohost-backend --force && \
    rm /tmp/MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64.tgz && \
    rm -rf /tmp/MLNX_OFED_LINUX-4.9-6.0.6.0-ubuntu18.04-x86_64 && \
    apt-get clean && \
    mv /etc/apt/sources.list.bak /etc/apt/sources.list && \
    rm /etc/apt/apt.conf.d/00skip-verify-peer.conf

构建容器镜像命令示例如下:

docker build -f Dockerfile . -t nvidia/cuda:mlnx-ofed-4.9-11.1.1-runtime-ubuntu18.04

构建完成后,执行如下命令可以查询容器镜像中的MLNX_OFED版本。

docker run -ti --rm nvidia/cuda:mlnx-ofed-4.9-11.1.1-runtime-ubuntu18.04 ofed_info | head -n 1

命令回显示例如下:

MLNX_OFED_LINUX-4.9-6.0.6.0 (OFED-4.9-6.0.6):