- 文档首页
GPU云服务器
GPU云服务器
最佳实践
HPC-制作RDMA容器镜像
HPC-制作RDMA容器镜像
搭建训练环境时,可能需要使用容器镜像,本文介绍如何在高性能计算实例(即HPC实例)搭建容器镜像。您也可以参考本文检查您现有的容器镜像是否符合要求。
前提条件
- 本文HPC实例的镜像以 Ubuntu 20.04 64位(RDMA) 为例,您也可以任选其他RDMA镜像。
- 您已购买 高性能计算GPU型hpcpni2实例 且绑定了公网IP,具体操作请参见购买高性能计算型实例。
第一步:安装Docker
- 执行vim docker.list命令,创建docker.list文件。
- 按Esc退出编辑模式,输入:wq并按下Enter键,保存并退出文件。
- 依次执行以下命令,安装docker-ce与NVIDIA Container Toolkit。
- 执行nvidia-docker -v命令,检查docker是否安装成功,回显如下,表示安装成功。
第二步:容器环境配置
制作新镜像通常以原有镜像或容器为基础,此处以“Nvidia在NGC提供的CUDA基础镜像生成的容器”为例,展示在此容器的基础上,如何增加RDMA相关环境。
- 在HPC实例上,依次执行以下命令,下载CUDA镜像,启动并进入容器。
说明
执行第二步命令启动容器时,需要将HPC实例上的virtualTopology.xml文件挂载至容器中。部分裸金属规格无此文件,可直接跳过该挂载步骤。
- apt update && apt install -y infiniband-diags openssh-server locate wget vim
-
-
- 在容器中,执行ibstatus 命令查看网卡速率,回显如下,本例中网卡速率为200Gb/s。
-
- apt update && apt install -y perftest ibverbs-providers libibumad3 libibverbs1 libnl-3-200 libnl-route-3-200 librdmacm1
- 在容器中,执行以下命令,检查RDMA相关库安装情况。
- dpkg -l perftest ibverbs-providers libibumad3 libibverbs1 libnl-3-200 libnl-route-3-200 librdmacm1
-
- 在容器中,执行以下命令,检查RDMA网卡是否可以正常在容器中使用。
-
- 回显如下,说明CUDA正常安装,版本为12.0。
-
- 选择NCCL版本并安装。如果您的容器中已包含NCCL,可以跳过本步骤。
- 访问Nvidia官网根据您的需求及容器中CUDA的版本确定NCCL的版本,该网站需要登录您的nvidia开发者账号。
-
- 单击上图红框部分,展开安装指导详情,查看对应镜像的安装命令。
-
- 在容器中,执行以下命令安装NCCL,<nccl_version>是确定的NCCL版本号,<cuda_version>是CUDA的版本号
- apt install libnccl2=<nccl_version>+cuda<cuda_version> libnccl-dev=<nccl_version>+cuda<cuda_version>
- 本例为:apt install libnccl2=2.16.2-1+cuda12.0 libnccl-dev=2.16.2-1+cuda12.0
- 安装OpenMPI。如果您的容器中已包含OpenMPI,可以跳过本步骤。
-
- 执行以下命令,检查NCCL Tests是否安装正常。
- ./build/all_reduce_perf -b 256M -e 8G -f 2 -g 8 -n 100 -w 20
- 回显如下,说明已正常安装,本例中单机平均带宽为230GB/s。
-
第三步:制作镜像
本步骤为您提供了以下两种方式制作镜像,您按需任选一种方式即可。
方式一:docker commit
您可以通过容器制作新的镜像。
- 在容器中,执行exit退出到HPC实例,在实例中执行docker ps -a命令查询容器ID。
-
- 在实例中,执行以下命令制作镜像,<CONTAINER ID>为检查到的容器ID,[镜像名称]和[镜像版本号]可按需配置。
- docker commit <CONTAINER ID> [镜像名称]:[镜像版本号]
-
-
方式二:docker build
您可以直接编写Dockerfile文件,通过原镜像制作新的镜像。
- 在HPC实例中,依次执行以下命令编写Dockerfile。
- 按Esc退出编辑模式,输入:wq并按下Enter键,保存并退出文件。
- 执行以下命令,构建容器镜像。请替换[镜像名称]和[镜像版本号]为待构建的镜像信息。
- docker build [镜像名称]/ -t [镜像名称]:[镜像版本号]
-
第四步:上传镜像
本步骤为您提供了以下两种方式上传镜像,您按需任选一种方式即可。
方式一:上传镜像仓库
您可以将镜像上传到火山引擎的镜像仓库,操作步骤请参考推送和拉取镜像。 方式二:上传到docker hub
您可以按照如下步骤将镜像上传到docker hub您自己的repo下。
- 执行命令docker login在HPC实例上登录您的docker账号,该命令要求输入您的docker hub账号密码。
- 执行以下命令对您刚才制作的镜像设置tag,<YOUR_DOCKERHUB_NAME>为您的docker hub用户名,[镜像名称]和[镜像版本号]为待上传的镜像信息。
- docker tag myimage:1.1 <YOUR_DOCKERHUB_NAME>/[镜像名称]:[镜像版本号]
- docker push <YOUR_DOCKERHUB_NAME>/[镜像名称]:[镜像版本号]
第五步:多实例集合通信能力测试
使用两台高性能计算GPU型实例对已制作的容器镜像进行集合通信能力测试。集合通信能力是介于网络带宽和AI训练场景间的一个评价通信能力的指标。
- 如果您在步骤四中将镜像上传到了火山引擎镜像仓库,请参考拉取镜像完成操作。
- 如果您在步骤四中将镜像上传到了docker hub,请执行以下命令安装。<YOUR_DOCKERHUB_NAME>为您的docker hub用户名,[镜像名称]和[镜像版本号]为待安装的镜像信息。
- docker pull <YOUR_DOCKERHUB_NAME>/[镜像名称]:[镜像版本号]
- 在A和B实例上分别执行如下命令启动容器。<IMAGE ID>为容器镜像ID。
说明
如果您的实例为火山引擎自研软硬一体虚拟化架构,即第三代实例规格,则无需执行以下命令的-v及以后部分。
- nvidia-docker run --gpus all --network host --ipc host --privileged -it -v /run/nvidia-topologyd/virtualTopology.xml:/run/nvidia-topologyd/virtualTopology.xml:ro <IMAGE ID> bash
- 执行vim /etc/ssh/sshd_config命令,按“i”修改以下配置后,按Esc退出编辑模式,输入:wq并按下Enter键,保存并退出文件。
- 执行/etc/init.d/ssh restart命令重启ssh服务器。
- 在A和B实例的容器中,分别执行如下命令,启动SSH。
- 在A实例的容器中,执行以下命令,配置向B实例容器的互信登陆,该命令需要您输入刚才为B实例的容器设置的密码。
- 在A实例的容器中,执行以下命令查看集群性能,请确认实例A已放通端口号2222,两个host IP需替换为A和B实例VPC主网卡(eth0)的IP。
- 回显如下,A和B实例集合通信Allreduce的带宽为97GB/s,该指标可以代表系统的通信能力。
-
最近更新时间:2026.10.14 17:30:58