尊敬的开发者您好,根据提供的报错日志,当replay时,当前流状态不是capture,请问下 整体网络执行时,如何调用该部分代码?
在vllm_ascend中:
class AscendUnquantizedFusedMoEMethod(UnquantizedFusedMoEMethod):
def apply(self,
layer: torch.nn.Module,
x: torch.Tensor,
...
) -> torch.Tensor:
topk_weights, topk_ids = select_experts(
hidden_states=x,
...
)
if envs.VLLM_ENABLE_TOKEN_DROP:
load_factor = envs.VLLM_TOKEN_DROP_LOAD_FACTOR
topk_weights, topk_ids = token_drop(
router_logits, topk_weights, topk_ids,
global_num_experts, load_factor)
....
AscendUnquantizedFusedMoEMethod.apply是模型的MoE层前向计算的接口, 在该接口内调用token_drop方法.
vllm_ascend会在服务启动前先进行一次dummy_run来进行capture_model的操作.
当前报错是在这个阶段发生的, 详细调用栈可见上面提供的附件的日志.


尊敬的开发者您好,根据日志分析,capture了两个graph,均进行了多次replay 。
在进行input size 为 {[32, 8],[32, 128],[32, 8],128} 的 最后一次replay时,发生报错, 请确认下最后一次replay的触发和 之前的replay的区别, 以及是否存在嵌套执行的情况


@torch.compile(dynamic=True, backend=npu_backend)
def token_drop(router_logits: torch.Tensor, topk_weights: torch.Tensor, topk_ids: torch.Tensor, num_global_experts: int, load_factor: float) -> tuple[torch.Tensor, torch.Tensor]:
示例代码里面这一段,看起来是重复编译了。
token_drop本身触发了compile,vllm 也有整个模型粒度的compile。应该是用法错误,去掉下这边的装饰再验证下。


去掉了装饰器即可正常运行,模型粒度的compile会自动对内部的自定义函数进行编译吗


在提交问题之前,请通过搜索现有和历史问题确保该问题尚未被提出并解决。
您的环境信息
🐛 请描述bug
有以下函数使用torch compile编译:
添加到vllm_ascend中使用:
vllm启动参数如下:
启动后给出以下报错:
完整日志见附件.f9e0d7dbdfc54872adf9514a4e0099b8.log
然而,如果不将该函数放置在vlllm内部, 而是单独测试又可正常运行, 测试代码如下: