File size: 4,917 Bytes
5d08972 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # First hour on a new machine
Do these in order. Everything else β how the pipeline works, why the sources are picked the
way they are, runtime numbers β is in `README.md`; this file is only the setup path.
Assumes you have this repo and nothing else.
---
## 0. What you must bring yourself
| | size | why it is not here |
|---|---|---|
| **WAN weights** β `Wan2.1-VACE-1.3B`, `VACE-Annotators` | 31 GB | too large to ship; get them from the VACE release or copy from the original machine |
| **GPU** with β₯ 27 GB free | | `--offload_model False` keeps the DiT resident |
Everything else is in this repo.
---
## 1. Unpack the data (~3 GB, 2 min)
```bash
cd <repo>/ # the directory holding aug32/, VACE/, datasets_pack/
mkdir -p data && cd data
tar -xf ../datasets_pack/source_episodes.tar # 2.7 GB -> pickplace_target_human/
tar -xzf ../datasets_pack/aug_materials_ext.tar.gz # 121 MB -> aug_materials_ext/
tar -xzf ../datasets_pack/target_meshes.tar.gz # 14 MB -> objaverse/ lightwheel/
cd ..
```
Check:
```
data/pickplace_target_human/<5 tasks>/{videos,extras}
data/aug_materials_ext/<4 tasks>/ep<N>/mask_gt_target_object_<camera>.mp4
data/{objaverse,lightwheel}/<category>/<model>/model.xml
```
---
## 2. Link the WAN weights
```bash
ln -s /path/to/VACE-home-models VACE/models
ls VACE/models # must show Wan2.1-VACE-1.3B and VACE-Annotators
```
---
## 3. Build two Python environments
**A β batch driver.** Needs `robocasa`, `robosuite`, `mujoco`, `trimesh`, `pyrender`,
`opencv-python`, `numpy`. This one also renders the target meshes' reference views, so
`trimesh` + `pyrender` are not optional. Versions that work: mujoco 3.3.1, robosuite 1.5.2,
robocasa 1.0.0, trimesh 4.12.1, pyrender 0.1.45, numpy 1.26.4, Python 3.10.
**B β WAN inference.** Python 3.12, `torch 2.5.1+cu124`, `flash_attn 2.8.3`, plus
`VACE/requirements.txt`. `wan` must be importable (it is a site-package in the original
environment, installed from the VACE repo).
```bash
export VACE_PY_ROBOCASA=/path/to/env-A/bin/python
export VACE_PY_WAN=/path/to/env-B/bin/python
```
---
## 4. Export the data paths
```bash
cd <repo>
export VACE_ROBOCASA_ROOT=$PWD/data/pickplace_target_human
export VACE_AUG_MATERIALS=$PWD/data/aug_materials_ext
export VACE_ASSET_ROOTS=$PWD/data/lightwheel:$PWD/data/objaverse
```
Leave `VACE_RENDER_SCRIPT_DIR` and `VACE_RENDER_PYTHON` alone β they default to
`aug32/vendor/` and to `VACE_PY_ROBOCASA`, both already correct.
Put all five exports in a file you can `source`; every later step needs them.
---
## 5. Preflight
```bash
./aug32/preflight.sh
```
Every line must read `OK`. It checks both interpreters, the vendored renderer and its
imports, the VACE fork and weights, the three data roots, per-task GT-mask coverage, and
free GPU memory. A `MISS` names the exact path that is wrong.
---
## 6. Smoke test before the real batch
One assignment end to end, ~10 min on one GPU, to catch a broken path before a multi-hour
run:
```bash
mkdir -p /tmp/vace_smoke
$VACE_PY_ROBOCASA aug32/build_aug32_assignments.py \
--out-root /tmp/vace_smoke --per-mesh 1 --targets teapot/teapot_6
head -1 /tmp/vace_smoke/assignments.jsonl > /tmp/vace_smoke/one.jsonl
mv /tmp/vace_smoke/one.jsonl /tmp/vace_smoke/assignments.jsonl
./aug32/run_aug32.sh /tmp/vace_smoke /tmp/vace_smoke_out 0
```
Expect `/tmp/vace_smoke_out/<task>-ep<N>_<src>_teapot_6/` with three camera folders, each
holding one mp4.
---
## 7. The real run
```bash
./aug32/run_aug32.sh /scratch/vace_aug32 /scratch/output_aug_256 0
```
8 targets Γ 32 episodes Γ 3 cameras β 3,084 WAN jobs, **~44 h on one GPU** at the measured
51.4 s/job. Split it: `run_aug32.sh ... <gpu> 4` writes four worker manifests, and the four
WAN processes can be moved onto four GPUs (~11 h). Every stage is idempotent, so an
interrupted run resumes where it stopped.
---
## Common failures
| symptom | cause |
|---|---|
| `FileNotFoundError: Missing GT target-object mask video` | `VACE_AUG_MATERIALS` not exported, or pointing above `aug_materials_ext/` |
| `ModuleNotFoundError: No module named 'trimesh'` during `prep-worker` | env A lacks trimesh/pyrender β install them, or point `VACE_RENDER_PYTHON` at an env that has them |
| `unrecognized arguments: --batch_manifest` | `VACE/` was replaced with a fresh upstream clone; apply `aug32/vace_wan_inference_batch.patch` |
| WAN job ~82 s instead of ~51 s | `--offload_model False` got dropped; it is in `run_aug32.sh`, do not remove it |
| exo cameras come out with the object *erased* rather than swapped | expected at 256Γ256 β the target mask is ~0.2 % of an exo frame. Only `robot0_eye_in_hand` (~9 %) reliably swaps |
| assignments have fewer same-category sources than expected | the dataset only holds 5 teapot / 3 donut / 2 jar / 2 syrup_bottle episodes. Only MeasuringCup009 can fill 32 from its own category |
|