0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DeepMind又放福利:开源了一个内部的分布式机器学习库TF-Replicator

DPVg_AI_era 来源:lp 2019-03-10 09:41 次阅读

今天,DeepMind又放福利:开源了一个内部的分布式机器学习TF-Replicator,可以帮助研究人员将TensorFlow模型轻松部署到GPU、TPU,并实现不同类型加速器之间的无缝切换。

最近AI领域的突破,从AlphaFold到BigGAN再到AlphaStar,一个反复出现的主题是,对方便、可靠的可扩展性的需求。

研究人员已经能够获取越来越多计算能力,得以训练更大的神经网络,然而,将模型扩展到多个设备并不是一件容易的事情。

今天,DeepMind又将其内部一个秘密武器公之于众——TF-Replicator,一个可以帮助研究人员将他们的TensorFlow模型轻松部署到GPU、Cloud TPU的分布式机器学习框架,即使他们之前完全没有使用分布式系统的经验。

TF-Replicator由DeepMind的研究平台团队开发,初衷是为DeepMind的研究人员提供一个简单的接入TPU的API,现在,TF-Replicator已经是DeepMind内部最广泛使用的TPU编程接口

TF-Replicator允许研究人员针对机器学习定位不同的硬件加速器进行,将工作负载扩展到许多设备,并在不同类型的加速器之间无缝切换。

虽然它最初是作为TensorFlow上面的一个库开发的,但目前TF-Replicator的API已经集成到TensorFlow 2.0新的tf.distribute.Strategy中,作为 tf.distribute.Strategy的一部分开源:

https://www.tensorflow.org/alpha/guide/distribute_strategy

团队还公开了相关论文:TF-Replicator: Distributed Machine Learning for Researchers,全面描述了这个新框架的技术细节。

https://arxiv.org/abs/1902.00465

接下来,我们将介绍TF-Replicator背后的想法和技术挑战。

构建一个分布式机器学习库

虽然TensorFlow为CPU、GPU和TPU设备都提供了直接支持,但是在目标之间切换需要用户付出大量的努力。这通常涉及为特定的硬件目标专门编写代码,将研究想法限制在该平台的功能上。

一些构建在TensorFlow之上的现有框架,例如Estimators,已经试图解决这个问题。然而,它们通常针对生产用例,缺乏快速迭代研究思路所需的表达性和灵活性。

我们开发TF-Replicator的初衷是为DeepMind的研究人员提供一个使用TPU的简单API。TPU为机器学习工作负载提供了可扩展性,实现了许多研究突破,例如使用我们的BigGAN模型实现了最先进的图像合成。

TensorFlow针对TPU的原生API与针对GPU的方式不同,这造成了使用TPU的障碍。TF-Replicator提供了一个更简单、更用户友好的API,隐藏了TensorFlow的TPU API的复杂性。此外,研究平台团队与不同机器学习领域的研究人员密切合作,开发了TF-Replicator API,以确保必要的灵活性和易用性。

TF-Replicator API

使用TF-Replicator编写的代码与使用TensorFlow中为单个设备编写的代码类似,允许用户自由定义自己的模型运行循环。用户只需要定义(1)一个公开数据集的输入函数,以及(2)一个定义其模型逻辑的step函数(例如,梯度下降的单个step):

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

将计算扩展到多个设备需要设备之间进行通信。在训练机器学习模型的背景下,最常见的通信形式是累积梯度(accumulate gradients)以用于优化算法,如随机梯度下降。

因此,我们提供了一种方便的方法来封装TensorFlow Optimizers,以便在更新模型参数之前在设备之间累积梯度。对于更一般的通信模式,我们提供了类似于MPI的原语,如“all_reduce”和“broadcast”。这些使得实现诸如全局批标准化之类的操作变得非常简单,这是扩展BigGAN模型训练的关键技术。

输入数据从主机发送到各个GPU, GPU立即开始处理。当需要在GPU之间交换信息时,它们会在发送数据之前进行同步。

实现

对于多GPU计算,TF-Replicator依赖于“图内复制”(“in-graph replication)模式,其中每个设备的计算在同一个TensorFlow graph中复制。设备之间的通信是通过连接设备对应子图中的节点来实现的。在TF-Replicator中实现这一点很具挑战性,因为在TensorFlow graph中的任何位置都可能发生通信。因此,构造计算的顺序至关重要。

我们的第一个想法是在一个单独的Python线程中同时构建每个设备的子图。当遇到通信原语时,线程同步,主线程插入所需的跨设备计算。之后,每个线程将继续构建其设备的计算。

然而,在我们考虑这种方法时,TensorFlow的图形构建API不是线程安全的,这使得在不同线程中同时构建子图非常困难。相反,我们使用图形重写(graph rewriting)在所有设备的子图构建完成后插入通信。在构造子图时,占位符被插入到需要通信的位置。然后,我们跨设备收集所有匹配占位符,并用适当的跨设备计算替换它们。

当TF-Replicator构建一个in-graph replicated计算时,它首先独立地为每个设备构建计算,并将占位符留给用户指定的跨设备计算。构建好所有设备的子图之后,TF-Replicator通过用实际的跨设备计算替换占位符来连接它们。

为AI研究构建一个平台

通过在TF-Replicator的设计和实现过程中与研究人员密切合作,我们最终构建一个库,让用户能够轻松地跨多个硬件加速器进行大规模计算,同时让他们拥有进行前沿AI研究所需的控制和灵活性。

例如,在与研究人员讨论之后,我们添加了MPI风格的通信原语,如all-reduce。TF-Replicator和其他共享基础架构使我们能够在稳健的基础上构建越来越复杂的实验,并在整个DeepMind快速传播最佳实践。

在撰写本文时,TF-Replicator已经成为DeepMind应用最广泛的TPU编程接口。虽然这个库本身并不局限于训练神经网络,但它最常用来训练大量数据。例如,BigGAN模型是在一个512核的TPUv3 pod训练的,batch size为2048。

在采用分布式actor-learner设置的增强学习智能体中,例如我们的重要性加权actor-learner架构,可扩展性是通过让许多actor通过与环境的交互生成新的体验来实现的。然后,learner对这些数据进行处理,以改进agent的策略,表示为一个神经网络。为了应对越来越多的actor,TF-Replicator可以很轻松地将learner分布在多个硬件加速器上。

这些以及更多例子在我们的arXiv论文中有更详细的描述。

Blog:

https://deepmind.com/blog/tf-replicator-distributed-machine-learning/

Paper:

https://arxiv.org/abs/1902.00465

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4771

    浏览量

    100752
  • 机器学习
    +关注

    关注

    66

    文章

    8416

    浏览量

    132619
  • DeepMind
    +关注

    关注

    0

    文章

    130

    浏览量

    10858

原文标题:你的模型可以轻松使用TPU了!DeepMind 开源分布式机器学习库TF-Replicator

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据

    提供async版本供该场景使用。 当前,wantParams中“sessionId”字段在迁移流程中被系统占用,建议开发者在wantParams中定义其他key值存储该分布式数据对象生成的id,避免
    发表于 12-24 09:40

    PingCAP推出TiDB开源分布式数据库

    的性能表现。我们将继续坚持开源的创新理念,将TiDB打造成领先的数据产品。” 部署新分布式数据
    的头像 发表于 11-24 11:26 418次阅读
    PingCAP推出TiDB<b class='flag-5'>开源</b><b class='flag-5'>分布式数据库</b>

    分布式通信的原理和实现高效分布式通信背后的技术NVLink的演进

    大型模型的大小已经超出了单个 GPU 的范围。所以就需要实现跨多个 GPU 的模型训练,这种训练方式就涉及到了分布式通信和 NVLink。 当谈及分布式通信和 NVLink 时,我们进入了
    的头像 发表于 11-18 09:39 438次阅读
    <b class='flag-5'>分布式</b>通信的原理和实现高效<b class='flag-5'>分布式</b>通信背后的技术NVLink的演进

    分布式光纤测温是什么?应用领域是?

    分布式光纤测温是种先进的温度测量技术,它利用光纤的拉曼散射原理进行温度监测。以下是对分布式光纤测温的详细介绍: 、基本原理 分布式光纤测
    的头像 发表于 10-24 15:30 363次阅读
    <b class='flag-5'>分布式</b>光纤测温是什么?应用领域是?

    分布式输电线路故障定位中的分布式是指什么

    所谓分布式指的是产品的部署方式,是相对于集中式而言的。 、部署方式 分散安装:分布式输电线路故障定位系统中的采集装置需要安装在输电线路的多个位置,通常是每隔定距离设置
    的头像 发表于 10-16 11:39 255次阅读
    <b class='flag-5'>分布式</b>输电线路故障定位中的<b class='flag-5'>分布式</b>是指什么

    文讲清什么是分布式云化数据

    分布式云化数据种先进的数据管理系统,它将传统的数据技术与分布式计算、云计算和大数据处理技术相融合。这种数据
    的头像 发表于 10-14 10:06 221次阅读

    基于分布式存储WDS的金融信创云承载数据类关键应用

    基于分布式存储WDS的金融信创云承载数据类关键应用
    的头像 发表于 08-16 09:42 275次阅读
    基于<b class='flag-5'>分布式</b>存储WDS的金融信创云承载数据<b class='flag-5'>库</b>类关键应用

    鸿蒙开发接口数据管理:【@ohos.data.distributedData (分布式数据管理)】

    分布式数据管理为应用程序提供不同设备间数据分布式协同能力。通过调用分布式数据各个接口,应用程序可将数据保存到分布式数据库中,并可对
    的头像 发表于 06-07 09:30 986次阅读
    鸿蒙开发接口数据管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b>数据管理)】

    HarmonyOS开发实例:【分布式手写板】

    使用设备管理及分布式键值数据能力,实现多设备之间手写板应用拉起及同步书写内容的功能。
    的头像 发表于 04-17 21:45 495次阅读
    HarmonyOS开发实例:【<b class='flag-5'>分布式</b>手写板】

    鸿蒙HarmonyOS开发实例:【分布式关系型数据

    使用[@ohos.data.relationalStore]接口和[@ohos.distributedDeviceManager] 接口展示在eTS中分布式关系型数据的使用,在增、删、改、查的基本操作外,还包括
    的头像 发表于 04-11 09:52 927次阅读
    鸿蒙HarmonyOS开发实例:【<b class='flag-5'>分布式</b>关系型数据<b class='flag-5'>库</b>】

    分布式控制系统的七功能和应用

    分布式控制系统的七功能和应用  分布式控制系统是种由多个独立的控制单元组成的系统,每个控制单元负责系统中的部分功能。它具有分散的、自治
    的头像 发表于 02-01 10:51 1393次阅读

    鸿蒙OS 分布式任务调度

    鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统的组件管理能力,为应用定义统的能力基线、
    的头像 发表于 01-29 16:50 496次阅读

    什么是分布式架构?

    分布式架构是指将系统或应用拆分成多个独立的节点,这些节点通过网络连接进行通信和协作,以实现共同完成任务的种架构模式。这种架构模式旨在提高系统的可扩展性、可靠性和性能表现。
    的头像 发表于 01-12 15:04 1235次阅读
    什么是<b class='flag-5'>分布式</b>架构?

    分布式IO工业自动化数据采集与分析的核心

    随着工业自动化技术的不断发展,分布式IO在工业自动化领域的应用越来越广泛。作为种先进的控制技术,分布式IO能够实现设备的分布式控制和监测,提高生产效率、降低能耗和减少故障率。
    发表于 12-28 14:47

    分布式锁的三种实现方式

    ,下面将分别介绍三种常见的实现方式。 、基于数据实现的分布式锁 在分布式系统中,数据是最常用的共享资源之
    的头像 发表于 12-28 10:01 904次阅读