什么是mpi系统,mpi协议一般用于什么设备

首页 > 书籍文档 > 作者:YD1662023-12-04 17:57:28

优步的 Horovod

Horovod是Uber的机器学习(ML)堆栈之一,它已经在社区中非常流行,并且已经被DeepMind和OpenAI等人工智能巨头的研究团队采用。从概念上讲,Horovod是一个用于大规模运行分布式深度学习训练工作的框架。

Horovod利用诸如OpenMPI之类的消息传递接口栈,来使训练作业能够在高度并行和分布式的基础设施上运行,而无需进行任何修改。通过以下四个简单的步骤即可在Horovod中运行分布式TensorFlow训练工作:

  1. hvd.init初始化Horovod。

  2. config.gpu_options.visible_device_list = str(hvd.local_rank)为每个TensorFlow进程分配一个GPU。

  3. opt=hvd.DistributedOptimizer(opt)使用Horovod优化器包装任何常规的TensorFlow优化器,该优化器使用ring-allreduce来处理平均梯度。

  4. hvd.BroadcastGlobalVariablesHook(0)将变量从第一个进程广播到所有其他进程,以确保一致的初始化。

下面这个代码示例是一个基本的TensorFlow训练作业的模板,你可以从中看到上面的四个步骤:

1import tensorflow as tf
2import horovod.tensorflow as hvd# Initialize Horovod
3hvd.init# Pin GPU to be used to process local rank (one GPU per process)
4config = tf.ConfigProto
5config.gpu_options.visible_device_list = str(hvd.local_rank)# Build model…
6loss = …
7opt = tf.train.AdagradOptimizer(0.01)# Add Horovod Distributed Optimizer
8opt = hvd.DistributedOptimizer(opt)# Add hook to broadcast variables from rank 0 to all other processes during
9# initialization.
10hooks = [hvd.BroadcastGlobalVariablesHook(0)]# Make training operation
11train_op = opt.minimize(loss)# The MonitoredTrainingSession takes care of session initialization,
12# restoring from a checkpoint, saving to a checkpoint, and closing when done
13# or an error occurs.
14with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,
15 config=config,
16 hooks=hooks) as mon_sess:
17 while not mon_sess.should_stop:
18 # Perform synchronous training.
19 mon_sess.run(train_op)

什么是mpi系统,mpi协议一般用于什么设备(5)

DeepMind的TF-Replicator

TF-Replicator专注于TensorFlow程序如何利用Tensor处理单元(TPU)有关的可伸缩性的另一个方面。TPU被认为是最先进的人工智能芯片之一,它为机器学习工作负载提供了本机可扩展性。然而,在TensorFlow程序中使用TPU需要专门的API,这会给不熟悉底层硬件模型的数据科学家们带来可移植性问题和采用障碍。DeepMind的TF Replicator通过提供一个更简单、对开发人员更友好的编程模型来利用TensorFlow程序中的TPU,从而解决了这一难题。

TF-Replicator的魔力依赖于一种“图内复制(in-graph replication)”模型,其中每个设备的计算被复制到同一张TensorFlow图中。设备之间的通信是通过连接设备对应子图中的节点来实现的。为了达到这种级别的并行化,TF-Replicator利用TensorFlow的图重写模型在图中的设备之间插入本机通信。当呈现一个TensorFlow图时,TF Replicator首先独立地为每个设备构建计算,并在用户指定跨设备计算的地方留下占位符。一旦构建了所有设备的子图,TF Replicator就会用实际的跨设备计算替换占位符来连接它们。

什么是mpi系统,mpi协议一般用于什么设备(6)

从编程模型的角度来看,使用TF-Replicator编写的代码看起来类似于为单个设备编写的本机TensorFlow代码。用户只需定义:(1)一个公开数据集的输入函数,和(2)一个定义其模型逻辑的阶跃函数(例如,梯度下降的单个阶跃)。下面的代码片段展示了一个简单的TF-Replicator程序:

1# Deploying a model with TpuReplicator.
2repl = tf_replicator.TpuReplicator(
3num_workers=1, num_tpu_cores_per_worker=8
4)
5with repl.context:
6model = resnet_model
7base_optimizer = tf.train.AdamOptimizer
8optimizer = repl.wrap_optimizer(base_optimizer)# ... code to define replica input_fn and step_fn.per_replica_loss = repl.run(step_fn, input_fn)
9train_op = tf.reduce_mean(per_replica_loss)with tf.train.MonitoredSession as session:
10repl.init(session)
11for i in xrange(num_train_steps):
12session.run(train_op)
13repl.shutdown(session)

为了优化不同设备之间的通信,TF-Replicator利用了最先进的MPI接口。在一些实验中,DeepMind能够在一个TPUv3 pod的512个核心上,以2048的batch size批量训练著名的BigGAN模型。目前,TF-Replicator是DeepMind公司的TPU的主要编程接口。

什么是mpi系统,mpi协议一般用于什么设备(7)

微软的DeepSpeed

微软的DeepSpeed是一个新的开源框架,专注于优化大型深度学习模型的训练。当前版本包含了ZeRO的第一个实现以及其他优化方法。从编程的角度来看,DeepSpeed是在PyTorch之上构建的,它提供了一个简单的API,允许工程师只需几行代码就可以利用并行化技术来进行训练。DeepSpeed抽象了大规模训练的所有困难方面,例如并行化、混合精度、梯度累积和检查点,使得开发人员可以专注于模型的构建。

从功能角度来看,DeepSpeed在以下四个关键方面表现出色:

规模:DeepSpeed可以为运行高达1,000亿个参数的模型提供系统支持,这和其他训练优化框架相比,提高了10倍。

速度:在最初的测试中,DeepSpeed表现出的吞吐量比其他库高出4-5倍。

成本:可以使用DeepSpeed进行训练的模型,其成本比其他替代方案少三倍。

可用性:DeepSpeed不需要重构PyTorch模型,仅需几行代码即可使用。

什么是mpi系统,mpi协议一般用于什么设备(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.