OpenAI 教你如何构建深度学习研究的基础设施

编者按:OpenAI研究工程师Vicki Cheung, Jonas Schneider , Ilya Sutskever, and Greg Brockman在本文中分享了从事Deep Learning研究工作所需要的基础设施(软件、硬件、配置和编制),举例说明如何运用开源Kubernetes-ec2-autoscaler自动扩展深度学习研究中的网络模型,将有助于广大深度学习研究爱好者构建自己的深度学习基础设施。

深度学习是一门实证科学,一个研究团队的基础设施建设将对未来的研究工作产生重大影响。所幸,当今的开源生态系统能够使任何人具备构建更为完善的深度学习基础设施的能力。

在这篇文章中,我们将为大家介绍深度学习研究通常是如何进行的,描述我们为了支持深度学习研究所选择基础设施,和开源Kubernetes-ec2-autoscaler,一种用于Kubernetes的批次优化扩展管理器。我们希望,这篇文章有助于你构建自己的深度学习基础设施。

用例

深度学习的发展通常源于一个构想,你运用一个小问题来测试该构想的可行性。在这个阶段,你想要快速开展许多特设实验。理想条件下,你仅需要运用SSH(外壳安全协议)连接一台计算机,在屏幕上编写脚本代码,通过这样的操作,获取结果,整个研究过程耗时不超过一个小时。

要使构建的模型真的有用通常会经历很多次失败,之后找到可行的方案克服模型本身存在的局限性。(这一过程与随意建立一种新型软件系统相似,你需要多次重复运行自己的代码,这样之后才能够想象出它们将产生何种结果)。

 

你需要多角度检测自己的模型,才能想象出这些模型到底是如何学习的。Dario Amodei的这种强化学习智能体(控制右边的球拍)在乒乓球比赛中获得较高得分,但是,当你观察它是如何打球时,会发现右边的球拍一直停留在原地没有移动。因此,深度学习基础设施必须能够允许用户灵活地反观所采用的模型,仅仅展示出总结性的统计结果是不够的。

当你的模型一旦具有广阔的应用前景时,你会想要将其扩展应用到更大的数据集中和分辨率更高的GPU中。这将是一个长远的工作,需要做很多轮的检测,会持续很多天。在扩展应用过程中,需要认真管理实验过程,非常谨慎地选择超参数变化范围。

早期的研究过程缺乏系统性,且操作快;相比之下,后期的研究是有条不紊地进行的,虽然在某种程度上显得费力,但是,对于获取良好的实验结果是必不可少的。

实例

论文Improved Techniques for Training GANs开篇便讲述了Tim Salimans曾设计出几种方法,用于改进生成对抗性网络(GAN)训练。我们在这里将以最简化的方式描述这些观点(这些观点恰好能够产生最为美观的样本,尽管不是最好的半监督学习)。

GANs由一个生成器网络和一个鉴别器网络构成的。生成器试图愚弄鉴别器,鉴别器试图区分生成性数据和真实数据。凭直觉,我们会认为一个能够愚弄所有鉴别器的生成器必定具有良好的性能。但是,仍然存在一个难以克服的难题:总是输出几乎相同的(简直是逼真的)样本将致使生成器“崩溃”。

Tim提出下列观点,即为鉴别器提供小批次的样本作为输入信息,而不是仅仅提供一个样本。这样一来,鉴别器能够分辨出生成器是否总是产出一种单一图像。当生成器“崩溃”时,网络将对生成器进行梯度调整来纠正这一问题。

下一步将是基于MNIST和CIFAR-10的观点构建原型。这要求尽可能快地为一个小型模型构建原型,然后,将所构建的模型原型在真实数据上运行,并检测获取的结果。经过几次快速循环后,Tim获取了CIFAR-10样本,这一成果令人感到兴奋不已,是我们见过的在该数据集中获得的最好的样本。

然而,深度学习(通常称之为AI算法)必须得到扩展,使之真正取得令人印象深刻的应用成果——一个小型神经网络能够用来证实一个构想(或概念),但是,一个大型神经网络能够用于解决实际问题,得到切实可行的方案。因而,Ian Goodfellow曾深度扩展该模型,致力于研究ImageNet。

 

运用我们的模型学习生成的ImageNet图像

利用一个更大的模型和一个更为大型的数据集,Ian需要在多个GPU中并行运行该模型。研究过程中每一阶段的作业都将把多台计算机的CPU与GPU利用率提升至90%,但是,即便是这种模型也需要花费很多天进行训练。在这个研究过程中,所进行的每一个实验都变得非常有价值,他将认真地记录每个实验的结果。

基础设施

软件

 

我们TensorFlow代码的样本

在我们的研究中,大部分代码是用Python编写的,这一点可以从我们的开源项目中略知一二。通常情况下,我们用TensorFlow(在特殊情况下,运用Theano)计算GPU;使用Numpy或其他框架计算CPU。有时,我们的研究员也运用一些优于TensorFlow的框架来计算GPU或CPU,如Keras。

与很多深度学习研究团队一样,我们运用Python 2.7。通常我们使用能够便捷打包且用于性能优化的Anaconda处理难以打包的数据库,如OpenCV,并优化一些科学数据库的性能。

硬件

对于一个理想的批次作业,使集群中的结点数量成倍增长将会把代码运行的时间缩减一半。遗憾的是,在深度学习中,人们通常从许多GPU中观察到次线性加速现象。要具备高性能的模型需要顶级的GPU。我们也将多数CPU用于模拟器,强化学习环境,或小规模模型(在CPU上的运行速度并不比在GPU上快)。

 

Nvidia-smi下满载的Titan Xs

AWS为我们慷慨地提供了大量的计算方法。我们正将这些计算方法应用到CPU实例中,并用于水平扩展GPU。我们也运行自己的服务器,主要以运行Titan X GPU为主。我们期望研发出一种混合云:对于用不同的GPU,连接和其他技术开展实验极为重要,这将有助于未来深度学习研究工作的发展。

 

在htop上同样的物理单元显示有许多未占用的CPU。我们通常将CPU密集型工作与GPU密集型分开运行。

配置

我们对待深度学习研究的基础设施,就像许多公司对待自己的产品一样:它必须能够呈现出一种简单的界面,可用性与功能性同等重要。我们运用一套相互关联的工具管理所有的服务器,尽可能保证每台服务器的配置都一样。

 

Terraform配置片段管理自动扩展组。Terraform创建,调整,或销毁运行的云资源来匹配你的配置文件。

我们运用Terraform建立AWS云资源(实例,网络路由,DNS记录等)。我们的云和物理结点现在运行Ubuntu,并用Chef进行配置。为了实现加速处理,我们运用Packe预处理AMI集群。我们的所有集群均使用非重叠的IP范围,运用用户的便携式电脑上的OpenVPN和物理结点(用作AWS的用户门户)的strongSwan连接公共网络。

我们将用户的主目录,数据集和结果存储在NFS(在物理硬件上)和EFS/S3(在AWS上)上。

编制

可扩展的基础设施经常致使简单地情况变复杂。我们对小规模工作和大规模工作一视同仁,投入相同的努力构建基础设施。当前正在积极扩充工具包,以便用户能够同时享用分布式用例和局部用例。

我们为特设的实验提供一个SSH结点集群,运行Kubernetes作为物理结点和AWS结点的集群调度器。集群跨越3个AWS区域——我们的作业具有突发性,有时会突然占用某些单个区域的全部资源。

Kubernetes要求每一个作业都是一个Docker容器,这样便能够为我们提供依赖分离和代码快照。但是,建立一个新的Docker容器能够为研究员操作代码循环增加额外的宝贵时间,因而,我们也提供工具,旨在透明地将研究员便携式电脑上的代码转移到一幅标准图像上。

 

在TensorBoard上构建学习曲线

我们将Kubernetes的flannel网络直接应用到研究员的便携式电脑上,允许用户使用无缝网络访问研究员运行的作业。这对于访问监测服务,如TensorBoard,非常有用。(我们最初采用的方法要求——从严格的分离角度来看,更为快速无误——要求人们为其想要暴露的端口提供一种Kubernets服务,但是,我们发现采用这种方法会遇到很多难题)。

Kubernetes-ec2-autoscaler

我们的工作量具有突发性和不可预测性:一系列研究可能快速地从单台计算机实验扩展到1000台。例如,几周内,一个实验从一个交互式阶段发展到要在单一的Titan X上运行,再到需要60 Titan X,最后发展到需要在将近1600个 AWS GPU上运行。因而,我们的云基础设施需要动态配置Kubernetes结点。

在自动扩展组内能够很容易地运行Kubernetes结点,但是,要合理地控制这些自动扩展组的规模将变得越来越难。在批次作业结束后,集群将能够准确地了解到自己所需要的资源,能够直接分配这些资源。(与之形成鲜明对比的是,AWS的扩展策略能够逐个加速每一个新结点,直到仍有剩余资源,这个扩展过程将持续多个循环。)因而,在集群终止这些结点前,需要洩流这些结点,以避免丢失正在运行的作业。

仅利用原始的EC2进行大批量作业是非常诱人的,的确,这也是我们研究工作的起点。但是,Kubernetes生态系统带来的价值更大:低阻力的工具,日志,监测,具备脱离正在运行的实例管理物理结点的能力等类似优点。合理地扩展Kubernetes要比基于原始EC2重新构建该生态系统更为简单。

我们将要发行Kubernetes-ec2-autoscaler,一种用于Kubernetes的批量优化扩展管理器。这种管理器能够在Kubernetes的一种常规Pod上运行,仅要求你的工作结点在自动扩展组内。

 

Kubernetes集群的启动配置

自动扩展器通过搜集Kubernetes主结点的状态进行工作,主节点的状态包括需要用于计算集群资源问询和能力的一切资源。在可用资源过量的条件下,自动扩展器洩流相关的结点,最终终止这些结点 。如果需要更多的资源,自动扩展器将计算得出应当创建什么类型的服务器,并适当地扩大自动扩展组的规模(或简单地释放被洩流的结点,这将缩减新结点加速花费的时间)。

Kubernetes-ec2-autoscaler能够同时兼顾多个自动扩展组,享有CPU之外的资源(内存和GPU),并且能够精细地约束你所运行的作业,如AWS区域和实例规模。此外,由于即便是AWS也不具备无限的内存,突发性工作量将导致自动扩展组超时运行,并产生误差。在这种情况下,Kubernetes-ec2-autoscaler能够检测误差,并将多余的作业分配到次级AWS区域。

我们用于深度学习的基础设施旨在最大限度地提高深度学习研究者的工作效率,使他们能够专心致志地投入到科研中。我们正在构建工具进一步改进我们的基础设施,完善工作流程,并将在未来几周和几个月内分享这些工具。欢迎大家共同努力加快深度学习研究的发展!

via Vicki Cheung et al

本文由雷锋网(公众号:雷锋网)独家编译,未经允许拒绝转载!

本文作者:高婓

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-11-03 03:58:26

OpenAI 教你如何构建深度学习研究的基础设施的相关文章

构建深度学习系统的十条经验

深度学习是机器学习的一个子领域,它有着自己的独特研究对象.以下是我们在构建深度学习系统时总结的10条经验.这些经验虽然看似有些笼统,但他们确实是关于深度学习在结构化和非结构化数据领域里的应用. 作者:Carlos E. Perez 原文链接:https://medium.com/intuitionmachine/10-lessons-learned-from-building-deep-learning-systems-d611ab16ef66#.j0tn4dwpx 更多的专家会更好 通过使用更

处女作就拿下 KDD 双料最佳论文runner-up,「半路出家」的他用深度学习研究气候问题(附讲解视频)

第一次投递论文,就中了 KDD,是什么样的体验? 第一次投 KDD,不仅中了,还同时获得了最佳论文 runner-up和最佳学生论文 runner-up,又是什么样的体验? 这两个知乎体问题,邀请东北大学 SDS(Sustainability & Data Science)实验室的博士生 Thomas Vandal 来回答最合适不过了.他的处女作<DeepSD: Generating High Resolution Climate Change Projections through Sin

独家 | 教你在R中使用Keras和TensorFlow构建深度学习模型

引言: 在R和Python之间如何进行选择一直是一个热议的话题.机器学习世界也被不同语言偏好所划分.但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架. 我个人从R转到Python是因为我想更加深入机器学习的领域,而仅仅使用R的话,这(在之前)是几乎不可能实现的事情.不过也仅此而已! 随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央.Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorF

忽悠神经网络指南:教你如何把深度学习模型骗得七荤八素

知己知彼,无论你是想成为黑客(最好不要!)或防范未来黑客的入侵,都有必要来了解一下如何骗过由海量数据训练出来的深度学习模型. 只要有程序员还在编程,黑客们就会不遗余力地找寻利用这些程序的方法.恶意黑客更是会利用程序中最为微小的漏洞来侵入系统,窃取数据,对系统造成严重破坏. 但由深度学习算法驱动的系统应该是能够避免人为干扰的,对吧? 一个黑客怎么能够突破被TB(兆兆字节)级数据训练的神经网络呢? 然而事实证明,即使是最先进的深层神经网络也是很容易被欺骗的.只需要使用一些小技巧,你就可以迫使模型预测

继 OpenAI 之后,DeepMind 开源深度学习训练平台 DeepMind Lab

编者按:今年四月,由马斯克和知名风投专家 Peter Thiel.Y Combinator 创始人 Sam Altman 共同创立的 AI 研究组织对外开放了其 AI 训练平台 OpenAI Gym.近日,该组织宣布还将开源测试和训练 AI 通用能力的平台 Universe,届时 Universe 将提供 1000 多种不同的游戏和训练测试环境.今天,据彭博社消息,谷歌 DeepMind 实验室也将向大众及其他开发者开放其用于众多实验的迷宫类游戏平台. DeepMind 宣布,将把这一 AI 训

如何在实战路上与时俱进:深度学习最佳实践

自2006年Hinton提出神经网络新的训练方法起,深度学习发展迅速,促使人工智能在图像.语音.自然语言处理等多个领域有了实质性的突破,达到产业应用标准.然而,深度学习作为人工智能领域的一项前瞻技术,实践性强,入门门槛高,关于深度学习的研究与应用,现在仍有很多问题没有找到满意的答案,这些都给深度学习的广泛应用带来挑战.本文旨在提供一份清晰.简洁的深度学习实践说明,以便从事深度学习研究与工程技术人员能够快速掌握深度学习的实际经验. 第一节:深度学习概述 深度学习是模拟人脑进行分析学习的多层神经网络

MIT 开了一门只有九小时的课,教你用深度学习构建自动驾驶

MIT 紧跟时代步伐,开设的 6.S094 课程名为<为自动驾驶构建深度学习>的课程,旨在教学生们为自动驾驶搭建一个深度学习系统,授课者为 Lex Fridman.课程要求学生拥有基本的编程知识(最好是 Python). 全课只有九节一小时的课程,于 1 月 9 日开课,今天就结课啦.而且!据雷锋网从议程表上了解到,从开课一直到 1 月 16 日,官网表示会陆续放出 PPT 及视频文件,雷锋网(公众号:雷锋网)会持续关注. DeepTesla 与 DeepTraffic 就是 MIT 这门课程

手把手教你搭建自己的深度学习机器

深度学习是一门用来解决复杂问题的技术,例如自然语言处理和图像处理.目前,我们已经可以很快的处理超大计算量的问题--这多亏了GPU,GPU最初就是用于快速生成高分辨率计算机图像,由于它的计算效率使得其非常适合用于深度学习算法.原先需要用好几周才能分析出来的结果,现在几天时间就能完成. 虽然现在的计算机都有GPU,但是并不是所有的GPU都适合用来进行深度学习.对于那些不能深度学习功能的GPU,本文将会一步一步的教大家如何构建一个自己的深度学习机器. 深度学习系统本质上是在另一台电脑上安装一个具有深度

Caffe作者贾扬清,教你如何打造优秀的深度学习架构

雷锋网按:本文作者贾扬清,拥有加州大学伯克利分校计算机科学博士学位.清华大学硕士学位和学士学位,曾于新加坡国立大学.微软亚洲研究院.NEC美国实验室.Google Brain工作,现任Facebook研究科学家,负责前沿AI平台的开发以及前沿的深度学习研究. 在伯克利期间开发了深度学习框架Caffe,在Google期间参与了ImgeNet2014比赛.TensorFlow平台的开发.基于深度学习的产品开发和产品咨询等.在AI领域有数年的研究经历. 在深度学习领域,Caffe框架是人们无法绕过的一