编者按: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的观点构建原型。这要求尽可能快地为一个小型模型构建原型,然后,将所构建的模型原型在真实数据上运行,并检测获取的结果。经过几次快速循环后,atv,Tim获取了CIFAR-10样本,这一成果令人感到兴奋不已,是我们见过的在该数据集中获得的最好的样本。 然而,深度学习(通常称之为AI算法)必须得到扩展,使之真正取得令人印象深刻的应用成果——一个小型神经网络能够用来证实一个构想(或概念),但是,一个大型神经网络能够用于解决实际问题,得到切实可行的方案。因而,Ian Goodfellow曾深度扩展该模型,致力于研究ImageNet。
运用我们的模型学习生成的ImageNet图像 利用一个更大的模型和一个更为大型的数据集,Ian需要在多个GPU中并行运行该模型。研究过程中每一阶段的作业都将把多台计算机的CPU与GPU利用率提升至90%,但是,即便是这种模型也需要花费很多天进行训练。在这个研究过程中,所进行的每一个实验都变得非常有价值,他将认真地记录每个实验的结果。 基础设施 软件
我们TensorFlow代码的样本 (责任编辑:本港台直播) |