在我们的研究中,大部分代码是用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创建,调整,j2直播,或销毁运行的云资源来匹配你的配置文件。 我们运用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 (责任编辑:本港台直播) |