在多台服务器上无痛苦地训练多个程序
training-noodles的Python项目详细描述
拉面
这是一个简单而强大的工具,可以帮助在只有一个人的multiple服务器上训练multiple程序。
功能
- 自动将实验部署到可用服务器
- 无需更改任何现有代码
- 考虑CPU使用率、GPU使用率、内存使用率、磁盘使用率等
- 仅使用ssh协议
- 依赖于最小的依赖性
- 允许快速原型制作
用例
如果我们想在3台服务器上运行4个实验,更具体地说,我们需要
- 将代码上载到CPU使用率较低的服务器之一
- 在服务器上运行代码
- 准备好后下载实验结果
在第一轮部署中(见上图),面条将使用用户定义的命令检查服务器上的CPU使用情况。
在server 1上cpu使用率很高,因为还有其他一些程序在运行,所以noodles使用scp
上载代码code1和code 2,并分别在server2和server 3上运行它们。
至于如何上传代码,这只是我们写的一个命令列表,面条只是跟着命令走。
在第二轮部署(见上图)中,我们告诉面条检查所有服务器上的实验结果。
noodles发现server 3刚刚运行完code 2,所以它下载了实验结果,并按照我们的要求在本地机器上处理数据。
在第三轮部署中(见上图),仍然需要部署code 3和code 4。Noodles再次检查所有服务器上的CPU使用情况。由于server 1现在刚刚免费,所以面条可以将code 3和code 4分别部署到server1和server3中。
部署回合将继续,直到所有实验都成功部署。在本例中,noodles将尝试在以后的回合中下载并处理code 1、code 3和code 4的实验结果。
面条的工作原理
一般步骤如下:
- 初始化e中的实验列表
- 对于每轮部署:
- 初始化s中的服务器列表
- 对于e中的每个实验:
- 面条在s中的每台服务器上运行用户定义的需求
- Noodles将度量(上述步骤的结果)与用户定义的表达式进行比较
- 如果表达式满足:
- 面条在满意的服务器上运行用户定义的命令
- 从e中删除当前实验
- 从s中删除满意的服务器
- 如果s为空,则中断
- 如果e为空,则中断
面条的实现遵循以下规则:
- 简单(用户无需查看文档即可理解代码和规范)
- 易于调试(发生不同错误时,面条可以采取不同的操作)
- 无状态(面条唯一关心的是部署是否成功,实验的状态必须由用户处理)
文档
请参阅完整文档here。
先决条件
- 基于linux的终端(对于windows,我建议使用git-sdk)
- python 3.5或更高版本
安装
运行以下命令:
pip install training-noodles
用法
noodles <command_type> <path_to_spec>
就这么简单。
示例
下面是一些例子面条的使用方法:
noodles run my_training.yml noodles status my_training.yml noodles monitor my_training.yml noodles stop my_training.yml noodles download my_training.yml noodles upload my_training.yml ...
您也只能选择一些实验:
noodles run "my_training.yml:Experiment 1,Experiment 2"
请参阅示例Two Locals开始。有关更复杂的示例,请参见Train TensorFlow Examples。
默认规格
如果用户规范没有指定,面条将使用默认规范中的属性。有关默认规范,请参见training_noodles/specs/defaults.yml。