跳转至

远程开发与集群

参考资料

  • Codex

SSH

配置

Host lab
    HostName 10.0.0.12
    User hx
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 30
    ServerAliveCountMax 4

Host gpu01
    HostName 10.10.0.21
    User hx
    ProxyJump lab
  • ~/.ssh/config 给远程主机起别名, 后续 ssh, scp, rsync 都能用
  • ProxyJump 走跳板机, 比先登录跳板机再手动登录目标机器干净
  • ServerAliveIntervalServerAliveCountMax 用于保活和断线检测
  • 多级跳板可以写成 ProxyJump gateway1,gateway2
ssh lab
scp file.txt lab:~/tmp/
rsync -av project/ lab:~/project/

密钥

ssh-keygen -t ed25519 -C "name@example.com"
ssh-copy-id lab
ssh-add ~/.ssh/id_ed25519
  • 私钥留在本地, 公钥写入远程 ~/.ssh/authorized_keys
  • 私钥建议设置 passphrase, 再用 ssh-agent 缓存
  • 常见权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_ed25519.pub

tmux

tmux new -s work
tmux ls
tmux attach -t work
tmux kill-session -t work
  • tmux 用来保持远程会话, SSH 断开后 session 仍在
  • 长任务放进 tmux 前先确认机器规则, 不要在登录节点跑重计算
  • 离开时用 Ctrl-b d, 不要直接关掉正在运行任务的 shell

文件传输

scp

scp local.txt lab:~/tmp/
scp lab:~/result.txt .
scp -r project lab:~/project
scp -P 2222 local.txt user@host:~/tmp/
  • scp 适合少量文件的一次性复制
  • -r 复制目录, -P 指定端口
  • 大目录, 断点续传和增量同步优先用 rsync

rsync

rsync -avP source/ lab:~/target/
rsync -avP source lab:~/target/
  • source/ 同步目录内容
  • source 同步目录本身
rsync -avP --exclude '.git/' --exclude '__pycache__/' project/ lab:~/project/
rsync -avP -e "ssh -p 2222" project/ user@host:~/project/
rsync -avn --delete source/ lab:~/target/
rsync -av --delete source/ lab:~/target/
  • -a 保留权限, 时间戳和符号链接等信息
  • -P 等价于 --partial --progress, 适合大文件和不稳定网络
  • --delete 会删除目标端多余文件, 先用 -n dry run
  • --exclude 排除缓存, 依赖目录和构建产物

大文件

tar -cf dataset.tar dataset/
rsync -avP dataset.tar lab:~/data/
sha256sum dataset.tar
  • 海量小文件先打包再传, 避免元数据开销
  • 文本和 CSV 适合压缩, 已压缩图片, 视频, parquet, zip 收益通常不大
  • 重要数据传输后用 sha256sum 校验

Slurm

  • Linux 集群管理, 分配给每个作业固定资源