本机开发 + 多机执行的极简远端运行工具

Remote_All


一个极简的远端运行工具层,用于把"本机开发 + 多机执行"这件事变得简单、透明、可控。

它适合这样的工作流:

  • 代码主要在本机维护
  • 实验主要在远端服务器执行
  • 不想引入复杂调度系统
  • 只想保留最核心的两个动作:
    • 同步代码
    • 远端启动任务

当前版本只提供两个命令:

  • ra-sync:同步代码到指定远端
  • ra-run:先同步,再在远端后台启动任务

Github:https://github.com/Jurio0304/Remote_All


为什么会有这个工具?

很多研究 / 工程项目都会遇到同样的问题:

  • 本机是主要开发机
  • 真正跑实验的是远端 GPU 服务器
  • 远端机器不止一台
  • 但又不值得为了这件事专门部署完整调度系统

这时候最常见的问题不是"跑不起来",而是流程很乱:

  • 同步代码靠手工 scp/rsync
  • 远端启动靠手拼 ssh ...
  • 每个项目都重复一套相似脚本
  • 结果目录命名不统一

Remote_All 的目标很明确:

用最少的配置和最少的命令,把"同步代码 + 远端启动任务"变成一个稳定、可复用的日常流程。


它目前能做什么?

1. 同步代码

把本地项目代码同步到指定远端服务器的相同路径

支持:

  • 同步整个项目
  • 同步单个子目录或文件
  • 项目定义"默认同步子集"
  • 自动排除结果目录和数据目录

2. 远端后台启动任务

在指定远端服务器上:

  • 先自动执行一次同步
  • 再在远端项目目录中后台启动命令
  • 自动分配本次任务的结果目录

结果默认写到:

text 复制代码
<REMOTE_PROJECT_ROOT>/Results/<job_id>

其中:

text 复制代码
job_id = YYMMDD_HHMMSS_任务名

目录结构

text 复制代码
Remote_All/
  README.md
  config.example.yml
  .gitignore
  bin/
    ra-sync
    ra-run
  lib/
    ra_sync_lib.py
    ra_run_lib.py
  examples/
    ssh_config.example
    remote-run.example.yml

快速开始

Step 1:配置 SSH 免密登录

先准备一把专门给远端运行使用的 SSH key:

bash 复制代码
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_remote_all -C "remote_all"

把公钥部署到远端:

bash 复制代码
ssh-copy-id -i ~/.ssh/id_ed25519_remote_all.pub <REMOTE_USER>@<REMOTE_HOST>

然后在 ~/.ssh/config 中配置远端别名。参考:

  • examples/ssh_config.example

完成后应该能直接:

bash 复制代码
ssh <REMOTE_ALIAS>

Step 2:准备全局配置

从:

  • config.example.yml

复制到:

  • ~/.remote_all/config.yml

然后填入你自己的远端信息。

最小配置长这样:

yaml 复制代码
hosts:
  server-a:
    root: /home/<user>
    tags: [gpu, fast-cpu]

  server-b:
    root: /home/<user>
    tags: [gpu, large-memory]

local:
  state: /home/<user>/.remote_all/state

run:
  launcher: nohup

当前只要求你提供:

  • 远端根目录 root
  • 一个本地状态目录 local.state
  • 默认后台启动方式 launcher

Step 3:给项目补最小配置(推荐)

在项目根目录下放一个:

  • .remote-run.yml

参考:

  • examples/remote-run.example.yml

当前支持两个字段:

yaml 复制代码
runtime:
  python: <PYTHON_PATH>

sync:
  default_sources:
    - src
    - scripts
    - tools

含义:

  • runtime.python
    • 项目绑定的 Python 环境
  • sync.default_sources
    • 项目默认同步子集

如果项目没有这份配置,工具也能工作,只是会默认同步整个项目。


Step 4:把命令加入 PATH

~/.bashrc~/.zshrc 中加入:

bash 复制代码
export PATH="$HOME/.remote_all/bin:$PATH"

之后:

bash 复制代码
source ~/.bashrc

你就可以直接使用:

  • ra-sync
  • ra-run

如何使用 ra-sync

同步整个项目

bash 复制代码
ra-sync --host <REMOTE_ALIAS> --project <PROJECT_ROOT>

只同步某个子目录或文件

bash 复制代码
ra-sync --host <REMOTE_ALIAS> --project <PROJECT_ROOT> --source <SUBPATH>

预览同步计划

bash 复制代码
ra-sync --host <REMOTE_ALIAS> --project <PROJECT_ROOT> --dry-run

默认排除项

当前默认排除:

  • .git/
  • __pycache__/
  • .pytest_cache/
  • Results/ / results/
  • Data/ / data/
  • *.pyc
  • *.pyo

也就是说:

  • 代码会同步
  • 数据与结果目录默认不会同步

如何使用 ra-run

ra-run 会自动先执行一次 ra-sync,然后在远端项目目录中后台启动任务。

基本用法

bash 复制代码
ra-run \
  --host <REMOTE_ALIAS> \
  --project <PROJECT_ROOT> \
  --name <TASK_NAME> \
  --gpu <GPU_ID> \
  -- <COMMAND>

例如:

bash 复制代码
ra-run \
  --host server-a \
  --project /path/to/project \
  --name train_exp1 \
  --gpu 0 \
  -- bash scripts/train.sh

dry-run

bash 复制代码
ra-run \
  --host <REMOTE_ALIAS> \
  --project <PROJECT_ROOT> \
  --name <TASK_NAME> \
  --gpu <GPU_ID> \
  --dry-run \
  -- <COMMAND>

自动设置的环境变量

当前 ra-run 会自动在远端设置:

  • CUDA_VISIBLE_DEVICES
  • JOB_ID
  • OUTPUT_DIR

如果项目提供了 runtime.python,还会额外设置:

  • CONDA_PY
  • REMOTE_PYTHON

因此,如果你的项目脚本支持这些环境变量,就可以很自然地接入这套流程。


一个典型使用例子

假设你在本机维护一个项目:

text 复制代码
<PROJECT_ROOT>

你已经:

  • 配好了 SSH
  • 写好了 ~/.remote_all/config.yml
  • 给项目加了 .remote-run.yml

那么典型日常流程就是:

先预览同步范围

bash 复制代码
ra-sync --host server-a --project <PROJECT_ROOT> --dry-run

再真正同步

bash 复制代码
ra-sync --host server-a --project <PROJECT_ROOT>

直接远端启动任务

bash 复制代码
ra-run \
  --host server-a \
  --project <PROJECT_ROOT> \
  --name exp1 \
  --gpu 0 \
  -- bash scripts/train.sh

结果会落在:

text 复制代码
<PROJECT_ROOT>/Results/<job_id>

当前边界

在公开使用之前,你应该明确知道这套工具的边界:

  • 它现在适合"本机开发 + 远端运行"的日常工作流
  • 它不适合复杂的集群调度
  • 它没有做任务状态管理
  • 它也不会自动替你回收结果

一句话总结

Remote_All 是一套极简的远端运行工具:ra-sync 负责同步代码,ra-run 负责同步后在远端后台启动任务,并把结果写入项目自己的 Results/<job_id> 目录。它不追求复杂调度,只追求把日常远端运行流程做得足够简单、稳定和透明。

Github:https://github.com/Jurio0304/Remote_All

相关推荐
skywalk81632 小时前
pytest测试的时候这是什么意思?Migrating <class ‘kotti.resources.File‘>
前端·python
overmind2 小时前
oeasy Python 121[专业选修]列表_多维列表运算_列表相加_列表相乘
java·windows·python
m0_678485452 小时前
CSS如何控制表格单元格边框合并_通过border-collapse实现
jvm·数据库·python
m0_748839492 小时前
如何用组合继承模式实现父类方法复用与子类属性独立
jvm·数据库·python
qq_334563553 小时前
PHP源码是否依赖特定芯片组_Intel与AMD平台差异【操作】
jvm·数据库·python
阿巴~阿巴~3 小时前
Git版本控制完全指南:从入门到实战(简单版)
linux·服务器·git
Cx330❀3 小时前
Linux命名管道(FIFO)通信:从原理到实操,一文搞懂跨进程通信
大数据·linux·运维·服务器·elasticsearch·搜索引擎
遇满则缺3 小时前
新手第一次使用gitee全流程(附上常见错误以及解决方法)
git·gitee
嵌入式×边缘AI:打怪升级日志3 小时前
嵌入式Linux应用开发快速入门(从零到第一个程序)
linux·运维·notepad++