- 文档首页
GPU云服务器
GPU云服务器
最佳实践
性能测试/调优
自研高性能集合通信库veCCL
自研高性能集合通信库veCCL
本文为您介绍veCCL的主要特性与在hpcpni3ln实例中使用veCCL的方法。
veCCL是云平台基于NCCL(Nvidia Collective Communication Library)自研开发的高性能集合通信库,支持安装在单节点或多节点的多张GPU卡上,结合云平台自身的网络特点及丰富的大模型任务通信调优经验,实现多GPU之间的高性能通信。
veCCL提供了一系列高度优化的通信原语,能够在特定拓扑或集合操作中显著优化通信效率,帮助并行计算任务在多个GPU间高效地同步和交换数据。作为NCCL的增强版,veCCL对用户完全透明,只需正确加载动态库,无需更改应用程序调用NCCL集合操作的方式即可使用。相比NCCL的默认实现,veCCL能自动加载并运行为特定拓扑和通信场景优化的算法,显著减少通信延迟并提高数据吞吐量。而在遇到veCCL不支持的场景时,它会智能回退到NCCL的默认实现方式。
- 高性能:veCCL能够依据特定机型、特定拓扑结构以及特定通信模式,提供最优算法。
- 快速定位故障:在分布式集群协作任务中,能够实现对故障点的迅速识别与精准界定。
- 已创建高性能计算GPU型实例,本文所示配置如下:
- 规格:ecs.hpcpni3ln.45xlarge
- 镜像:Ubuntu 22.04 with GPU Driver 535.161.08 and doca
- 执行nvcc -V命令查看CUDA版本。若未安装,请安装CUDA。
- 执行python3 --version命令查看Python版本。若未安装,请安装Python。
pip install veccl -i https://private.ivolces.com/pypi/simple
ls `python3 -c "import veccl; print(veccl.ld_library_path())"`
-
本文提供Shell Script与Python Script两种方式配置veCCL通信环境。主要确保运行前:
- NCCL_NET_PLUGIN=soft-bonding以及LD_LIBRARY_PATH中包含soft-bonding路径。
方式一:Shell Script
方式二:Python Script
export LD_PRELOAD=$(python3 -c "import veccl; print(veccl.lib_paths())"):${LD_PRELOAD}
export NCCL_NET_PLUGIN=soft-bonding
export NCCL_IB_TIMEOUT=18
export LD_LIBRARY_PATH=$(python3 -c "import veccl; print(veccl.ld_library_path())"):$LD_LIBRARY_PATH
- 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。
- 依次执行以下命令,赋予脚本可执行权限并运行脚本。
chmod +x veccl_config.sh
- 可以根据红框部分日志信息确定veCCL的使能情况。
- NCCL version 2.23.4-veCCL-x.x.x+cuda12.2表示成功使能veCCL。
- NET/IB : Soft-bonding Using表示成功使能Softbond。
-
os.environ['NCCL_DEBUG'] = 'INFO'
os.environ['NCCL_IB_TIMEOUT'] = '18'
- 依次执行以下命令,赋予脚本可执行权限并运行脚本。
chmod +x veccl_config.py
- 脚本运行成功后,veccl.enable()的设置情况会有如下打印,表示关键环境变量配置成功。
-
以下示例提供了一个脚本test.py,用于展示在单机8卡的实例中,基于PyTorch分布式训练框架采用allreduce通信算法进行加速的效果。
python3 -c "import torch; print(torch.__version__)"
import torch.distributed as dist
rank = int(os.environ["RANK"])
local_rank = int(os.environ["LOCAL_RANK"])
world_size = int(os.environ["WORLD_SIZE"])
torch.cuda.set_device(local_rank)
dist.init_process_group(backend="nccl")
tensor = torch.randn(1024, device=f"cuda:{local_rank}")
print(f"Rank {rank}: before allreduce tensor sum = {tensor.sum().item()}")
dist.all_reduce(tensor, op=dist.ReduceOp.SUM)
print(f"Rank {rank}: after allreduce tensor sum = {tensor.sum().item()}")
dist.destroy_process_group()
if __name__ == "__main__":
- 按Esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。
NCCL_DEBUG=INFO torchrun --nproc_per_node=8 test.py
- 执行python3命令进入Python交互模式。
- 显示>>>提示符后,输入import subprocess,用于执行外部命令。
torchrun_command = ["torchrun","--nproc_per_node=8","test.py"]
subprocess.run(torchrun_command, check=True)
except subprocess.CalledProcessError as e:
print(f"torchrun failed with error: {e}")
- 查看基于veCCL通信库的allreduce运算结果。
-
最近更新时间:2025.06.18 10:30:25