远程执行框架

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模式启动远程执行并继续。
    • 要在远程计算机中执行的命令,应作为syncasync模式旁边的字符串给出。
  • 重新记录从远程计算机获取日志
  • 重新提取从远程计算机提取任何文件
    • 文件按其相对路径寻址

日志记录

re将远程执行的stdoutstderr重定向到<;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数据库中。我们有pushpull命令。还有一个名为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为您提供详细的手册。

<表><广告>模式说明 选项 示例 < /广告><正文>初始值设置远程执行的当前目录--实例idx重新初始化re init——实例idx=1rsync使用rsync将本地文件与远程文件同步--力重新同步sshadd将新实例添加到配置中--实例re sshadd--instance="usr@host"安装在remote的requirements.txt中安装pypi包命令,--力重新安装重新安装"pytorch tqdm"同步远程同步执行"args.cmd"指令,--力,--rsync重新同步"python3 x.py"异步远程异步执行"args.cmd"指令,--力,--rsync重新异步"python3 x.py"日志从远程计算机获取日志--回路,--过滤器重新记录重新记录——循环=2重新记录--filter="pattern"列表列出远程计算机中活动的进程--力重新列出杀死按索引终止进程--国际直拨电话重新杀死重杀——idx=1清除杀死所有活动的远程进程无重新清洗< SSH >在远程计算机中创建ssh会话无重新ssh笔记本在远程计算机中创建jupyter笔记本--异步运行重新记录按将文件上载到远程计算机 CMD 重新按下"x.py y/"拉动从远程计算机下载文件 CMD 重新拉动"y/z.py"。数据从Web将数据下载到远程的数据/文件夹中 CMD 回复数据"url1 url2 url3"<人显示此手册页无回复

贡献

欢迎各种各样的贡献。

  • 出什么事了?
  • 缺少什么功能?
  • 有什么能做得更好?

提出问题。 添加拉取请求。

许可证

版权所有(c)2019 Suriyadeepan Ramamoorthy。保留所有权利。

这项工作是根据麻省理工学院的许可条款授权的。
有关副本,请参见https://opensource.org/licenses/mit" rel="nofollow">https://opensource.org/licenses/mit

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java以编程方式从TableLayout中删除所有行   Java Web Sart Ubuntu12.1。加载资源(图像)   人们如何让Java SPNEGO客户端在Windows中工作?   java Eclipselink:ObjectArrayMapping和ClassDescriptor   控制台中带有引号/空格的java Javafx命名参数   java创建服务失败:找不到对象?   java Hazelcast:如何在测试期间禁用自动发现?   使用TuckyUrlRewriteFilter rermoteaddr的java块IP   javascript如何在angular 4中进行同步http调用   输入字符串的java排列   java Jenkins不是以Xrs Xmx2048m XX:MaxPermSize=512m(windows)开始的   AWS EMR上的java avro错误   java从两个ArrayList中提取特定连接的对象,组合这些相关对象并从子类中打印   java从主题中删除什么时间点消息?   谷歌像素设备上的java InvalidKeyException   java如何在执行测试后重建项目   java Android 2.2 readUTF()socket问题   按下安卓设备上的“后退”按钮后java Toast没有完成?