HorovodRunner: Horovod分布式深度学习
学习如何使用HorovodRunner执行分布式训练机器学习模型推出Horovod培训工作引发工作数据砖。
HorovodRunner是什么?
HorovodRunner是一个通用API砖上运行分布式深度学习工作负载使用Horovod框架。通过整合Horovod火花障模式、砖能够提供更高的稳定性对于长时间运行的深度学习培训工作火花。HorovodRunner需要Python方法包含深度学习培训与Horovod钩子代码。HorovodRunner泡菜司机和分配上的方法引发工人。Horovod MPI工作嵌入作为火花作业执行模式使用障碍。第一执行人收集所有任务执行人使用的IP地址BarrierTaskContext
和触发器Horovod工作使用mpirun
。每个Python MPI进程加载腌用户程序,反序列化,并运行它。
分布式训练HorovodRunner
HorovodRunner允许您启动Horovod培训工作引发的工作。HorovodRunner API支持表中所示的方法。详情,请参阅HorovodRunner API文档。
方法和签名 |
描述 |
---|---|
|
HorovodRunner创建一个实例。 |
|
运行一个调用Horovod培训工作 |
一般的方法来开发一个分布式使用HorovodRunner培训项目是:
创建一个
HorovodRunner
实例初始化节点的数量。定义一个Horovod训练方法中描述的方法Horovod用法,确保添加任何导入语句内的方法。
通过训练方法
HorovodRunner
实例。
例如:
人力资源=HorovodRunner(np=2)def火车():进口tensorflow作为特遣部队hvd。初始化()人力资源。运行(火车)
上运行HorovodRunner司机只有n
子流程,使用人力资源=HorovodRunner (np = - n)
。例如,如果司机节点上有4个gpu,你可以选择n
到4
。参数的详细信息np
,请参阅HorovodRunner API文档。如何销一个GPU /子流程,看到Horovod使用指南。
一个常见的错误是不能被发现或腌TensorFlow对象。这发生在当库导入语句不分发给其他执行者。为了避免这个问题,包括所有导入语句(例如,进口tensorflow作为特遣部队
)这两个顶部的Horovod训练方法,在其他任何用户定义的函数称为Horovod训练方法。
记录Horovod训练Horovod时间表
Horovod有能力记录其活动时间表,Horovod时间表。
重要的
Horovod时间表对性能有重大的影响。Inception3吞吐量可以减少~ 40%当启用Horovod时间表。加快HorovodRunner工作,不要使用Horovod时间表。
你不能查看Horovod时间表而培训正在进行中。
记录Horovod时间表,设置HOROVOD_TIMELINE
环境变量的位置你想保存时间轴文件。砖建议使用共享存储,这样时间轴上的一个位置文件很容易检索。例如,您可以使用DBFS本地文件api如图所示:
timeline_dir=“/ dbfs /毫升/ horovod-timeline /% s”%uuid。uuid4()操作系统。makedirs(timeline_dir)操作系统。环境(“HOROVOD_TIMELINE”]=timeline_dir+“/ horovod_timeline.json”人力资源=HorovodRunner(np=4)人力资源。运行(run_training_horovod,参数个数=参数个数)
然后,添加时间特定代码的开始和结束培训功能。下面的例子笔记本包含示例代码,您可以使用作为一个解决方案视图培训进展。
下载时间轴文件,使用砖CLI(遗留)或FileStore,然后使用Chrome浏览器的chrome: / /跟踪
设备查看它。例如:
开发工作流程
这些都是一般的步骤在单节点深度学习代码迁移到分布式训练。的例子:迁移到分布式与HorovodRunner深度学习在这一节中说明这些步骤。
准备单独的节点代码:准备和测试单一节点代码TensorFlow, Keras或PyTorch。
迁移到Horovod:按照指示Horovod用法迁移与Horovod代码和测试的司机:
添加
hvd.init ()
初始化Horovod。销GPU的服务器使用这个过程使用
config.gpu_options.visible_device_list
。一GPU的典型设置过程,这可以设置为当地排名。在这种情况下,服务器上的第一个过程将被分配第一个GPU,第二个进程将被分配第二个GPU等等。包括一个数据集的碎片。这个数据集运营商运行分布式训练时非常有用,因为它允许每个工人去读一个独特的子集。
规模的工人数量的学习速率。有效批大小在同步分布式训练工人的数量。增加了学习速率补偿增加的批量大小。
包装的优化器
hvd.DistributedOptimizer
。梯度计算的分布式优化器代表原始的优化器,使用allreduce或allgather平均梯度,然后应用平均梯度。添加
hvd.BroadcastGlobalVariablesHook (0)
广播初始变量状态从0到所有其他进程。这是必要的,以确保一致的初始化所有工人培训开始时随机权重或恢复检查点。另外,如果你不使用MonitoredTrainingSession
,您可以执行hvd.broadcast_global_variables
全局变量被初始化后操作。修改你的代码保存检查站只在工人0,以防止其他工人腐化他们。
迁移到HorovodRunner:HorovodRunner运行Horovod培训工作通过调用Python函数。你必须包装的主要训练过程为一个Python函数。然后你就可以在本地测试HorovodRunner模式和分布式模式。
更新深度学习库
请注意
本文包含引用奴隶,砖不使用的一个术语。从软件中删除这个词时,我们就将它从这篇文章。
如果你升级或降级TensorFlow、Keras或PyTorch,您必须重新安装Horovod所以编译新安装的库。举个例子,如果你想升级TensorFlow,砖的建议使用init脚本TensorFlow安装说明并附加以下TensorFlow特定Horovod安装代码结束它。看到Horovod安装说明使用不同的组合,如升级或降级PyTorch和其他库。
add-apt-repository - y ppa: ubuntu-toolchain-r /测试更新#使用相同的编译器编译Horovod TensorFlow建成apt安装g++ 7 - y update-alternatives——安装/usr/bin/gcc gcc /usr/bin/gcc-760——奴隶/usr/bin/g + + g + + /usr/bin/g + + 7HOROVOD_GPU_ALLREDUCE=NCCLHOROVOD_CUDA_HOME=/usr/local/cuda pip安装horovod= =0.18.1——force-reinstall no-deps——no-cache-dir
例子:迁移到分布式与HorovodRunner深度学习
下面的例子,基于MNIST数据集,演示如何将一个单节点深度学习项目迁移到分布式与HorovodRunner深度学习。
限制
使用的工作区文件时,如果HorovodRunner不会工作
np
设置为大于1和笔记本从相关的进口文件。考虑使用horovod.spark而不是HorovodRunner
。