Skip to main content

orbit

Run experiments (training, evaluation, sweeps, any GPU job) in isolated Docker containers with Orbit, and read back their logs, metrics and outputs. Use whenever you would otherwise run a long or GPU job directly on the host, launch several seeds or hyperparameter settings, or need to check, compare or explain earlier experiment runs.

소스 정보

저장소
zjunlp/Orbit
최근 소스 활동
2026년 10월 8일 13:53
감지된 SKILL.md 언어
영어
스타
8
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
orbit
description
Run experiments (training, evaluation, sweeps, any GPU job) in isolated Docker containers with Orbit, and read back their logs, metrics and outputs. Use whenever you would otherwise run a long or GPU job directly on the host, launch several seeds or hyperparameter settings, or need to check, compare or explain earlier experiment runs.
# Orbit: run and record experiments Orbit runs your command in a Docker container on a snapshot of the current git repository, under a GPU/CPU/memory lease, and keeps logs, metrics, outputs, the code diff and a link to this session. You keep planning, editing and analysing; Orbit only executes and records. The human reviews the runs in the Web UI (`orbit web`). Use `orbit` instead of running experiments directly on the host, `nohup`, `tmux` or `docker run`. Short checks (imports, a unit test, `--help`) can still run on the host. ## CLI availability Use `orbit` when it is on PATH. Otherwise replace `orbit` in the commands below with `npx -y @zjunlp/orbit` (requires Node.js 24.18+ in the 24.x line). No clone, build or global install is needed. Run `doctor` before the first experiment and address any failed prerequisites. ## 1. Estimate resources before submitting Pick the smallest request that fits; runs that cannot get resources **wait in the queue**, they do not fail. | Flag | How to estimate | | --- | --- | | `--gpus N` | 0 for CPU-only work. 1 unless the code actually uses multiple GPUs (DDP, `device_map`, tensor parallel). | | `--gpu-mem GB` | Minimum memory per GPU. Rough guide: fp16/bf16 inference ≈ 2 × params(B) GB + activations; full fine-tuning with Adam ≈ 16–20 × params(B) GB unless sharded/LoRA. | | `--cpus N` | Data loader workers + 1–2. Default 4. | | `--mem GB` | Host RAM: dataset held in memory + model loading peak (≈ weights size) + headroom. Default 16. | | `--timeout MIN` | Set one for anything that could hang. | Run `orbit resources` first to see free GPUs, their memory, active leases and the queue, on this machine and on any worker nodes. State the estimate and its reasoning briefly to the user. Every finished run records its measured peak memory, CPU and GPU memory (`usage` in `orbit show`): size the next run of the same job from it instead of guessing again. A run killed for memory says `out of memory` — raise `--mem` rather than changing the code. With worker nodes (`orbit node ls`), Orbit places each run on any node that fits: do not pick a node yourself unless the user asks (`--node <name>`). Runs that mount a host path (`-m`) stay on this machine; use `-d <dataset>` for data that should be usable on every node. Logs, metrics and `orbit show` work the same for remote runs; `orbit show` names the node. ## 2. Submit ```bash # one run; the repository at the current directory is snapshotted into /workspace orbit run --image pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime --gpus 1 --mem 32 \ -n baseline -- python train.py --lr 3e-4 # a sweep: one run per combination; {key} is substituted in the command orbit sweep --image python:3.12-slim --gpus 1 -g lr-sweep \ -p lr=1e-4,3e-4 -p seed=1,2,3 -- python train.py --lr {lr} --seed {seed} ``` - Put all options **before** `--`; everything after `--` is the command inside the container. - Add `--json` (before `--`) to get machine-readable output with run ids. - `--dockerfile path/Dockerfile` builds a project image instead of `--image` (cached by content). - Uncommitted changes and untracked files are included in the snapshot, so you do not need to commit first. Large data and weights are not copied: prefer a registered dataset, `-d <name>` (mounted read-only at `/data/<name>`; see `orbit data ls`), or mount a host path with `-m /host/path:/data` (read-only; add `:rw` only if needed). - `-e KEY=VALUE` for non-secret environment variables, `--pass-env VAR` for secrets; `--no-network` for offline runs; `-t key=value` for tags. - Every `run`/`sweep` is checked first (data, output disk, image, where it would start); warnings and failures are printed. `--check` only prints the checks. For a long or expensive run, add `--smoke '<short command>'` (e.g. `--smoke 'python train.py --steps 20'`): it runs first with the same settings, and the real run is submitted only if it succeeds. - Use `-g <group>` for runs that belong together (sweeps, ablations) so they can be compared. - Name every run and job for the human who reviews them: `-n` short and specific (`baseline`, `lr 3e-4 warmup`, `noskills xhigh random8`), groups as the question they answer (`lr-sweep`). No timestamps, ids or full paths in names: Orbit shows times and ids itself. Without `-n`, Orbit derives a name from the command (`train.py lr=3e-4`), which says what ran but not why. ## 3. Inside the container | Path / variable | Use | | --- | --- | | `/workspace` | Code snapshot (writable copy; the host repo is not affected). Working directory. | | `$ORBIT_METRICS` | Append one JSON object per line, e.g. `{"step": 100, "train/loss": 0.31, "eval/acc": 0.82}`. Use `step`; group keys with `/`. These become the curves in the Web UI. | | `$ORBIT_OUTPUT` | Write results, predictions, plots and small checkpoints here. Kept after the run. | | `$ORBIT_RUN_ID` | The run id. | Print progress to stdout/stderr with `flush=True`; logs are kept in full, including for failed runs. When the code you are writing has no metrics logging, add a few lines that write to `$ORBIT_METRICS` if the variable is set. ## 4. Follow, wait and inspect ```bash orbit ps # active runs (queued with the reason, running) orbit ps -a -g lr-sweep # everything in a group orbit ps -f rcb # everything in folder rcb (and its subfolders) orbit mv <id...> rcb/noskills # file runs or bench jobs in a folder (files stay where they are) orbit wait <id>... | -g lr-sweep # blocks; exit code 1 if any run did not succeed orbit logs <id> --tail 4000 # end of the log; -f to follow orbit show <id> # state, exit code, resources and measured usage, code snapshot, metrics orbit cancel <id>... ``` Prefer `orbit wait` over polling. For long runs, you can continue other work and check back. When a run fails, read `orbit logs <id> --tail 8000` before changing anything; the evidence is kept. ## 5. Run an agent inside a container When the experiment itself needs Codex or Claude Code (agent benchmarks, agent-driven data work), use a profile the human has set up; never pass keys yourself. ```bash orbit auth list # names, agent, kind; secrets are never shown orbit auth test <profile> # small real run: checks that the agent answers orbit run --image python:3.12-slim --auth <profile> -n agent-try -- \ codex exec --skip-git-repo-check --dangerously-bypass-approvals-and-sandbox "task…" orbit run --image python:3.12-slim --auth <profile> -- claude -p --dangerously-skip-permissions "task…" ``` The host's CLI is mounted read-only and put on `PATH`; the container is the sandbox. If no profile fits, ask the human to add one (`orbit auth add`). Completion and failure notifications are sent to the targets in `orbit notify list`; a group sends one summary when its last run ends. ## 6. Benchmarks To evaluate a method on a registered benchmark, use `orbit bench`, not hand-written loops of runs: ```bash orbit bench ls && orbit bench tasks <benchmark> # unsupported tasks show the reason orbit bench run <benchmark> -t <task> -m oracle -m empty -m mine=codex,auth=<profile>,model=<m> -n try orbit bench show <job> # per-method means, matrix, issues orbit bench compare <job> <job>... # all-valid and paired means orbit bench usage <job>... # measured peaks per task, suggestions orbit bench rescore <job> [-t <task>] [-m <method>] # verify + score again, no Agent rerun ``` Each trial is a solve run plus a separate verify run. Only `valid` trials count; read the issues of `invalid` ones (environment or scorer failures, unusable model) instead of treating them as zeros. Run `oracle` and `empty` first on a new benchmark or task set: oracle should score full, empty zero. After a scorer or grader fix, `orbit bench rescore` re-verifies the saved solve outputs; the earlier scores stay in each trial's history, the summary uses the latest. To add a benchmark Orbit does not know (write an adapter, a resources file) or to size its tasks from measured runs (`orbit bench usage`), use the `orbit-bench` skill. ## 7. Record conclusions After analysing a run or a group, attach a short note so the human sees it next to the results: ```bash orbit note <id> "lr=3e-4 converges ~2x faster than 1e-4; seed std 0.01. Next: try warmup." ``` Tell the user the run ids and `orbit web <id>` for review. Deleting runs (`orbit rm <id>... | -g <group>`) or a bench job (`orbit bench rm-job <job>`) removes their logs, outputs and sessions for good. Do it only when the user asks for those runs to be deleted; the command asks the user to type the id or group, and `--yes` skips that only when the user has explicitly confirmed this deletion. ## Rules - Do not start experiment containers with `docker` directly, and do not stop containers or processes that Orbit or other users own; use `orbit cancel`. - Do not request all GPUs "just in case". Do not work around the queue. - Never put secrets in commands, tags or notes; pass them by name with `--pass-env VAR` (read from the daemon environment, never stored); `-e` values are stored with the run.
GitHub에서 보기