1新智元编译1
来源:OpenAI
作者:Vicki Cheung、Jonas Schneider、Ilya Sutskever 和 Greg Brockman
译者:闻菲、胡祥杰
【新智元导读】OpenAI 昨天在博客发文,结合实例,介绍了 OpenAI 进行深度学习研究时采用的基础设施配置,并且提供了相关开源代码。文章激起了很多反响,其中也有负面评论,比如有用户在 Hacker News 指出,OpenAI 博文只提供了“训练”部分的细节,称不“深度学习基础设施”。不过,相对于软硬件开源,OpenAI 从另一个侧面,对深度学习模型的实际部署提供了帮助。下文是对 OpenAI 官方博文的编译。
深度学习是一门实践科学,而拥有好的基础设施对项目进展有着事半功倍的效果。所幸,如今的开源生态系统,让每个人都能够搭建很好的深度学习基础设施。
在这篇文章里,我们将分享深度学习研究进展,描述我们选择使用的基础设施,并且开源一个 Kubernetes 批处理优化缩放管理器(Scaling Manager),希望对你进行深度学习有用。
实例:Improved Techniques for Training GANs
使用情况
深度学习项目一般从想法开始,先在小问题上测试。这个阶段,你希望快速运行实验,理想情况下,最好在屏幕上跑代码,不出一个小时就能得到结果。
要让模型真的跑起来,必须要在可以预想的每一步都想好,并且针对局限制定预防措施。(这就跟搭建软件系统一样,必须跑很多次代码才能了解软件如何运作。)
你必须从每个角度审视你的模型,从而了解模型实际上学到了什么。例如 Dario Amodei 这个游戏里的强化学习代理(负责控制右边的平板),它取得了高分,但仔细观察发现,它其实只是停在一处而已(详见 https://openai.com/blog/infrastructure-for-deep-learning/?ref=mybridge.co)。
因此,深度学习基础设施必须使用户灵活反思模型,只是得到摘要统计数据是不够的。
一旦模型显示出足够的潜力,你就应该把它放大到更大型的数据库和更多GPU上运行。这个有时候需要花上好几天的时间。你需要仔细进行试验管理,对选择的超参数范围尤其经心才行。
研究早期阶段是没有规律的,时间过得很快;而后期则是一丝不苟,某种程度上说有些艰苦,但这些都是取得理想结果必须付出的。
基础设施
软件
我们研究中的绝大部分代码都是用Python写成,这在我们的开源项目中已经有所体现。我们的GPU计算大部分使用的是TensorFlow,在特定的例子中,会使用Theano。CPU的计算,除了使用以上提到的,我们还使用Numpy。研究者有时候也会使用高水平的框架,比如Keras。
和大多数深度学习社区一样,我们使用Python2.7。我们通常会使用Anaconda,它在打包上较为方便,特别是针对一些难以打包的工具,比如针对科学数据库的OpenCV和Performance Optimizations。
硬件
对于一个理想的批量作业,集群中的节点数量增加1倍,可以把工作时间减半。不巧的是,在深度学习中,人们经常看到,虽然GPU增多,但是增速却没有多大提升。所以,顶尖的性能要求有最顶级的GPU。我们还使用一个大量的CPU,用于模拟器和增强学习环境,或者小型的模型中。
AWS 非常慷慨,同意送给我们大量的计算。我们正在CPU的例子和水平扩展的GPU中使用它们。我们也在运营自己的实体服务器,主要跑TitanX GPU,我们希望能有一个混合的云,可以长期使用:用不同的GPU、互联和其他技术进行试验,这对深度学习的未来是很重要的。
条款
我们对待基础设施就像许多公司对待产品一样:它必须代表一个简单的交互,并且,可用性是一个重要的 功能。我们使用一系列连续的工具来管理我们所有的服务器,尽可能同等地安装它们。
我们使用Terraform来设置自己的AWS云资源(比如,网络路线,DNS记录等等)。我们的云和实体节点运行Ubuntu,和Chef一起安装。为了获得更快的注册速度,我们使用Packer来预先bake集群AMI。我们所有的集群使用的都是非重叠的IP,这些集群在公共互联网上,使用我们研究员笔记本的OpenVPN实现互联,在实体节点上使用的则是StrongSwan。
我们会存贮人们的主目录、数据集以及NFS、EFS/S3上的结果。
编配(Orchestration)
可扩展的基础设施通常最后都会让简单的事情变得更困难。我们在小型和大型任务中的基础设施上都付出了相同的努力,我们也在积极地巩固自己的工具包,让分布式的使用案例与局部性的一样可获取。
我们提供了一系列SSH节点(有的包括GPU,有的没有),可用于专用的实验和运行Kubernetes,这是我们针对实体和AWS节点的集群计划。我们的集群跨越了3个AWS区域——我们的工作充满了突发性,所以有时候,我们会在扩展个人区域的能力。
Kubernetes 要求每一个任务狗咬变成一个 Docker容器,使得我们可以获得独立的位置和代码快照。但是,建立一个新的Docker 容器,会在研究者的循环周期中增加额外的时间,所以我们提供了一个工具,来透明地把代码从研究者的笔记本电脑转移到标准图像中。
我们直接向研究者的笔记本公开了Kubernetes的flannel网络,让用户可以通过网络无缝地进入自己正在运行的工作。这对进入监测服务器,比如TensorBoard特别有用。
kubernetes-ec2-autoscaler
代码:https://github.com/openai/kubernetes-ec2-autoscaler
编译来源:Infrastructure for Deep Learning
【号外】由中国自动化学会和新智元联合主办的AI全球年度盛典『AI WORLD 2016世界人工智能大会』即将盛大开幕。
更多详情,点击“阅读原文”,查看大会官网
我来说两句排行榜