远程执行框架
recompute的Python项目详细描述
远程执行的好工具。
在远程机器上训练模特儿最酷的方法是什么?
- 不要担心环境设置(依赖项)
- 不要费心选择要运行的实例
- 不再有bash脚本来来回复制文件
原理
re提供了一套功能,使用户能够专注于实验,而不必担心上面列出的无聊细节。
- 几乎为零形态
- 抽象乏味的重复细节
- 易于执行
约定
您确实需要遵循一些惯例。
- 数据进入
data/
- 远程执行所需的任何非python文件都应添加到
。重新计算/include
- 不应推送到远程计算机的任何python文件都应添加到
。重新计算/排除
设置
# install sshpass
brew install http://git.io/sshpass.rb
pip install --user recompute
配置
配置文件太短。
[general]instance=0remote_home=projects/[instance 0]username=grenouillehost=grasse.localpassword=hen0s3datru1h
您可以将远程计算机的凭据直接添加到配置文件中,或通过命令行re sshadd--instance==user@remotehost'
按顺序添加它们
工作流程
我的机器学习工作流遵循以下步骤:
- 将代码复制到远程机器
rsync
- 安装依赖项
- 下载数据集并将其放入
data/
- 在远程计算机中执行代码
- 获取执行日志
- 复制生成的二进制文件
bin/
通过re,上面列出的任务可以用4个命令完成,如下所示:
# re sshadd --instance=' re init # initalize [rsync, install] re async "python3 x.py"# start execution in remote# (or) re sync "python3 x.py" # blocking run (wait for completion) re log # after a while re pull "bin/ ./bin/" . # pull generated binaries
init
创建本地配置文件,为远程执行设置环境- 列出本地依赖项(python文件)
- 用必需的pypi包填充
requirements.txt
- 在远程计算机中安装pypi包
- 使用rsync将本地依赖项复制到远程计算机
- 在远程计算机的
~/projects/
下创建本地文件夹的副本。
- 我们可以使用
sync
模式在远程机器中启动执行,然后等待它完成,或者使用async
模式启动远程执行并继续。- 要在远程计算机中执行的命令,应作为
sync
或async
模式旁边的字符串给出。
- 要在远程计算机中执行的命令,应作为
重新记录
从远程计算机获取日志重新提取
从远程计算机提取任何文件- 文件按其相对路径寻址
日志记录
re将远程执行的stdout
和stderr
重定向到<;project name>;.log
,可以通过运行re log
将其拉到本地计算机。通常,执行需要一段时间才能完成。因此,我们在远程机器中开始执行,并使用re log
偶尔检查日志。或者可以将此"偶尔"作为命令行参数,然后re拉取日志并每隔"偶尔"显示一次。建议使用日志记录
模块将信息打印到stdout上,而不是打印
语句。
# fetch log from remote machine re log # . start execution in remote machine# .. fetch log re async "python3 nn.py" re log # . start execution # .. pull log every 20 seconds re async "python3 nn.py" re log --loop=20
rsync
可以使用rsync
命令同步文件(本地依赖项)。rsync
在后台运行,后台将中列出的文件复制到远程计算机上。
--强制TCH强制re找出本地依赖项并更新rsync.db
re rsync # --force updates .recompute/rsync.db
依赖关系
requirements.txt
中填充了执行所需的python包(在幕后使用pipreqs
)。重新安装
读取requirements.txt
并在远程系统中安装软件包。
# install dependencies re install # --force updates requirements.txt# manual install re install "torch tqdm"
管理流程
re跟踪它生成的所有远程进程。我们可以使用list
命令列出它们,并使用kill
命令选择性地终止进程。
# list live processes re list # +-------+--------------+-------+# | Index | Name | PID |# +-------+--------------+-------+# | 0 | all | * |# | 1 | zombie/spawn | 30601 |# | 2 | runner | 31036 |# +-------+--------------+-------+# kill process [1] re kill --idx=1# kill them all re purge # or kill interactively with just `re kill`
上载/下载
您可能只需要下载或上载一次文件,而不必将其包含在rsync数据库中。我们有push
和pull
命令。还有一个名为data
的特殊命令,它可以从命令行中用空格分隔的url下载到远程机器的data/
目录中。
# . upload from local machine to remote# .. copy [current_dir/x/localfile] to [remote_home/projects/mynn1/x/] re push "x/localfile x/"# . download from remote machine to local# .. copy [remote_home/projects/mynn1/y/remotefile] to [current_dir/y/remotefile] re pull "y/remotefile y/"# download IRIS dataset to remote machine's [data/] re data https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data # more urls can be added, separated by spaces
笔记本
有时你想在笔记本上运行代码片段。re notebook
启动远程jupyter笔记本服务器并将其挂接到本地端口。远程服务器被跟踪(重新列出
),并可能在必要时被终止。
# . start notebook server in remote machine# .. hook to local port re notebook # Cntl-c to quit
探头
探测
命令探测远程机器,并为我们提供一个可用机器表,其中包含可用资源的信息。
# install sshpass
brew install http://git.io/sshpass.rb
pip install --user recompute
0
手动
re man
为您提供详细的手册。
贡献
欢迎各种各样的贡献。
- 出什么事了?
- 缺少什么功能?
- 有什么能做得更好?
提出问题。 添加拉取请求。
许可证
版权所有(c)2019 Suriyadeepan Ramamoorthy。保留所有权利。
这项工作是根据麻省理工学院的许可条款授权的。
有关副本,请参见https://opensource.org/licenses/mit" rel="nofollow">https://opensource.org/licenses/mit