Horovod 分布式训练框架搭建

本文详细介绍了在Ubuntu16.04系统上安装Horovod的步骤,包括nccl、openmpi和horovod三个关键模块的安装过程,以及如何适配不同版本的CUDA环境,最后通过官方示例验证了安装的正确性。
部署运行你感兴趣的模型镜像

点击 Horovod 官网地址访问详情.下面主要介绍在 Ubuntu 16.04 系统下安装 Horovod,都是参考官网的说明.一共需要安装三个模块

1: nccl #NVIDIA Collective Communications Library (NCCL)多卡,多cpu通讯模块
2: openmpi # 一个并行库,玩过caffe的同学都知道
3: horovod # Uber 出品的 分布式训练框架

1.安装nccl

登陆 Nvidia的nccl下载网页 (需要注册一个nvidia的账号),同意协议,选择适合自己的cuda版本,选择下载 无操作系统相关的格式.比如下图

下载后的名称为 nccl_2.5.6-1+cuda10.0_x86_64.txz,解压到指定的路径,并添加到环境变量中

sudo tar xvf nccl_2.5.6-1+cuda10.0_x86_64.txz -C /usr/local  #解压到制定目录
echo '/usr/local/nccl_2.5.6-1+cuda10.0_x86_64'|sudo tee -a /etc/ld.so.conf.d/nccl.conf  #添加路径到环境变量
sudo ldconfig  #刷新环境变量

2.安装openmpi

wget -c https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.2.tar.gz #下载源码
tar xvf openmpi-4.0.2.tar.gz #解压
cd openmpi-4.0.2
./configure --prefix=/usr/local #指定安装目录
make -j8 #编译
sudo make install #安装
sudo ldconfig #刷新一下环境变量
cd examples/
make 
./hello_c #测试安装是否完成,有输出则代表完成

3.安装horovod

官网介绍如下

因为我的tensorflow是通过pip(PyPi) 安装的,所以需要有 g++-4.9,先安装g++-4.9

g++ --version #查看当前g++版本,如果是4.9则不需要安装
sudo apt install cmake
sudo apt install gcc-4.9
sudo apt install g++-4.9
sudo rm /usr/bin/gcc #删除原有的软连接
sudo rm /usr/bin/g++ #删除原有的软连接
sudo ln -s /usr/bin/gcc-4.9 /usr/bin/gcc  #新建软连接
sudo ln -s /usr/bin/g++-4.9 /usr/bin/g++  #新建软连接
pip install horovod  #安装horovod

以上就完成了所有安装步骤(省略了安装nvidia驱动,cuda,cudnn的步骤)

测试了官方提供的例子,基本达到了准线性加速.运行方式如下图

完结散花,觉得麻烦的同学,可以使用docker的版本,只是pull比较大,可以自己修改dockerfile,注释掉不需要的后端(pytorch,mxnet),然后本地build,应该会快一些,至少小一些.

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### DeepSeek 平台多机分布式训练 #### 1. 架构设计与环境准备 为了支持多机分布式训练,在架构上通常采用Master-Worker模式。其中,Master节点负责协调任务分配和监控进度;Worker节点则专注于具体的计算任务。 对于DeepSeek平台而言,建议先搭建Kubernetes集群作为底层基础设施[^1]。通过Helm Chart简化部署流程,并确保所有参与节点都已安装必要的依赖库如PyTorch、TensorFlow等机器学习框架以及通信组件NCCL(用于GPU间高效数据传输)。此外,还需配置好存储卷以便于共享权重文件和其他资源。 ```bash helm repo add deepseek https://charts.deepseek.com/ helm install my-release deepseek/deepseek-training --namespace deepseek-trainings ``` #### 2. 数据并行策略实施 在实际应用中,常用的数据并行方式是将批量样本分割成更小的部分分发给各个worker处理。这可以通过调整`torch.nn.DataParallel()`或`tf.distribute.MirroredStrategy()`来轻松实现。当涉及到跨多个服务器时,则需进一步引入Horovod这样的第三方工具来进行进程间的同步控制。 以下是基于PyTorch的一个简单例子: ```python import torch from torch.utils.data import DataLoader, Dataset import horovod.torch as hvd class MyDataset(Dataset): def __init__(self): ... def train(): # 初始化 Horovod hvd.init() model = ... # 创建模型实例 optimizer = torch.optim.SGD(model.parameters(), lr=0.01 * hvd.size()) optimizer = hvd.DistributedOptimizer(optimizer, named_parameters=model.named_parameters()) dataset = MyDataset() sampler = torch.utils.data.distributed.DistributedSampler( dataset, num_replicas=hvd.size(), rank=hvd.rank()) loader = DataLoader(dataset, batch_size=32, sampler=sampler) for epoch in range(epochs): for data, target in loader: output = model(data) loss.backward() optimizer.step() if __name__ == '__main__': train() ``` #### 3. 资源管理与性能优化 合理规划硬件资源配置至关重要。一方面要充分利用现有设备的能力,另一方面也要考虑到成本效益比。比如设置合理的Batch Size既能加快收敛速度又不会造成内存溢出;而适当增加线程数有助于提高CPU利用率但过犹不及可能会带来额外开销反而降低效率。 另外值得注意的是网络延迟对整体表现的影响不可忽视。因此推荐使用高速互联技术如InfiniBand连接各节点之间的通讯路径,从而减少因带宽不足造成的瓶颈效应。 #### 4. 日志记录与故障排查 最后一点就是完善的日志机制可以帮助快速定位潜在问题所在。除了常规的日志打印外还可以借助Prometheus+Grafana组合构建可视化仪表盘实时监测各项指标变化趋势。一旦发现异常情况立即采取相应措施加以解决以免影响到后续迭代过程中的稳定性。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值