Files

164 lines
7.1 KiB
Markdown

# LingBot World 2 Local Tests
Local-only smoke, conversion, and generated-output parity notes for the
`lingbotworld2` causal-fast FastVideo port.
## Reference Assets
| Field | Value |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Model family | `lingbotworld2` |
| First scope | `robbyant/lingbot-world-v2-14b-causal-fast`, I2V causal-fast inference |
| Workload types | I2V: text + first image + camera/action path to video |
| Official reference | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2` |
| HF weights | `robbyant/lingbot-world-v2-14b-causal-fast` |
| Raw weights | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/ckpts/lingbot-world-v2-14b-causal-fast` |
| FastVideo bundle | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/ckpts/lingbot-world-v2-14b-causal-fast-fastvideo` |
| Source layout | `raw_official` |
| Needs conversion | `yes` |
| Token env var | none recorded |
Do not write token values in this file.
## Shared Environment Setup
Use the existing venv and do not rebuild FlashAttention:
```bash
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/pip install -r /mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/requirements.txt
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/pip install --no-deps -e /mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
```
The current environment already has the FastVideo editable install pointing at:
```text
/mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
```
Runtime cache and temporary paths used by the matrix scripts:
```text
/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/.cache
```
## Conversion
The converter writes a FastVideo-loadable bundle with native component configs,
the exact LingBot World 2 Wan VAE checkpoint, and symlinked raw LingBot World 2 transformer/T5
assets:
```bash
cd /mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python scripts/checkpoint_conversion/convert_lingbotworld2_causal_fast.py \
--source-dir /mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/ckpts/lingbot-world-v2-14b-causal-fast \
--output-dir /mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/ckpts/lingbot-world-v2-14b-causal-fast-fastvideo
```
Strict-load checks already run locally:
| Component | Status | Notes |
| ------------ | ------ | --------------------------------------------------------------------- |
| VAE | pass | `LingBotWorld2WanVAE` loads the original `Wan2.1_VAE.pth` checkpoint. |
| Text encoder | pass | Native `LingBotWorld2T5EncoderModel` strict-load from symlinked `.pt`. |
| Transformer | pass | Full 14B load and 8-GPU causal-fast generation pass. |
## Official Frame-Count Constraint
The requested verification frame counts are `5, 9, 17, 33, 65`. The official
causal-fast source uses default `chunk_size=4`, then truncates latent frames to a
multiple of the chunk size. This makes `5` and `9` source-impossible and changes
the generated frame counts for the remaining values.
| Requested frames | Official effective frames | Status |
| ---------------- | ------------------------- | ------------------------------ |
| `5` | `-3` | official source fails |
| `9` | `-3` | official source fails |
| `17` | `13` | runs with truncated output |
| `33` | `29` | runs with truncated output |
| `65` | `61` | runs with truncated output |
Evidence: `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/wan/image2video.py`
rounds `frame_num` to `4n+1`, computes latent frames, truncates `lat_f` by
`chunk_size`, and resets `F = (lat_f - 1) * 4 + 1`.
## Local Tests
```bash
cd /mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python -m pytest \
tests/local_tests/lingbotworld2/test_lingbotworld2_causal_fast_preflight.py \
tests/local_tests/pipelines/test_lingbotworld2_causal_fast_pipeline_smoke.py \
tests/local_tests/pipelines/test_lingbotworld2_causal_fast_pipeline_parity.py \
-q -rs
```
Current result:
```text
2026-07-10: 5 passed, 1 skipped.
Skipped test: opt-in 14B heavy smoke gated by LINGBOTWORLD2_RUN_HEAVY_SMOKE=1.
```
Heavy smoke is opt-in because it loads the 14B model:
```bash
cd /mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
LINGBOTWORLD2_RUN_HEAVY_SMOKE=1 /mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python -m pytest \
tests/local_tests/pipelines/test_lingbotworld2_causal_fast_pipeline_smoke.py \
-q -rs
```
Current heavy result:
```text
2026-07-10: 2 passed in 3:15 on 8 H200 GPUs.
```
## Matrix Verification
Reference generation:
```bash
/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/scripts/run_reference_matrix.sh
```
FastVideo generation:
```bash
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python \
/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/scripts/run_fastvideo_matrix.py
```
Decoded-frame comparison:
```bash
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python \
/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/scripts/compare_matrix_outputs.py
```
Current comparison result:
```text
2026-07-09: all 9 official-supported FastVideo videos are exactly equal to the
reference videos after decoded-frame comparison: max abs 0, mean abs 0.0.
The requested 5-frame and 9-frame cases are recorded as official_unsupported for
both reference and FastVideo.
```
Expected output roots:
| Output type | Path |
| ------------ | -------------------------------------------------------------------------- |
| Reference | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/outputs/reference` |
| FastVideo | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/outputs/fastvideo` |
| Verification | `/mnt/weka/shrd/wm/junda/fv-hub/lingbot-world-v2/outputs/verification` |
Generated-output parity test:
```bash
cd /mnt/weka/shrd/wm/junda/fv-hub/fastvideo-port-lingbot
/mnt/weka/shrd/wm/junda/fv-hub/.venv/bin/python -m pytest \
tests/local_tests/pipelines/test_lingbotworld2_causal_fast_pipeline_parity.py \
-q -rs
```