Installation¶
The runtime model¶
dockyard_rl does not use uv or virtualenvs at runtime. Every runtime
dependency — PyTorch, vLLM, JAX, transformers, the task executor’s toolchain —
is baked into the ubuntu-swe container image’s system Python. Ray actors
and runtime_env use sys.executable directly, and RAY_ENABLE_UV_RUN_RUNTIME_ENV=0
disables Ray’s implicit uv integration.
This is a deliberate constraint: a Ray runtime_env={"pip": ...} would
re-create a per-actor virtualenv at runtime, which is exactly what the image is
meant to eliminate. Light, fast-changing dependencies belong in a thin image
layer, not in a runtime pip install.
uv is used at build time (uv.lock + uv pip install --system) to
resolve and install into the image’s system Python. Build-time uv is
encouraged; runtime uv is forbidden.
Building the ubuntu-swe image¶
The image is the unit of deployment for all three fleets. Its sources live in
ubuntu-base/:
Dockerfile |
Purpose |
|---|---|
|
Default image — CUDA base, PyTorch, vLLM, JAX, and the task executor. |
|
SGLang generation backend variant. |
|
GDPval file-producing environment variant. |
Build the default image:
cd ubuntu-base
docker build -f ubuntu-swe-v2.dockerfile -t ubuntu-swe:v2 .
The Dockerfile contains in-build import jax / import vllm smoke checks. A
build that fails there has a broken dependency graph — that gate is the primary
way to catch dependency breakage without a cluster.
Local development¶
For editing, type-checking, and the CPU parity tests you only need the package itself plus a CPU stack; the heavy GPU dependencies are not required to run the unit suite or the type checker.
# From the repository root.
pip install -e .
pyproject.toml pins only the lightweight local-dev/CI dependencies
(ray[default], numpy, tqdm). The rest come from the image.
Type checking¶
The canonical type-check runs pyright from the parent of the package
directory so imports resolve as dockyard_rl.*:
cd .. # parent of the dockyard_rl/ package directory
pyright dockyard_rl/...
Running the unit tests¶
The unit suite is CPU-only and skips anything that requires a GPU or a live cluster:
pytest tests/unit -q
GPU- and cluster-only behaviour is not silently skipped — it is tracked in
handoff/hardware-deferred-validation.md with the exact bring-up check for each
item, so validating on hardware later is “run the harness,” not “re-derive what
to test.”
Environment variables¶
All dockyard_rl environment variables use the DOCKYARD_ prefix.
Variable |
Meaning |
|---|---|
|
|
|
Comma-separated task-executor endpoints (alternative to setting |
|
Set to |
The full process environment is forwarded to every Ray worker, so image-level
settings (DOCKYARD_FLEET_ROLE, NCCL_SOCKET_IFNAME, CUDA_DEVICE_ORDER, …)
are visible inside remote actors without extra wiring.