File size: 4,099 Bytes
f6d03a4 | 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 | # 隔离环境说明 (TTT / GatedDeltaNet 消融实验)
为在**不污染系统环境**的前提下运行 VLANeXt + 自研 TTT 层 + GatedDeltaNet 基线,
我们建立了一个独立 venv。系统环境(定制 torch 2.3 + triton 3.0 + transformers 4.41)
**完全未改动**。
## venv 位置
```
/mnt/afs-h200/yuyangcheng/venvs/fla_triton32 (约 5.7G)
```
## venv 与系统的差异
| 包 | 系统 (dist-packages) | venv (隔离, shadow 系统) |
|---|---|---|
| torch | 2.3.0a0+nv24.04 | **2.6.0+cu124** |
| triton | 3.0.0 | **3.2.0** |
| transformers | 4.41.2 (无 Qwen3-VL) | **5.1.0** |
| diffusers | 缺/旧 | **0.36.0** |
| accelerate / peft / tokenizers | 旧 | 1.10.1 / 0.19.1 / 0.22.2 |
| scipy/sklearn/pandas/pyarrow/soxr | numpy1.x 编译(ABI 冲突) | 重装为 numpy2 兼容版 |
> venv 用 `uv venv --system-site-packages` 创建,继承系统的 numpy/CUDA 驱动等,
> 仅 shadow 上述需要新版的包。GatedDeltaNet 的 fla triton kernel 需要 triton>=3.2,
> 而 transformers 5.1 / diffusers 0.36 需要 torch>=2.4,故 venv 内升级了 torch+triton。
## 重建步骤(若 venv 损坏)
```bash
VENV=/mnt/afs-h200/yuyangcheng/venvs/fla_triton32
uv venv --system-site-packages --python /usr/bin/python3 $VENV
# torch 2.6 + cu124 (匹配系统 CUDA 12.4 驱动 550.x),自带 triton 3.2
VIRTUAL_ENV=$VENV uv pip install --python $VENV/bin/python \
--index-url https://download.pytorch.org/whl/cu124 \
torch==2.6.0+cu124 torchvision==0.21.0+cu124
# transformers 栈 (--no-deps 避免再拖动 torch)
VIRTUAL_ENV=$VENV uv pip install --python $VENV/bin/python --no-deps \
transformers==5.1.0 diffusers==0.36.0 tokenizers==0.22.2 safetensors==0.7.0 \
accelerate==1.10.1 "peft>=0.17.0" regex soxr
# 修 numpy1.x ABI 冲突的系统包 (shadow 成 numpy2 兼容版)
VIRTUAL_ENV=$VENV uv pip install --python $VENV/bin/python --no-deps \
"scipy>=1.13" "scikit-learn>=1.5" joblib threadpoolctl \
"pandas>=2.2" python-dateutil pytz tzdata "pyarrow>=17"
```
## 运行测试
```bash
cd /mnt/afs-h200/yuyangcheng/workplace/VLANeXt
VENV=/mnt/afs-h200/yuyangcheng/venvs/fla_triton32
# 1) TTT 层单元测试 (因果/双向语义 + 反向)
TORCHDYNAMO_DISABLE=1 $VENV/bin/python src/models/test_ttt.py
# 2) GatedDeltaNet 冒烟测试 (训练+推理路径)
bash src/models/run_fla_smoke.sh
# 3) 整模型端到端 (Qwen3-VL backbone + action expert, 构造+train fwd/bwd+predict)
# 跑两遍: policy_mixer_type='attention'(基线) 和 'ttt'(消融)
TORCHDYNAMO_DISABLE=1 PYTHONPATH="$PWD" $VENV/bin/python -m src.models.test_e2e_vlanext
```
## TTT 消融开关 (config: model 段)
```yaml
# action expert (policies.py 的 MoE 系列): "attention"(基线) | "ttt"(双向 TTT)
policy_mixer_type: "attention"
policy_mix_every_n: 4 # [A,A,A,T]: 每 4 层第 4 层为 TTT
# vision expert (generator.py): "attention" | "ttt"(因果 TTT)
generator_mixer_type: "attention"
generator_mix_every_n: 4
generator_ttt_chunk_size: 16
```
默认全 "attention" = 现行基线,零行为变化。改 "ttt" 即启用消融。
方式 B 语义一致:TTT 层的 update 阶段把 VLM hidden state 作为额外 k/v(action 双向
拼接;vision 因果情形下作全局非因果预更新,保住 image→VLM 全可见 + image→image 因果)。
## 已验证 (全部通过)
- TTT 层: 7/7 (因果性硬验证 / 双向性 / 反向 / 状态链式) + 方式B注入(ctx 双向/因果全局)
- GatedDeltaNet: import / chunk 训练 fwd+bwd / fused_recurrent 推理 / use_gate=False
- block 级: action(diffusion MoE)/ vision(generator) × {attention, ttt} 全 fwd+bwd
- 整模型: attention 基线 + ttt 消融 两条路径均 构造/train fwd-bwd/predict_action 通过
## 注意
- `TORCHDYNAMO_DISABLE=1` 仍建议带上(规避 inductor 边角问题;fla 的 @torch.compile
小函数退化为 eager,数值等价)。
- Emu3.5 VisionTokenizer 仅有 config 无权重,故 `future_image_loss_weight=0` 时不加载;
若要验证 vision expert 的图像生成损失,需补全该权重。
- 真实多卡训练(deepspeed 等)未在此 venv 验证,仅验证单卡 构造/前向/反向/推理。
|