JAM-20K-single: Franka-JAM task 4 and task 5
Two independent Franka-JAM adapters, each trained for 20,000 optimizer updates from the original Franka-JAM pretrained model. These are adapters, not merged full models. Load each one with the original base and its own configuration and normalization files.
| Folder | Task | Training / held-out demonstrations |
|---|---|---|
task_4 |
Pick up the bread and put it in the red bowl | 45 / 5 |
task_5 |
Pick up the green pepper and put it in the white bowl | 44 / 5 |
The dataset is 24jihoward/gello-franka-jam-demos, revision 83b5cbeec3e156494bd42fb9211789bde0bb7909. Task 5 has 50 source recordings; one incomplete training recording (session_098c666c, converted episode 000036.npz) was excluded after trajectory and video inspection. It contained no grasp or lift. Held-out recordings were not used to fit normalization bounds. Neither specialist starts from a five-task mixed adapter.
Both runs use seed 42, global batch 8, action-adapter learning rate 1e-5, and video-adapter learning rate 3e-6. Each has seen 160,000 sampled training windows, with repetition. Supervision uses the next achieved flange pose and the next binary gripper command. XYZ bounds are fitted to training data; rotation is represented by two unit rotation-matrix columns; aperture is 0 closed and 1 open. Each folder includes its exact normalization.
To meet the delivery deadline, task 4 resumed at update 2,456 and task 5 at update 1,840 with larger local microbatches, activation recomputation disabled, a combined gradient SUM, and fused AdamW. Optimizer moments, update counts, and per-rank random states were retained. Global batch, data, learning rates, loss, and FP32 adapter parameters were unchanged. Batch regrouping changes random-number consumption and floating-point accumulation order; this is not a bitwise continuation of the previous execution schedule. training_provenance.json records the migration. training_code/ contains the execution changes relative to the pinned repository commit.
The published final adapters passed finite-tensor and held-out inference checks, including the actual GELLO HTTP client, resident/reference parity, and grasp-transition windows. These are offline interface and prediction checks, not a measured physical task-success rate. Validation summaries are included with each adapter.
The earlier 15,000-update delivery remains available under early_release_15k/. That release is labeled separately and is not a 20K checkpoint. The task folders at this repository root contain the completed 20K release.
Release contents
Each task folder is a separate deployment bundle. Both final.safetensors files are the final 20,000-update checkpoint; an earlier validation-selected checkpoint is not substituted for either file.
| File | Purpose |
|---|---|
final.safetensors |
All 1,216 trained FP32 LoRA tensors, including the video and action adapters |
config.yaml |
Model configuration paired with this adapter |
normalization.json |
The task's state and action normalization bounds |
prompt.txt |
Exact task instruction used for inference |
identity.json |
Base, configuration, normalization, and data-manifest hashes |
training_provenance.json |
Original run, retained optimizer update count, and execution migration |
inference_validation.json |
Held-out prediction diagnostics and actual-client HTTP checks |
close_transition_validation.json |
Diagnostics around demonstrated gripper-closing events |
MANIFEST.json |
Final update count, dataset revision, demonstration counts, and file checksums |
The repository root also contains prepare_serving_root.py, the execution changes under training_code/, and SHA256SUMS.json. Raw demonstrations, private credentials, optimizer-resume files, and the separately distributed original base are not part of the deployment bundle.
Download
git clone --branch inference-gello-client https://github.com/lixuan27/JAM-realrobot.git /data/JAM-realrobot
git -C /data/JAM-realrobot checkout b2e77d77d9590798fb0856ee214e8255c32e7ce4
hf download Recharge23/JAM-20K-single --local-dir /data/JAM-20K-single
hf download JAM-realworld/JAM-realrobot Franka-JAM.safetensors \
--revision de03f461ca1d532e1c4aca10decf0e09e3f731cd --local-dir /data/jam-base
The original base repository requires an account with access. Its SHA256 must be bd6317317d5cd0f4f3e27bbc01a2e2388601638cdea1492312b333b5cff772fe. Install the model environment using the GitHub repository instructions.
Serve task 4
python /data/JAM-20K-single/prepare_serving_root.py \
--source /data/JAM-realrobot --task 4 --output /data/task4-serving
python /data/JAM-realrobot/tools/serve_resident.py --repo /data/task4-serving \
--prompts-file /data/JAM-20K-single/task_4/prompt.txt -- \
--checkpoint /data/jam-base/Franka-JAM.safetensors \
--adapter /data/JAM-20K-single/task_4/final.safetensors \
--profile franka --host 127.0.0.1 --port 8000
Serve task 5
python /data/JAM-20K-single/prepare_serving_root.py \
--source /data/JAM-realrobot --task 5 --output /data/task5-serving
python /data/JAM-realrobot/tools/serve_resident.py --repo /data/task5-serving \
--prompts-file /data/JAM-20K-single/task_5/prompt.txt -- \
--checkpoint /data/jam-base/Franka-JAM.safetensors \
--adapter /data/JAM-20K-single/task_5/final.safetensors \
--profile franka --host 127.0.0.1 --port 8001
Use a separate server process and the matching task folder when changing specialists. Do not reuse task 4's normalization for task 5. The helper checks configuration hashes and creates an isolated model runtime without changing the source checkout. The training optimizations do not need to be installed in the inference runtime.
GELLO client compatibility
Use tools/jam_gello_client.py from the pinned inference branch with the existing robot configuration and SSH tunnel. The interface expects external-camera RGB and unnormalized physical flange pose10. Native 640×480 RGB is padded with 16 black rows above and below to 640×512. Responses contain 32 absolute base-frame targets: flange XYZ, the first two rotation-matrix columns, and aperture. Task instructions are in the corresponding prompt.txt. This release does not change the client controller, gripper backend, calibration, execution timing, or workspace limits.
Do not normalize state or action values again in the client: the paired server applies the model's normalization and converts predictions back to physical targets. Rotation columns remain a bounded geometric representation; this release does not introduce a new statistical rotation-scaling contract. Keep the tested camera view, flange/tool-frame convention, and gripper-open convention consistent with the demonstrations.
Verify downloaded files
After downloading, verify every released file before serving:
python - <<'PY'
import hashlib
import json
from pathlib import Path
root = Path('/data/JAM-20K-single')
checksums = json.loads((root / 'SHA256SUMS.json').read_text())
for name, expected in checksums.items():
digest = hashlib.sha256()
with (root / name).open('rb') as stream:
for block in iter(lambda: stream.read(8 << 20), b''):
digest.update(block)
if digest.hexdigest() != expected:
raise ValueError('Checksum mismatch: ' + name)
print('All released files verified.')
PY
For repeatable deployment, pin the Hugging Face commit reported with the release using hf download ... --revision <commit>. A successful checksum or HTTP check establishes artifact or interface integrity. It does not establish closed-loop robot task success; the included validation reports state their scope.
Offline validation results
The final 20K adapters were evaluated with inference seed 0 on 15 uniformly selected windows per task (three starts from each of five held-out recordings), plus five gripper-close-transition windows per task. Position errors below compare predicted absolute flange targets with recorded targets; they are not closed-loop robot success rates.
| Measurement | Task 4 | Task 5 |
|---|---|---|
| Uniform windows: position error at predicted step 1 | 0.82 cm | 0.78 cm |
| Uniform windows: position error at predicted step 8 | 3.69 cm | 4.36 cm |
| Close-transition windows: position error at predicted step 8 | 2.33 cm | 2.52 cm |
| Close-transition windows: first-eight-step gripper accuracy | 80.0% | 82.5% |
Both adapters matched the reference implementation and the actual GELLO HTTP client with maximum absolute difference 0 in the recorded checks. One task 5 window in the uniformly selected set missed a close event; no close events were missed in the five deliberately selected close-transition windows. These remaining prediction errors matter for deployment even though artifact and interface checks passed. The initial 15K release used fewer uniformly selected starts, so the aggregate errors from the two releases are not a matched comparison.