Repository

WAM-Diff2

Hierarchical AR-to-Diffusion Distillation for Efficient Autonomous Driving VLA

README

<h1 align="center">WAM-Diff2: Hierarchical AR-to-Diffusion Distillation for Highly Efficient Autonomous Driving VLA</h1>

Zhihao Zhu1,* · Hanlin Shang1,* · Mingwang Xu1,* · Feipeng Cai2,* · Zhuolin He1 · Yaoyi Li2 Jianhua Han2 · Hang Xu2 · Siyu Zhu1,†

1Fudan University    2Yinwang Intelligent Technology Co., Ltd.

*Equal contribution    †Corresponding author

GitHub Project Page arXiv Hugging Face

News

  • 2026-08-16 — Released the initial training and inference code for WAM-Diff2.
  • 2026-08-02 — Released WAM-Diff2 on arXiv.

Roadmap

  • [x] Release progressive block-wise adaptation code.
  • [x] Release hierarchical distillation code and configurations.
  • [x] Release GPU and NPU inference entry points.
  • [ ] Release the WAM-Diff2 Block-32 checkpoint on Hugging Face.
  • [ ] Release benchmark evaluation code and reproducible paper results.
  • [ ] Release optimized FlashInfer and CUDA Graph inference.

Quick Start

Installation

Python 3.11–3.12 is supported. The reference environment uses PyTorch 2.8 and
CUDA 12.x.

git clone https://github.com/fudan-generative-vision/WAM-Diff2.git
cd WAM-Diff2

conda create -n wam-diff2 python=3.12 -y
conda activate wam-diff2
pip install -r environment/requirements_cuda.txt
pip install -e .

The default configuration uses PyTorch SDPA. FlashAttention is optional and must
match the installed PyTorch and CUDA versions.

Model checkpoint

Download the WAM-Diff2 checkpoint from
Hugging Face and place it
at:

checkpoints/WAM-Diff2-B32-2B/

Inference

Inference defaults to Block-32 decoding with 32 denoising steps and dynamic
low-confidence remasking at a confidence threshold of 0.9.

Run inference on NVIDIA GPUs:

scripts/infer_gpu.sh \
  --model_id checkpoints/WAM-Diff2-B32-2B \
  --input_file /path/to/eval.json \
  --output_file outputs/predictions.json

Run inference on Ascend NPUs with a compatible torch-npu installation:

scripts/infer_npu.sh \
  --model_id checkpoints/WAM-Diff2-B32-2B \
  --input_file /path/to/eval.json \
  --output_file outputs/predictions.json

Set NUM_GPUS or NUM_DEVICES to launch multiple workers. The decoding
defaults can be overridden with --block_size, --denoising_steps,
--remasking_strategy, and --confidence_threshold.

Training

Data

<details>
<summary>Training data sample</summary>

A training JSON file is a list of samples in the following format:

[
  {
    "datasource": "Navsim",
    "id": "43ebecce459052f2",
    "image": [
      "data/opensource/navsim_dataset/sensor_blobs/test/2021.05.25.14.16.10_veh-35_01690_02183/CAM_F0/d28200c994c15229.jpg"
    ],
    "conversations": [
      {
        "from": "human",
        "value": "Here is a front-view images from a driving vehicle: <image>\nThe navigation information is: right\nThe current position is (0.00,0.00)\nThe current velocity is: (4.66,-0.09) and current accelerate is: (0.17,-1.53)\nInstruction: Based on the visual motion cues from the image (such as the relative speed of other vehicles and the changing distance to the intersection) and the provided telemetry, predict the optimal driving action for the next 4 seconds with 8 new waypoints."
      },
      {
        "from": "gpt",
        "value": "2.26,-0.17,4.43,-0.70,6.52,-1.55,8.48,-2.64,10.28,-3.88,11.99,-5.25,13.76,-6.83,15.59,-8.59"
      }
    ]
  }
]

</details>

Progressive block-wise adaptation

Run Block-4 adaptation from the prepared Qwen3-VL checkpoint on one GPU:

CONFIG_PATH=configs/training/block4.yaml scripts/train_block.sh

For multi-GPU training with explicit data paths:

NUM_GPUS=8 \
CONFIG_PATH=configs/training/block4.yaml \
scripts/train_block.sh \
  --dataset.path_or_dataset /path/to/train.json

The tutorial recipe is defined in
configs/training/block4.yaml. Any
--section.key value argument overrides the corresponding YAML field.

Continue the progressive adaptation with
block8.yaml,
block16.yaml, and
block32.yaml.

Hierarchical distillation

Launch block-wise/model-wise distillation with Accelerate and DeepSpeed:

NUM_GPUS=8 scripts/train_distil.sh

The experiment and distributed-training settings are defined in
configs/distillation/distil.yaml and
configs/accelerate/, respectively. They can also be
selected explicitly:

NUM_GPUS=8 \
EXPERIMENT_CONFIG=/path/to/distil.yaml \
ACCELERATE_CONFIG=/path/to/deepspeed_zero2.yaml \
scripts/train_distil.sh

Citation

If WAM-Diff2 is useful for your research, please cite:

@article{zhu2026wam,
  title={WAM-Diff2: Hierarchical AR-to-Diffusion Distillation for Highly Efficient Autonomous Driving VLA},
  author={Zhu, Zhihao and Shang, Hanlin and Xu, Mingwang and Cai, Feipeng and He, Zhuolin and Li, Yaoyi and Han, Jianhua and Xu, Hang and Zhu, Siyu},
  journal={arXiv preprint arXiv:2608.01035},
  year={2026}
}

Acknowledgements

We sincerely thank the teams behind
NVIDIA NeMo AutoModel and
Bard-VL. This project builds
upon their excellent open-source work.