From 9fbe84123d2555fd508d1bd5263419b6409f50cc Mon Sep 17 00:00:00 2001 From: Xiaoxukuaipao <2812156857@qq.com> Date: Wed, 20 May 2026 19:27:56 -0700 Subject: [PATCH] Add fleet dashboard monitoring --- CHANGELOG.md | 29 + README.md | 17 + docs/images/autodl-remote-dashboard.png | Bin 0 -> 151371 bytes .../autodl-remote/.codex-plugin/plugin.json | 7 +- plugins/autodl-remote/README.md | 98 ++- plugins/autodl-remote/bin/autodl-remote | 677 +++++++++++++++++- .../skills/autodl-remote/SKILL.md | 24 +- 7 files changed, 809 insertions(+), 43 deletions(-) create mode 100644 docs/images/autodl-remote-dashboard.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 7629ced..ba65af3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Changelog +## 0.7.0 + +- Added project-local fleets for grouping multiple AutoDL/SSH accounts under one experiment workspace. +- Added `fleet create`, `fleet add`, `fleet list`, and `fleet status`. +- Added read-only `dashboard` generation for single-machine and fleet views. +- Added `dashboard --watch --lines ` so the page can refresh itself and display recent remote run logs without Codex copying logs into chat. +- Added run-oriented commands: `run submit`, `run list`, `run status`, `run tail`, and `run note`. +- Added run metadata fields for model, tags, stage, purpose, outputs, account, and remote root. +- Added `--account` and `--remote` overrides for `exec`, `put`, `get`, `tree`, `ls`, `cat`, and `tail` so one local project can operate multiple remote machines. +- Fixed detached remote execution so long-running jobs detach from the SSH session immediately. +- Fixed stdin handling during remote temp-directory creation so `exec --script` and `exec --stdin` no longer upload empty scripts. +- Moved SSH ControlMaster sockets to a short `/tmp` path by default to avoid OpenSSH `ControlPath too long` failures on macOS temporary homes. + +## 0.6.3 + +- Strengthened the Codex skill rules so AutoDL/SSH work defaults to `autodl-remote` instead of raw `ssh`/`expect` scripts. +- Instructed Codex to use `exec --script` or `exec --stdin` for complex remote checks and to avoid printing credentials when bypassing the plugin. + +## 0.6.2 + +- Added `autodl-remote --version`, `autodl-remote -V`, and `autodl-remote version`. + +## 0.6.1 + +- Fixed keychain/expect argument forwarding for SSH password prompts. +- Reused SSH ControlMaster settings for `scp` fallback paths. +- Improved `exec --stdin` and `exec --script` upload behavior. +- Refined dangerous command protection to allow concrete file/subdirectory deletion while still blocking root/project-root deletion and raw shutdown-style commands. + ## 0.6.0 - Added `autodl-remote shutdown` with shutdown/poweroff/halt fallback and SSH disconnect-aware success handling. diff --git a/README.md b/README.md index b693993..db09d30 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ | ⬇️ 显式下载 | 用 `get` 或 `sync-down` 只拉回需要查看或提交的结果 | | 📜 日志查看 | 用 `tail` 查看远端训练日志,不必下载大文件 | | 🧾 Job 状态 | 用 `job status` 和 `job tail` 跟踪 `exec --detach --name` 创建的长任务 | +| 📊 Dashboard | 用只读页面查看多台远端设备、run 状态和最近日志,减少聊天里反复粘贴日志 | | 🧠 脚本执行 | 用 `exec --script` 或 `exec --stdin` 避免复杂 quoting | | ⏻ 远端关机 | 用 `shutdown` 处理 AutoDL 关机和 SSH 断开返回码 | | 📝 项目约定 | 首次使用自动生成 `.autodl-remote/CONVENTIONS.md` 记录远端约定 | @@ -223,6 +224,20 @@ autodl-remote exec -- nvidia-smi   这个边界很重要:**本地负责代码和修改痕迹,远端负责大模型、数据集、checkpoint 和 GPU 任务。** 插件不会默认下载模型权重,也不会默认把整个远端目录同步回来。 +## 📊 Dashboard + +
+ AutoDL Remote Dashboard 示例 +
+ +  Dashboard 是只读的本地页面:它通过 SSH 轮询远端状态,显示设备在线情况、GPU/磁盘信息、当前 run,以及远端日志的最近若干行。Codex 只需要启动 dashboard 命令,不需要把训练日志复制到聊天里。 + +```bash +autodl-remote dashboard --fleet llm-exp --open --watch 5 --lines 120 +``` + +  为了让 dashboard 更有用,运行脚本建议输出结构化日志,例如 `[START]`、`[ENV]`、`[PROGRESS]`、`[METRIC]`、`[OUTPUT]`、`[DONE]`。Python 任务建议使用 `PYTHONUNBUFFERED=1 python -u ...`,这样日志能更快出现在页面里。 + ## 🛠️ Commands | 命令 | 用途 | @@ -243,6 +258,8 @@ autodl-remote exec -- nvidia-smi | `autodl-remote job list` | 列出本地记录的远端长任务 | | `autodl-remote job status train` | 查看长任务 PID、日志、远端状态和退出码 | | `autodl-remote job tail train` | 查看命名长任务日志 | +| `autodl-remote fleet status exp` | 查看多台远端设备状态 | +| `autodl-remote dashboard --fleet exp --watch 5 --lines 120` | 打开只读 dashboard,持续展示远端状态和日志 | | `autodl-remote model-dir --mkdir` | 输出并创建项目模型目录 | | `autodl-remote shutdown` | 请求远端关机,并把 SSH 断开视为可能成功 | diff --git a/docs/images/autodl-remote-dashboard.png b/docs/images/autodl-remote-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..6997bdf487a3671c2054a0c60f3fcf0d273461f7 GIT binary patch literal 151371 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

XE@Ev^P=6r@vb}nvDRBM1c4bkw4D0c)@9TJ4Fl6 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 U>oc8)9pkx;rTsTm7Jqs4H%A_@V*mgE literal 0 HcmV?d00001 diff --git a/plugins/autodl-remote/.codex-plugin/plugin.json b/plugins/autodl-remote/.codex-plugin/plugin.json index 20634e9..6f1add2 100644 --- a/plugins/autodl-remote/.codex-plugin/plugin.json +++ b/plugins/autodl-remote/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "autodl-remote", - "version": "0.6.1", - "description": "Bash-only SSH account, command, upload, download, job, and shutdown tool layer for AutoDL.", + "version": "0.7.0", + "description": "Bash-only SSH account, fleet, command, upload, download, job, dashboard, and shutdown tool layer for AutoDL.", "author": { "name": "haibarazz", "url": "https://github.com/haibarazz/AutoDL-Remote" @@ -21,7 +21,7 @@ "interface": { "displayName": "AutoDL Remote", "shortDescription": "Control AutoDL over SSH from local Codex.", - "longDescription": "Provides SSH account management, remote command execution, explicit file upload/download primitives, remote job tracking, script execution, and shutdown handling. Codex decides what to inspect, push, pull, and run.", + "longDescription": "Provides SSH account and fleet management, remote command execution, explicit file upload/download primitives, remote job/run tracking, read-only dashboard generation, script execution, and shutdown handling. Codex decides what to inspect, push, pull, and run.", "developerName": "haibarazz", "category": "Developer Tools", "capabilities": [ @@ -37,6 +37,7 @@ "Upload this edited file to AutoDL and run training.", "Tail the latest AutoDL training log.", "Check the status of my detached AutoDL job.", + "Show a read-only dashboard for my AutoDL devices and runs.", "Shut down the remote AutoDL machine when the run is finished." ], "brandColor": "#2563EB" diff --git a/plugins/autodl-remote/README.md b/plugins/autodl-remote/README.md index 6edd523..df0a585 100644 --- a/plugins/autodl-remote/README.md +++ b/plugins/autodl-remote/README.md @@ -37,6 +37,12 @@ Passwords are never written to project files. ## Quick Start +Check the installed CLI version: + +```bash +autodl-remote --version +``` + Create or choose an account: ```bash @@ -64,9 +70,10 @@ autodl-remote model-dir autodl-remote tree . --depth 2 autodl-remote exec -- pwd autodl-remote exec -- python train.py -autodl-remote exec --detach --name train -- python train.py -autodl-remote job status train -autodl-remote job tail train +autodl-remote exec --detach --name train --model baseline --stage training -- python train.py +autodl-remote run status train +autodl-remote run tail train +autodl-remote dashboard ``` Move files only when needed: @@ -92,6 +99,60 @@ Shutdown the remote machine after a run: autodl-remote shutdown ``` +## Fleet and Dashboard + +The dashboard is read-only. It shows local run metadata, lightweight remote status from SSH polling, and the latest remote log lines for recorded runs. It does not stop jobs, delete files, upload, download, or shut down machines. + +![AutoDL Remote Dashboard](../../docs/images/autodl-remote-dashboard.png) + +Single-machine dashboard for the current project binding: + +```bash +autodl-remote dashboard +autodl-remote dashboard --open +autodl-remote dashboard --open --watch 5 --lines 120 +``` + +Create a project-local fleet: + +```bash +autodl-remote fleet create rag-exp +autodl-remote fleet add rag-exp nmb1 --account autodl-nmb1 --remote /root/autodl-tmp/LLM-RAG --tags a800,rag +autodl-remote fleet add rag-exp cqa1 --account autodl-cqa1 --remote /root/autodl-tmp/LLM-RAG --tags 4090,rag +autodl-remote fleet status rag-exp +autodl-remote dashboard --fleet rag-exp --open +autodl-remote dashboard --fleet rag-exp --open --watch 5 --lines 120 +``` + +Run metadata lets the dashboard show what Codex intended to run: + +```bash +autodl-remote exec --account autodl-nmb1 --remote /root/autodl-tmp/LLM-RAG \ + --detach --name melu-fold3 --model MeLU --stage training --tag fold=3 \ + --purpose "no-leak 5-fold experiment" -- python train.py model=melu fold=3 + +autodl-remote run list +autodl-remote run note melu-fold3 --stage predicting --output outputs/melu_fold3.csv +``` + +For long-running Python jobs, prefer unbuffered logs so the dashboard updates quickly: + +```bash +PYTHONUNBUFFERED=1 python -u train.py +``` + +Useful log markers: + +```text +[START] model=... device=... cwd=... +[ENV] python=... cuda=... +[PROGRESS] epoch=... step=... loss=... +[METRIC] val_auc=... +[OUTPUT] path=... +[DONE] exit_code=0 +[ERROR] ... +``` + ## Accounts List accounts: @@ -146,20 +207,30 @@ autodl-remote account password-delete autodl-remote bind [--account name] --remote /remote/project/root autodl-remote doctor autodl-remote model-dir [--mkdir] +autodl-remote fleet create +autodl-remote fleet add [--account name] [--remote path] [--tags tags] +autodl-remote fleet list +autodl-remote fleet status [fleet] +autodl-remote dashboard [--fleet name] [--output path] [--open] [--watch seconds] [--lines 120] -autodl-remote exec [--detach] [--cwd path] [--name name] [--script local_script] [--stdin] -- +autodl-remote exec [--account name] [--remote path] [--detach] [--cwd path] [--name name] [--model name] [--tag k=v] [--stage stage] [--purpose text] [--script local_script] [--stdin] -- autodl-remote put-run ... -- -autodl-remote put [remote-path] -autodl-remote get [local-path] -autodl-remote sync-up [remote-path] -autodl-remote sync-down [local-path] -autodl-remote tree [remote-path] [--depth 3] [--limit 500] -autodl-remote ls [remote-path] -autodl-remote cat [--lines 200] -- -autodl-remote tail [--lines 120] [--follow] -- +autodl-remote put [--account name] [--remote path] [remote-path] +autodl-remote get [--account name] [--remote path] [local-path] +autodl-remote sync-up [--account name] [--remote path] [remote-path] +autodl-remote sync-down [--account name] [--remote path] [local-path] +autodl-remote tree [--account name] [--remote path] [remote-path] [--depth 3] [--limit 500] +autodl-remote ls [--account name] [--remote path] [remote-path] +autodl-remote cat [--account name] [--remote path] [--lines 200] -- +autodl-remote tail [--account name] [--remote path] [--lines 120] [--follow] -- autodl-remote job list autodl-remote job status autodl-remote job tail [--lines 120] [--follow] +autodl-remote run submit [metadata/options] -- +autodl-remote run list +autodl-remote run status +autodl-remote run tail [--lines 120] [--follow] +autodl-remote run note [--model name] [--tag k=v] [--stage stage] [--purpose text] [--output path] autodl-remote shutdown [--wait seconds] autodl-remote shell autodl-remote history @@ -176,4 +247,7 @@ autodl-remote history - Keep large models, datasets, checkpoints, and training outputs on AutoDL unless the user explicitly pulls them. - Use `exec --script` or `exec --stdin` for multi-line shell/Python snippets. - Use `job status` and `job tail` for detached training jobs created with `exec --detach --name`. +- Use `fleet` and `dashboard` for multi-device visibility; the dashboard is display-only. +- Use `dashboard --watch --lines ` when the user wants to watch remote logs without spending chat tokens. +- Use run metadata flags (`--model`, `--tag`, `--stage`, `--purpose`) when Codex launches experiments so later dashboards are understandable. - Use `shutdown` instead of guessing provider-specific poweroff commands. diff --git a/plugins/autodl-remote/bin/autodl-remote b/plugins/autodl-remote/bin/autodl-remote index 9278d33..8189669 100755 --- a/plugins/autodl-remote/bin/autodl-remote +++ b/plugins/autodl-remote/bin/autodl-remote @@ -2,6 +2,7 @@ set -u PROGRAM="autodl-remote" +PROGRAM_VERSION="0.7.0" APP_DIR="$HOME/.autodl-remote" ACCOUNTS_DIR="$APP_DIR/accounts" DEFAULT_ACCOUNT_FILE="$APP_DIR/default-account" @@ -22,6 +23,10 @@ usage() { cat <<'EOF' usage: autodl-remote [options] +general: + --version + version + account: account add [--target root@host | --host host --user root] [--port 22] [--key path] [--auth prompt|keychain|ssh-key] [--default-remote path] account list @@ -35,21 +40,31 @@ project: bind [--account name] --remote /remote/project/root doctor model-dir [--mkdir] + fleet create + fleet add [--account name] [--remote path] [--tags tags] + fleet list + fleet status [fleet] + dashboard [--fleet name] [--output path] [--open] [--watch seconds] [--lines 120] remote: - exec [--detach] [--cwd path] [--name name] [--script local_script] [--stdin] [--allow-dangerous] -- + exec [--account name] [--remote path] [--detach] [--cwd path] [--name name] [--model name] [--tag k=v] [--stage stage] [--purpose text] [--script local_script] [--stdin] [--allow-dangerous] -- put-run ... -- - put [remote-path] - get [local-path] - sync-up [remote-path] - sync-down [local-path] - tree [remote-path] [--depth 3] [--limit 500] - ls [remote-path] - cat [--lines 200] -- - tail [--lines 120] [--follow] -- + put [--account name] [--remote path] [remote-path] + get [--account name] [--remote path] [local-path] + sync-up [--account name] [--remote path] [remote-path] + sync-down [--account name] [--remote path] [local-path] + tree [--account name] [--remote path] [remote-path] [--depth 3] [--limit 500] + ls [--account name] [--remote path] [remote-path] + cat [--account name] [--remote path] [--lines 200] -- + tail [--account name] [--remote path] [--lines 120] [--follow] -- job list job status job tail [--lines 120] [--follow] + run submit [metadata/options] -- + run list + run status + run tail [--lines 120] [--follow] + run note [--model name] [--tag k=v] [--stage stage] [--purpose text] [--output path] shutdown [--wait seconds] shell history [--lines 20] @@ -57,6 +72,10 @@ remote: EOF } +cmd_version() { + printf '%s %s\n' "$PROGRAM" "$PROGRAM_VERSION" +} + shell_quote() { printf '%q' "$1" } @@ -80,6 +99,12 @@ $1 EOF } +html_escape() { + sed 's/&/\&/g; s//\>/g; s/"/\"/g' < "$file" < "$tmp" + mv "$tmp" "$file" +} + +apply_context_override() { + local account="${1:-}" remote="${2:-}" + if [ -n "$account" ]; then + load_account "$account" + PROJECT_ACCOUNT="$ACCOUNT_NAME" + if [ -z "$remote" ] && [ -n "$ACCOUNT_DEFAULT_REMOTE" ]; then + remote="$ACCOUNT_DEFAULT_REMOTE" + fi + fi + if [ -n "$remote" ]; then + REMOTE_ROOT="${remote%/}" + validate_remote_root "$REMOTE_ROOT" + PROJECT_MODEL_DIR="$(default_model_dir)" + fi +} + +fleet_root() { + printf '%s/%s/fleets\n' "$PROJECT_ROOT" "$HISTORY_DIR" +} + +fleet_dir() { + local name="$1" + valid_name "$name" || die "Invalid fleet name: $name" + printf '%s/%s\n' "$(fleet_root)" "$name" +} + +fleet_device_path() { + local fleet="$1" device="$2" + valid_name "$device" || die "Invalid device name: $device" + printf '%s/%s.conf\n' "$(fleet_dir "$fleet")" "$device" +} + +device_get() { + local file="$1" key="$2" + config_get_from "$file" "$key" +} + +apply_job_context() { + local file="$1" account remote + account="$(job_get "$file" ACCOUNT)" + remote="$(job_get "$file" REMOTE_ROOT)" + [ -n "$account" ] || account="${PROJECT_BOUND_ACCOUNT:-$PROJECT_ACCOUNT}" + [ -n "$remote" ] || remote="${PROJECT_BOUND_REMOTE_ROOT:-$REMOTE_ROOT}" + apply_context_override "$account" "$remote" +} + +job_remote_status_summary() { + local file="$1" pid status_path output rc status alive + apply_job_context "$file" + pid="$(job_get "$file" PID)" + status_path="$(job_get "$file" STATUS_PATH)" + output="$(ssh_capture "if [ -f $(shell_quote "$status_path") ]; then cat $(shell_quote "$status_path"); elif kill -0 $(shell_quote "$pid") 2>/dev/null; then printf 'status=running\npid=%s\n' $(shell_quote "$pid"); else printf 'status=unknown\npid=%s\n' $(shell_quote "$pid"); fi; if kill -0 $(shell_quote "$pid") 2>/dev/null; then echo alive=yes; else echo alive=no; fi" 2>/dev/null)" + rc=$? + if [ "$rc" -ne 0 ]; then + printf 'unreachable\n' + return 0 + fi + status="$(printf '%s\n' "$output" | awk -F= '$1=="status"{print $2; exit}')" + alive="$(printf '%s\n' "$output" | awk -F= '$1=="alive"{print $2; exit}')" + [ -n "$status" ] || status="unknown" + if [ "$alive" = "yes" ] && [ "$status" = "unknown" ]; then + status="running" + fi + printf '%s\n' "$status" +} + +remote_probe() { + local output rc + output="$(ssh_capture "root=$(shell_quote "$REMOTE_ROOT"); printf 'online=yes\n'; printf 'host='; hostname 2>/dev/null || echo unknown; printf 'remote_root=%s\n' \"\$root\"; printf 'disk='; df -h \"\$root\" 2>/dev/null | awk 'NR==2{print \$3 \"/\" \$2 \" \" \$5}' || echo unknown; if command -v nvidia-smi >/dev/null 2>&1; then printf 'gpu='; nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu --format=csv,noheader,nounits 2>/dev/null | head -n 1 | awk -F, '{gsub(/^ +| +$/, \"\", \$1); gsub(/^ +| +$/, \"\", \$2); gsub(/^ +| +$/, \"\", \$3); gsub(/^ +| +$/, \"\", \$4); print \$1 \" \" \$2 \"/\" \$3 \" MiB \" \$4 \"%\"}'; else echo 'gpu=unavailable'; fi; printf 'processes='; pgrep -af 'python|torchrun|accelerate' 2>/dev/null | head -n 3 | tr '\n' '|' | sed 's/|$//'; printf '\n'" 2>&1)" + rc=$? + if [ "$rc" -eq 0 ]; then + printf '%s\n' "$output" + else + printf 'online=no\n' + printf 'error=%s\n' "$(printf '%s' "$output" | head -n 1)" + fi +} + +kv_get() { + local data="$1" key="$2" + printf '%s\n' "$data" | awk -F= -v key="$key" '$1==key{print substr($0, length(key)+2); exit}' +} + load_account() { local name="$1" path valid_name "$name" || die "Invalid account name: $name" @@ -293,12 +438,15 @@ load_project() { esac PROJECT_MODEL_DIR="${PROJECT_MODEL_DIR%/}" validate_remote_root "$PROJECT_MODEL_DIR" + PROJECT_BOUND_ACCOUNT="$PROJECT_ACCOUNT" + PROJECT_BOUND_REMOTE_ROOT="$REMOTE_ROOT" ensure_project_conventions } ssh_common_args() { - SSH_ARGS=(-p "$ACCOUNT_PORT" -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o "ControlPath=$APP_DIR/ssh-%C") - mkdir -p "$APP_DIR" + local control_path + control_path="$(ssh_control_path)" + SSH_ARGS=(-p "$ACCOUNT_PORT" -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o "ControlPath=$control_path") [ -n "$ACCOUNT_KEY" ] && SSH_ARGS+=(-i "$ACCOUNT_KEY") if [ "$ACCOUNT_AUTH" != "keychain" ] && [ "$ACCOUNT_AUTH" != "prompt" ]; then SSH_ARGS+=(-o BatchMode=yes) @@ -306,8 +454,9 @@ ssh_common_args() { } scp_common_args() { - SCP_ARGS=(-P "$ACCOUNT_PORT" -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o "ControlPath=$APP_DIR/ssh-%C") - mkdir -p "$APP_DIR" + local control_path + control_path="$(ssh_control_path)" + SCP_ARGS=(-P "$ACCOUNT_PORT" -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o "ControlPath=$control_path") [ -n "$ACCOUNT_KEY" ] && SCP_ARGS+=(-i "$ACCOUNT_KEY") if [ "$ACCOUNT_AUTH" != "keychain" ] && [ "$ACCOUNT_AUTH" != "prompt" ]; then SCP_ARGS+=(-o BatchMode=yes) @@ -315,8 +464,9 @@ scp_common_args() { } rsync_ssh_command() { - local cmd - cmd="ssh -p $(shell_quote "$ACCOUNT_PORT") -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o ControlPath=$(shell_quote "$APP_DIR/ssh-%C")" + local cmd control_path + control_path="$(ssh_control_path)" + cmd="ssh -p $(shell_quote "$ACCOUNT_PORT") -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ControlMaster=auto -o ControlPersist=600 -o ControlPath=$(shell_quote "$control_path")" [ -n "$ACCOUNT_KEY" ] && cmd="$cmd -i $(shell_quote "$ACCOUNT_KEY")" if [ "$ACCOUNT_AUTH" != "keychain" ] && [ "$ACCOUNT_AUTH" != "prompt" ]; then cmd="$cmd -o BatchMode=yes" @@ -324,6 +474,18 @@ rsync_ssh_command() { printf '%s\n' "$cmd" } +ssh_control_dir() { + local base + base="${AUTODL_REMOTE_CONTROL_DIR:-/tmp/autodl-remote-${UID:-user}}" + mkdir -p "$base" + chmod 700 "$base" 2>/dev/null || true + printf '%s\n' "$base" +} + +ssh_control_path() { + printf '%s/ssh-%%C\n' "$(ssh_control_dir)" +} + keychain_password() { command -v security >/dev/null 2>&1 || die "macOS security command is not available." security find-generic-password -a "$ACCOUNT_NAME" -s "$KEYCHAIN_SERVICE" -w 2>/dev/null @@ -425,7 +587,7 @@ remote_has_rsync() { ensure_remote_dir() { local dir="$1" - ssh_capture "mkdir -p $(shell_quote "$dir")" >/dev/null + ssh_capture "mkdir -p $(shell_quote "$dir")" /dev/null } upload_local_file() { @@ -779,12 +941,20 @@ cmd_doctor() { cmd_exec() { load_project - local detach=false cwd="$REMOTE_ROOT" name="" allow_dangerous=false script="" stdin_mode=false remote_script="" + local detach=false cwd="" cwd_arg="" name="" allow_dangerous=false script="" stdin_mode=false remote_script="" + local account_override="" remote_override="" model="" tags="" purpose="" stage="" outputs="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --detach) detach=true; shift ;; - --cwd) cwd="$(remote_join "$2")"; shift 2 ;; + --cwd) cwd_arg="$2"; shift 2 ;; --name) name="$2"; shift 2 ;; + --model) model="$2"; shift 2 ;; + --tag) tags="$(append_csv "$tags" "$2")"; shift 2 ;; + --purpose) purpose="$2"; shift 2 ;; + --stage) stage="$2"; shift 2 ;; + --output) outputs="$(append_csv "$outputs" "$2")"; shift 2 ;; --script) script="$2"; shift 2 ;; --stdin) stdin_mode=true; shift ;; --allow-dangerous) allow_dangerous=true; shift ;; @@ -793,6 +963,9 @@ cmd_exec() { esac done [ "$stdin_mode" != "true" ] || [ -z "$script" ] || die "Use either --script or --stdin, not both." + apply_context_override "$account_override" "$remote_override" + cwd="$REMOTE_ROOT" + [ -z "$cwd_arg" ] || cwd="$(remote_join "$cwd_arg")" local cmd="" tmp_name result pid status_path remote_cmd detach_rc if [ -n "$script" ]; then @@ -838,14 +1011,28 @@ cmd_exec() { status_path="$REMOTE_ROOT/.autodl-remote/jobs/$name.status" info "log=$log" if [ "$detach" = "true" ]; then - remote_cmd="mkdir -p $(shell_quote "$(dirname "$log")") $(shell_quote "$(dirname "$status_path")") && ( started_at=\$(date +%Y-%m-%dT%H:%M:%S%z); pid=\$BASHPID; printf 'status=running\npid=%s\nstarted_at=%s\nlog=%s\ncwd=%s\n' \"\$pid\" \"\$started_at\" $(shell_quote "$log") $(shell_quote "$cwd") > $(shell_quote "$status_path"); cd $(shell_quote "$cwd") && bash -lc $(shell_quote "$cmd") > $(shell_quote "$log") 2>&1; rc=\$?; finished_at=\$(date +%Y-%m-%dT%H:%M:%S%z); printf 'status=exited\npid=%s\nstarted_at=%s\nfinished_at=%s\nexit_code=%s\nlog=%s\ncwd=%s\n' \"\$pid\" \"\$started_at\" \"\$finished_at\" \"\$rc\" $(shell_quote "$log") $(shell_quote "$cwd") > $(shell_quote "$status_path"); ) < /dev/null & printf 'pid=%s\nlog=%s\nstatus=%s\n' \"\$!\" $(shell_quote "$log") $(shell_quote "$status_path")" + local runner + runner="$REMOTE_ROOT/.autodl-remote/tmp/$name.runner.sh" + upload_stdin_to_remote "$runner" < $(shell_quote "$status_path") +cd $(shell_quote "$cwd") && bash -lc $(shell_quote "$cmd") > $(shell_quote "$log") 2>&1 +rc=\$? +finished_at=\$(date +%Y-%m-%dT%H:%M:%S%z) +printf 'status=exited\npid=%s\nstarted_at=%s\nfinished_at=%s\nexit_code=%s\nlog=%s\ncwd=%s\n' "\$pid" "\$started_at" "\$finished_at" "\$rc" $(shell_quote "$log") $(shell_quote "$cwd") > $(shell_quote "$status_path") +exit "\$rc" +EOF + remote_cmd="mkdir -p $(shell_quote "$(dirname "$log")") $(shell_quote "$(dirname "$status_path")") && chmod +x $(shell_quote "$runner") && if command -v setsid >/dev/null 2>&1; then setsid bash $(shell_quote "$runner") < /dev/null > /dev/null 2>&1 & else nohup bash $(shell_quote "$runner") < /dev/null > /dev/null 2>&1 & fi; printf 'pid=%s\nlog=%s\nstatus=%s\n' \"\$!\" $(shell_quote "$log") $(shell_quote "$status_path")" result="$(ssh_capture "bash -lc $(shell_quote "$remote_cmd")" 2>&1)" detach_rc=$? printf '%s\n' "$result" [ "$detach_rc" -eq 0 ] || return "$detach_rc" pid="$(printf '%s\n' "$result" | awk -F= '$1=="pid"{print $2; exit}')" [ -n "$pid" ] || die "Remote detach did not return a pid." - write_job "$name" "$pid" "$log" "$status_path" "$cwd" "$cmd" + write_job "$name" "$pid" "$log" "$status_path" "$cwd" "$cmd" "$model" "$tags" "$purpose" "$stage" "$outputs" write_history exec-detach "$cmd log=$log" else local inner rc @@ -859,15 +1046,18 @@ cmd_exec() { cmd_put() { load_project - local dry_run=false delete=false + local dry_run=false delete=false account_override="" remote_override="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --dry-run) dry_run=true; shift ;; --delete) delete=true; shift ;; --) shift; break ;; *) break ;; esac done + apply_context_override "$account_override" "$remote_override" [ $# -ge 1 ] || die "put requires [remote-path]" local local_arg="$1" remote_arg="${2:-}" local_path remote_path local_path="$(local_join "$local_arg")" @@ -900,14 +1090,17 @@ cmd_put() { cmd_get() { load_project - local dry_run=false + local dry_run=false account_override="" remote_override="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --dry-run) dry_run=true; shift ;; --) shift; break ;; *) break ;; esac done + apply_context_override "$account_override" "$remote_override" [ $# -ge 1 ] || die "get requires [local-path]" local remote_arg="$1" local_arg="${2:-}" remote_path local_path kind remote_path="$(remote_join "$remote_arg")" @@ -944,9 +1137,11 @@ cmd_get() { cmd_tree() { load_project - local path="." depth=3 limit=500 + local path="." depth=3 limit=500 account_override="" remote_override="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --depth) depth="$2"; shift 2 ;; --limit) limit="$2"; shift 2 ;; --) shift; break ;; @@ -954,6 +1149,7 @@ cmd_tree() { *) path="$1"; shift ;; esac done + apply_context_override "$account_override" "$remote_override" local remote_path remote_path="$(remote_join "$path")" ssh_capture "cd $(shell_quote "$remote_path") && { find . -maxdepth $depth | sed 's#^./##' | sort | head -n $limit; true; }" @@ -961,36 +1157,52 @@ cmd_tree() { cmd_ls() { load_project - [ "${1:-}" = "--" ] && shift + local account_override="" remote_override="" + while [ $# -gt 0 ]; do + case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; + --) shift; break ;; + -*) die "unknown ls option: $1" ;; + *) break ;; + esac + done + apply_context_override "$account_override" "$remote_override" local path="${1:-.}" ssh_run "ls -lah $(shell_quote "$(remote_join "$path")")" } cmd_cat() { load_project - local lines=200 + local lines=200 account_override="" remote_override="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --lines) lines="$2"; shift 2 ;; --) shift; break ;; *) break ;; esac done + apply_context_override "$account_override" "$remote_override" [ $# -gt 0 ] || die "cat requires a path" ssh_run "sed -n '1,${lines}p' $(shell_quote "$(remote_join "$1")")" } cmd_tail() { load_project - local lines=120 follow=false + local lines=120 follow=false account_override="" remote_override="" while [ $# -gt 0 ]; do case "$1" in + --account) account_override="$2"; shift 2 ;; + --remote) remote_override="$2"; shift 2 ;; --lines) lines="$2"; shift 2 ;; --follow|-f) follow=true; shift ;; --) shift; break ;; *) break ;; esac done + apply_context_override "$account_override" "$remote_override" [ $# -gt 0 ] || die "tail requires a path" local flag="" [ "$follow" = "true" ] && flag="-f" @@ -1031,8 +1243,11 @@ cmd_job_status() { cwd="$(job_get "$file" CWD)" command="$(job_get "$file" COMMAND)" [ -n "$pid" ] || die "Job has no recorded pid: $name" + apply_job_context "$file" info "name=$name" + info "account=$ACCOUNT_NAME" + info "remote_root=$REMOTE_ROOT" info "pid=$pid" info "cwd=$cwd" info "log=$log" @@ -1066,6 +1281,7 @@ cmd_job_tail() { file="$(job_path "$name")" [ -f "$file" ] || die "Job not found: $name" log="$(job_get "$file" LOG_PATH)" + apply_job_context "$file" [ "$follow" = "true" ] && flag="-f" ssh_run "tail -n $lines $flag $(shell_quote "$log")" } @@ -1082,6 +1298,409 @@ cmd_job() { esac } +cmd_run_list() { + load_project + local dir file name account remote model stage tags started status seen=false + dir="$(jobs_dir)" + mkdir -p "$dir" + if ls "$dir"/*.conf >/dev/null 2>&1; then + printf '%-24s %-14s %-12s %-12s %-16s %-20s %s\n' "run" "account" "status" "model" "stage" "started_at" "tags" + for file in "$dir"/*.conf; do + seen=true + name="$(job_get "$file" NAME)" + account="$(job_get "$file" ACCOUNT)" + remote="$(job_get "$file" REMOTE_ROOT)" + model="$(job_get "$file" MODEL)" + stage="$(job_get "$file" STAGE)" + tags="$(job_get "$file" TAGS)" + started="$(job_get "$file" STARTED_AT)" + [ -n "$account" ] || account="${PROJECT_BOUND_ACCOUNT:-$PROJECT_ACCOUNT}" + [ -n "$remote" ] || remote="${PROJECT_BOUND_REMOTE_ROOT:-$REMOTE_ROOT}" + status="$(job_remote_status_summary "$file")" + printf '%-24s %-14s %-12s %-12s %-16s %-20s %s\n' "$name" "$account" "$status" "${model:--}" "${stage:--}" "$started" "${tags:--}" + done + fi + [ "$seen" = "true" ] || info "No runs recorded." +} + +cmd_run_note() { + load_project + [ $# -gt 0 ] || die "run note requires a run name" + local name file model="" tags="" purpose="" stage="" outputs="" + name="$(sanitize_name "$1")" + shift + file="$(job_path "$name")" + [ -f "$file" ] || die "Run not found: $name" + while [ $# -gt 0 ]; do + case "$1" in + --model) model="$2"; shift 2 ;; + --tag) tags="$(append_csv "$tags" "$2")"; shift 2 ;; + --purpose) purpose="$2"; shift 2 ;; + --stage) stage="$2"; shift 2 ;; + --output) outputs="$(append_csv "$outputs" "$2")"; shift 2 ;; + *) die "unknown run note option: $1" ;; + esac + done + [ -z "$model" ] || config_set_in_file "$file" MODEL "$model" + if [ -n "$tags" ]; then + local existing_tags + existing_tags="$(job_get "$file" TAGS)" + [ -n "$existing_tags" ] && tags="$(append_csv "$existing_tags" "$tags")" + config_set_in_file "$file" TAGS "$tags" + fi + [ -z "$purpose" ] || config_set_in_file "$file" PURPOSE "$purpose" + [ -z "$stage" ] || config_set_in_file "$file" STAGE "$stage" + if [ -n "$outputs" ]; then + local existing_outputs + existing_outputs="$(job_get "$file" OUTPUTS)" + [ -n "$existing_outputs" ] && outputs="$(append_csv "$existing_outputs" "$outputs")" + config_set_in_file "$file" OUTPUTS "$outputs" + fi + info "Updated run: $name" +} + +cmd_run_submit() { + local args=(--detach) uploads=() account_override="" remote_override="" + while [ $# -gt 0 ]; do + case "$1" in + --account) account_override="$2"; args+=("$1" "$2"); shift 2 ;; + --remote) remote_override="$2"; args+=("$1" "$2"); shift 2 ;; + --sync-up) uploads+=("$2"); shift 2 ;; + --) shift; break ;; + *) args+=("$1"); shift ;; + esac + done + [ $# -gt 0 ] || die "run submit requires a command after --" + local path + for path in "${uploads[@]}"; do + local put_args=() + [ -z "$account_override" ] || put_args+=(--account "$account_override") + [ -z "$remote_override" ] || put_args+=(--remote "$remote_override") + cmd_put "${put_args[@]}" "$path" + done + cmd_exec "${args[@]}" -- "$@" +} + +cmd_run() { + [ $# -gt 0 ] || die "run requires a subcommand" + local sub="$1" + shift + case "$sub" in + submit) cmd_run_submit "$@" ;; + list|ls) cmd_run_list "$@" ;; + status) cmd_job_status "$@" ;; + tail) cmd_job_tail "$@" ;; + note) cmd_run_note "$@" ;; + *) die "unknown run command: $sub" ;; + esac +} + +cmd_fleet_create() { + load_project + [ $# -gt 0 ] || die "fleet create requires a name" + local name dir + name="$1" + valid_name "$name" || die "Invalid fleet name: $name" + dir="$(fleet_dir "$name")" + mkdir -p "$dir" + info "Created fleet: $name" +} + +cmd_fleet_add() { + load_project + [ $# -ge 2 ] || die "fleet add requires " + local fleet="$1" device="$2" account="$PROJECT_ACCOUNT" remote="$REMOTE_ROOT" tags="" file + shift 2 + while [ $# -gt 0 ]; do + case "$1" in + --account) account="$2"; shift 2 ;; + --remote) remote="$2"; shift 2 ;; + --tags) tags="$2"; shift 2 ;; + *) die "unknown fleet add option: $1" ;; + esac + done + load_account "$account" + [ -n "$remote" ] || remote="$ACCOUNT_DEFAULT_REMOTE" + [ -n "$remote" ] || die "fleet add requires --remote or an account default remote." + remote="${remote%/}" + validate_remote_root "$remote" + mkdir -p "$(fleet_dir "$fleet")" + file="$(fleet_device_path "$fleet" "$device")" + cat > "$file" < $account:$remote to fleet $fleet" +} + +cmd_fleet_list() { + load_project + local root fleet_dir file fleet device account remote tags seen=false + root="$(fleet_root)" + mkdir -p "$root" + if [ -n "$(find "$root" -mindepth 2 -maxdepth 2 -name '*.conf' -print -quit 2>/dev/null)" ]; then + printf '%-16s %-18s %-14s %-34s %s\n' "fleet" "device" "account" "remote_root" "tags" + while IFS= read -r file; do + [ -n "$file" ] || continue + seen=true + fleet="$(device_get "$file" FLEET)" + device="$(device_get "$file" NAME)" + account="$(device_get "$file" ACCOUNT)" + remote="$(device_get "$file" REMOTE_ROOT)" + tags="$(device_get "$file" TAGS)" + printf '%-16s %-18s %-14s %-34s %s\n' "$fleet" "$device" "$account" "$remote" "${tags:--}" + done </dev/null 2>&1; then + for file in "$dir"/*.conf; do + job_account="$(job_get "$file" ACCOUNT)" + job_remote="$(job_get "$file" REMOTE_ROOT)" + [ -n "$job_account" ] || job_account="${PROJECT_BOUND_ACCOUNT:-$PROJECT_ACCOUNT}" + [ -n "$job_remote" ] || job_remote="${PROJECT_BOUND_REMOTE_ROOT:-$REMOTE_ROOT}" + [ "$job_account" = "$account" ] || continue + [ "$job_remote" = "$remote" ] || continue + started="$(job_get "$file" STARTED_AT)" + name="$(job_get "$file" NAME)" + if [ -z "$latest_started" ] || [ "$started" \> "$latest_started" ]; then + latest_started="$started" + latest_name="$name" + fi + done + fi + printf '%s\n' "${latest_name:--}" +} + +print_device_status() { + local device="$1" account="$2" remote="$3" tags="$4" probe online host gpu disk current + load_account "$account" + REMOTE_ROOT="${remote%/}" + validate_remote_root "$REMOTE_ROOT" + probe="$(remote_probe)" + online="$(kv_get "$probe" online)" + host="$(kv_get "$probe" host)" + gpu="$(kv_get "$probe" gpu)" + disk="$(kv_get "$probe" disk)" + current="$(latest_run_for_device "$account" "$REMOTE_ROOT")" + printf '%-18s %-8s %-14s %-28s %-22s %-18s %s\n' "$device" "${online:-no}" "$account" "${gpu:--}" "${disk:--}" "$current" "${tags:--}" + [ "${online:-no}" = "yes" ] || printf ' error: %s\n' "$(kv_get "$probe" error)" + [ -n "$host" ] && printf ' host: %s remote: %s\n' "$host" "$REMOTE_ROOT" +} + +cmd_fleet_status() { + load_project + local fleet="" file device account remote tags + [ $# -gt 0 ] && fleet="$1" + printf '%-18s %-8s %-14s %-28s %-22s %-18s %s\n' "device" "online" "account" "gpu" "disk" "current_run" "tags" + if [ -z "$fleet" ]; then + print_device_status "current" "$PROJECT_ACCOUNT" "$REMOTE_ROOT" "project" + return 0 + fi + [ -d "$(fleet_dir "$fleet")" ] || die "Fleet not found: $fleet" + for file in "$(fleet_dir "$fleet")"/*.conf; do + [ -f "$file" ] || continue + device="$(device_get "$file" NAME)" + account="$(device_get "$file" ACCOUNT)" + remote="$(device_get "$file" REMOTE_ROOT)" + tags="$(device_get "$file" TAGS)" + print_device_status "$device" "$account" "$remote" "$tags" + done +} + +cmd_fleet() { + [ $# -gt 0 ] || die "fleet requires a subcommand" + local sub="$1" + shift + case "$sub" in + create) cmd_fleet_create "$@" ;; + add) cmd_fleet_add "$@" ;; + list|ls) cmd_fleet_list "$@" ;; + status) cmd_fleet_status "$@" ;; + *) die "unknown fleet command: $sub" ;; + esac +} + +dashboard_device_row() { + local device="$1" account="$2" remote="$3" tags="$4" probe online gpu disk current esc + load_account "$account" + REMOTE_ROOT="${remote%/}" + validate_remote_root "$REMOTE_ROOT" + probe="$(remote_probe)" + online="$(kv_get "$probe" online)" + gpu="$(kv_get "$probe" gpu)" + disk="$(kv_get "$probe" disk)" + current="$(latest_run_for_device "$account" "$REMOTE_ROOT")" + printf '%s%s%s%s%s%s%s\n' \ + "$(html_escape "$device")" \ + "$([ "${online:-no}" = "yes" ] && printf online || printf offline)" \ + "$(html_escape "${online:-no}")" \ + "$(html_escape "$account")" \ + "$(html_escape "${gpu:--}")" \ + "$(html_escape "${disk:--}")" \ + "$(html_escape "$current")" \ + "$(html_escape "${tags:--}")" +} + +remote_log_tail() { + local account="$1" remote="$2" log="$3" lines="$4" output rc + [ -n "$log" ] || { printf '[log missing]\n'; return 0; } + load_account "$account" + REMOTE_ROOT="${remote%/}" + validate_remote_root "$REMOTE_ROOT" + output="$(ssh_capture "if [ -f $(shell_quote "$log") ]; then tail -n $lines $(shell_quote "$log"); else printf '[log missing] %s\n' $(shell_quote "$log"); fi" 2>&1)" + rc=$? + if [ "$rc" -eq 0 ]; then + printf '%s\n' "$output" + else + printf '[log unavailable]\n%s\n' "$output" + fi +} + +dashboard_run_rows() { + local scope_fleet="$1" lines="$2" dir file name account remote model stage tags started status log purpose include log_tail + dir="$(jobs_dir)" + if ls "$dir"/*.conf >/dev/null 2>&1; then + for file in "$dir"/*.conf; do + name="$(job_get "$file" NAME)" + account="$(job_get "$file" ACCOUNT)" + remote="$(job_get "$file" REMOTE_ROOT)" + model="$(job_get "$file" MODEL)" + stage="$(job_get "$file" STAGE)" + tags="$(job_get "$file" TAGS)" + started="$(job_get "$file" STARTED_AT)" + log="$(job_get "$file" LOG_PATH)" + purpose="$(job_get "$file" PURPOSE)" + [ -n "$account" ] || account="${PROJECT_BOUND_ACCOUNT:-$PROJECT_ACCOUNT}" + [ -n "$remote" ] || remote="${PROJECT_BOUND_REMOTE_ROOT:-$REMOTE_ROOT}" + include=true + if [ -z "$scope_fleet" ]; then + if [ "$account" != "${PROJECT_BOUND_ACCOUNT:-$PROJECT_ACCOUNT}" ] || [ "$remote" != "${PROJECT_BOUND_REMOTE_ROOT:-$REMOTE_ROOT}" ]; then + include=false + fi + else + include=false + local fleet_file fleet_account fleet_remote + for fleet_file in "$(fleet_dir "$scope_fleet")"/*.conf; do + [ -f "$fleet_file" ] || continue + fleet_account="$(device_get "$fleet_file" ACCOUNT)" + fleet_remote="$(device_get "$fleet_file" REMOTE_ROOT)" + if [ "$fleet_account" = "$account" ] && [ "$fleet_remote" = "$remote" ]; then + include=true + break + fi + done + fi + [ "$include" = "true" ] || continue + status="$(job_remote_status_summary "$file")" + printf '%s%s%s%s%s%s%s%s

%s
\n' \ + "$(html_escape "$name")" "$(html_escape "$account")" "$(html_escape "$status")" \ + "$(html_escape "${model:--}")" "$(html_escape "${stage:--}")" "$(html_escape "$started")" \ + "$(html_escape "${tags:--}")" "$(html_escape "$log")" "$(html_escape "$purpose")" + if [ "$lines" -gt 0 ]; then + log_tail="$(remote_log_tail "$account" "$remote" "$log" "$lines")" + printf '
%s · last %s lines
%s
\n' \ + "$(html_escape "$name")" "$(html_escape "$lines")" "$(html_escape "$log_tail")" + fi + done + fi +} + +render_dashboard() { + local fleet="$1" output="$2" lines="$3" refresh_seconds="${4:-}" generated_at title + mkdir -p "$(dirname "$output")" + generated_at="$(date +%Y-%m-%dT%H:%M:%S%z)" + if [ -n "$fleet" ]; then + [ -d "$(fleet_dir "$fleet")" ] || die "Fleet not found: $fleet" + title="Fleet $fleet" + else + title="Current Remote" + fi + { + printf 'AutoDL Remote Dashboard' + if [ -n "$refresh_seconds" ]; then + printf '' "$(html_escape "$refresh_seconds")" + fi + printf '' + printf '

AutoDL Remote Dashboard

%s · generated %s · project %s' "$(html_escape "$title")" "$(html_escape "$generated_at")" "$(html_escape "$PROJECT_ROOT")" + if [ -n "$refresh_seconds" ]; then + printf ' · refresh every %ss' "$(html_escape "$refresh_seconds")" + fi + printf '
' + printf '

Devices

' + if [ -n "$fleet" ]; then + local device_file device account remote tags + for device_file in "$(fleet_dir "$fleet")"/*.conf; do + [ -f "$device_file" ] || continue + device="$(device_get "$device_file" NAME)" + account="$(device_get "$device_file" ACCOUNT)" + remote="$(device_get "$device_file" REMOTE_ROOT)" + tags="$(device_get "$device_file" TAGS)" + dashboard_device_row "$device" "$account" "$remote" "$tags" + done + else + dashboard_device_row "current" "$PROJECT_ACCOUNT" "$REMOTE_ROOT" "project" + fi + printf '
DeviceOnlineAccountGPUDiskCurrent RunTags
' + printf '

Runs

' + dashboard_run_rows "$fleet" "$lines" + printf '
RunAccountStatusModelStageStartedTagsLog / Notes
' + printf '\n' + } > "$output" +} + +cmd_dashboard() { + load_project + local fleet="" output="" open_file=false watch_seconds="" lines=120 opened=false + while [ $# -gt 0 ]; do + case "$1" in + --fleet) fleet="$2"; shift 2 ;; + --output) output="$2"; shift 2 ;; + --open) open_file=true; shift ;; + --watch) watch_seconds="$2"; shift 2 ;; + --lines) lines="$2"; shift 2 ;; + *) die "unknown dashboard option: $1" ;; + esac + done + case "$lines" in + ""|*[!0-9]*) die "--lines must be a non-negative integer" ;; + esac + if [ -n "$watch_seconds" ]; then + case "$watch_seconds" in + ""|0|*[!0-9]*) die "--watch must be a positive integer number of seconds" ;; + esac + fi + [ -z "$output" ] && output="$PROJECT_ROOT/$HISTORY_DIR/dashboard.html" + if [ -n "$watch_seconds" ]; then + while :; do + render_dashboard "$fleet" "$output" "$lines" "$watch_seconds" + info "Dashboard written: $output" + if [ "$open_file" = "true" ] && [ "$opened" = "false" ]; then + command -v open >/dev/null 2>&1 && open "$output" || info "open command not available." + opened=true + fi + sleep "$watch_seconds" + done + fi + render_dashboard "$fleet" "$output" "$lines" + info "Dashboard written: $output" + if [ "$open_file" = "true" ]; then + command -v open >/dev/null 2>&1 && open "$output" || info "open command not available." + fi +} + cmd_shutdown() { load_project local wait_seconds=8 output rc @@ -1176,10 +1795,13 @@ main() { shift case "$cmd" in -h|--help|help) usage ;; + -V|--version|version) cmd_version ;; account) cmd_account "$@" ;; bind) cmd_bind "$@" ;; doctor) cmd_doctor "$@" ;; model-dir) cmd_model_dir "$@" ;; + fleet) cmd_fleet "$@" ;; + dashboard) cmd_dashboard "$@" ;; exec) cmd_exec "$@" ;; put-run) cmd_put_run "$@" ;; put|sync-up) cmd_put "$@" ;; @@ -1189,6 +1811,7 @@ main() { cat) cmd_cat "$@" ;; tail) cmd_tail "$@" ;; job) cmd_job "$@" ;; + run) cmd_run "$@" ;; shutdown) cmd_shutdown "$@" ;; shell) cmd_shell "$@" ;; history) cmd_history "$@" ;; diff --git a/plugins/autodl-remote/skills/autodl-remote/SKILL.md b/plugins/autodl-remote/skills/autodl-remote/SKILL.md index 94b0eac..7baa1b0 100644 --- a/plugins/autodl-remote/skills/autodl-remote/SKILL.md +++ b/plugins/autodl-remote/skills/autodl-remote/SKILL.md @@ -10,16 +10,24 @@ Use this skill when the user wants Codex to work locally while controlling AutoD ## Operating Model - The plugin is a thin SSH tool layer. +- For AutoDL or remote SSH work, first verify the tool with `autodl-remote --version`, then use `autodl-remote` as the default gateway for remote commands and file transfer. +- Do not hand-write raw `ssh`, `expect`, `scp`, or `rsync` workflows for AutoDL work unless `autodl-remote` is unavailable, the command fails after a reasonable retry, or the user explicitly asks to bypass the plugin. +- If bypassing `autodl-remote`, state the concrete reason before doing so and avoid printing passwords or embedding credentials in shell history/logs. +- For complex remote checks or multi-line scripts, use `autodl-remote exec --script` or `autodl-remote exec --stdin -- bash`; do not pack nested Python heredocs or long quoted scripts into a raw SSH command. - Do not decide that local or remote is the source of truth globally. - Do not use `local-main`, `remote-main`, manifests, sparse-cache modes, or automatic code ownership rules. - Codex decides the smallest useful action each time: inspect, upload, download, run, or tail logs. - Do not download LLM weights, checkpoints, datasets, or large outputs unless the user explicitly asks. - Prefer reading remote files/logs in place with `cat`, `tail`, `ls`, and `tree`. - Use detached job commands for long training runs instead of manually guessing process state. +- Use run metadata (`--model`, `--tag`, `--stage`, `--purpose`) when launching experiments so `run list` and the dashboard explain what is running. +- Use `fleet` for multi-device projects and `dashboard` for display-only visibility. The dashboard must not be treated as an operation surface. +- When the user wants to watch progress, run `autodl-remote dashboard --watch --lines --open` instead of copying logs into chat. - Use `shutdown` when the user asks to stop the remote machine; treat SSH disconnect during shutdown as likely success. - Before using AutoDL Remote in a project, read `.autodl-remote/CONVENTIONS.md` if it exists. Treat it as the project-specific source for runtime, paths, sync rules, and notes. - When the user and Codex discuss or decide any project-specific remote configuration, runtime environment, path convention, model/data/output location, sync preference, or safety rule, update `.autodl-remote/CONVENTIONS.md` so future sessions can reuse it. - Keep `.autodl-remote/CONVENTIONS.md` concise and project-specific; do not turn it into a generic manual. +- When writing remote run scripts, emit clear stdout logs because dashboard content comes from the remote log, not from Codex narration. Prefer markers such as `[START]`, `[ENV]`, `[PROGRESS]`, `[METRIC]`, `[OUTPUT]`, `[DONE]`, and `[ERROR]`. For Python, prefer `PYTHONUNBUFFERED=1 python -u ...`. ## Setup @@ -57,12 +65,21 @@ autodl-remote sync-down logs/train.log ./logs/train.log autodl-remote exec -- pwd autodl-remote exec -- python train.py -autodl-remote exec --detach --name train -- python train.py +autodl-remote exec --detach --name train --model baseline --stage training -- python train.py autodl-remote exec --script scripts/remote_check.sh cat scripts/remote_check.sh | autodl-remote exec --stdin -- bash autodl-remote job list autodl-remote job status train autodl-remote job tail train +autodl-remote run list +autodl-remote run note train --stage evaluating +autodl-remote fleet create rag-exp +autodl-remote fleet add rag-exp nmb1 --account autodl-nmb1 --remote /root/autodl-tmp/LLM-RAG --tags a800,rag +autodl-remote fleet status rag-exp +autodl-remote tree --account autodl-nmb1 --remote /root/autodl-tmp/LLM-RAG . --depth 2 +autodl-remote dashboard +autodl-remote dashboard --fleet rag-exp --open +autodl-remote dashboard --fleet rag-exp --open --watch 5 --lines 120 autodl-remote shutdown ``` @@ -74,6 +91,11 @@ autodl-remote shutdown - If both local and remote have similar files, do not assume one should overwrite the other. Compare or inspect first, then choose `put` or `get`. - Use `exec --detach` for long training jobs and then `tail` the log path. - Prefer `job status ` and `job tail ` for detached jobs created with `--name`. +- Prefer `run list`, `run status`, `run tail`, and `run note` when the user is thinking in terms of experiments/models rather than raw jobs. +- For multiple machines, use `fleet add/list/status` and `dashboard --fleet ` instead of manually tracking devices in chat. +- When inspecting a non-default fleet device, pass `--account` and `--remote` to `tree`, `ls`, `cat`, `tail`, `put`, `get`, and `exec` instead of rebinding the project. +- The dashboard is read-only and can be used for one device or many devices. Do not add operational assumptions just because the dashboard exists. +- Dashboard logs are pulled from remote run log files. Add useful stdout logging to scripts instead of expecting Codex to summarize progress in chat. - Prefer `exec --script` or `exec --stdin` for complex multi-line commands, Python heredocs, env vars, JSON, awk, or sed. - Use `put-run` when the workflow is "upload these local paths, then immediately run this remote command". - `model-dir` prints the project model directory convention. The first project command creates `.autodl-remote/CONVENTIONS.md` locally for concise project notes.