qwen3.6-27B 用了 GatedDeltaNet(Mamba 类 SSM)混合注意力层, 这些层里的 TransformerEngine 模块持有内部 C++
_extra_state(缓存指向 TensorImpl/Storage 的指针);ROLL 的 offload 机制把参数 flatten 进一块 CPU buffer 再把 tensor.data 重绑到
buffer 切片,原来的 C++ Storage 被剥离 → TE 缓存的指针悬空 → 下一次 forward 段错误:
Cannot access data pointer of Tensor that doesn't have storage(在 TE forward 内抛出)
尝试修改遇到下面问题:
- tensor.set_() 跨设备在现代 PyTorch 被禁;
- tensor.data=... 能用但会丢掉 TE 那些按 C++ 对象身份挂的 hook;
- clear_cublas_workspaces() 只清 PyTorch 的 cuBLAS workspace,清不了 TE 自己的;
- 真修要么改 Megatron 的 offload_megatron_no_grad_module,要么全程关闭参数 offload(8×80GB
单节点显存不够,而省显存的 distributed-optim 分片本身又依赖 offload——死循环)。
- 官方 ROLL 27B 例子用的是 32 卡 / 4 节点(TP=4 PP=2 DP=4),显存宽松到根本不触发那条 offload 路径;我们只有单节点 8×H800,被迫 offload
→ 必然踩雷。
qwen3.6-27B 用了 GatedDeltaNet(Mamba 类 SSM)混合注意力层, 这些层里的 TransformerEngine 模块持有内部 C++
_extra_state(缓存指向 TensorImpl/Storage 的指针);ROLL 的 offload 机制把参数 flatten 进一块 CPU buffer 再把 tensor.data 重绑到
buffer 切片,原来的 C++ Storage 被剥离 → TE 缓存的指针悬空 → 下一次 forward 段错误:
Cannot access data pointer of Tensor that doesn't have storage(在 TE forward 内抛出)
尝试修改遇到下面问题:
单节点显存不够,而省显存的 distributed-optim 分片本身又依赖 offload——死循环)。
→ 必然踩雷。