课程目标
- 了解Horovod的主要功能和优势。
- 学习如何安装和配置Horovod。
- 掌握Horovod在分布式训练中的应用。
教学内容
-  Horovod的简介和动机 - 动机 - 使单GPU训练脚本轻松扩展到多GPU训练。
- 尽量减少代码修改以实现分布式训练。
- 内部采用MPI模型,代码变动较少,性能优异。
 
- 性能 - 在128台服务器,512个GPU上进行的测试显示高效的扩展性能。
- Inception V3和ResNet-101达到了90%的扩展效率,VGG-16达到了68%。
 
 
- 动机 
-  Horovod的安装 - 基本安装步骤 - 安装CMake。
- 安装合适版本的g++。
- 安装horovod pip包:pip install horovod
- 安装NCCL以支持GPU:HOROVOD_GPU_OPERATIONS=NCCL pip install horovod
 
- 其他安装选项 - 使用MPI,Conda,Docker等环境安装Horovod。
 
 
- 基本安装步骤 
-  核心概念 - 基于MPI的核心原理:size, rank, local rank, allreduce, allgather, broadcast, alltoall等。
 
-  支持的框架 - TensorFlow, Keras, PyTorch, MXNet等。
 
-  Horovod的使用 - 初始化import horovod.tensorflow as hvd hvd.init()
- GPU分配config = tf.ConfigProto() config.gpu_options.visible_device_list = str(hvd.local_rank())
- 调整学习率opt = tf.train.AdagradOptimizer(0.01 * hvd.size())
- 封装优化器opt = hvd.DistributedOptimizer(opt)
- 广播变量hooks = [hvd.BroadcastGlobalVariablesHook(0)]
- 保存检查点checkpoint_dir = '/tmp/train_logs' if hvd.rank() == 0 else None
 
- 初始化
-  运行Horovod - 本地运行horovodrun -np 4 -H localhost:4 python train.py
- 多机运行horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python train.py
- 其他运行环境 - Open MPI, Docker, Kubernetes, Spark, Ray, Singularity, LSF HPC cluster, Hadoop Yarn等。
 
 
- 本地运行
-  Gloo和mpi4py支持 - Gloohorovodrun --gloo -np 2 python train.py
- mpi4pyfrom mpi4py import MPI import horovod.tensorflow as hvd hvd.init() assert hvd.mpi_threads_supported()
 
- Gloo
-  性能优化 - Tensor Fusion
- Horovod Timeline
- 自动性能调优
 
教学活动
-  讲解和讨论 - 介绍Horovod的背景、动机和核心概念。
- 通过实际例子展示如何使用Horovod进行分布式训练。
 
-  动手实践 - 学生按照安装步骤在自己的环境中安装Horovod。
- 修改现有的训练脚本以使用Horovod进行分布式训练。
 
-  性能测试和优化 - 学生在多GPU环境中运行修改后的训练脚本。
- 测试和分析Horovod的性能,进行性能调优。
 
课后作业
-  安装和配置 - 安装Horovod,并在单机多GPU环境中进行测试。
 
-  代码修改 - 将现有的单GPU训练脚本修改为Horovod分布式训练脚本。
 
-  性能分析 - 运行修改后的训练脚本,记录和分析训练性能,并使用Horovod的调优工具进行优化。
 
参考资料
- Horovod官方文档
- Horovod在不同框架中的使用示例
通过本次课程,学生将掌握Horovod的基本概念和使用方法,能够将单GPU训练脚本扩展到多GPU环境,并进行性能优化。