Closed zhufeizzz closed 3 weeks ago
I don't really know and I also cannot reproduce with vllm on NVIDIA cards.
你是在用 fp16 跑推理么?
Qwen2-7B-Instruct 这个模型在 910B 设备上,用 fp16 推理会溢出,导致 prefill 过后所有的 logits 全部为 nan,于是第一个 token 采样就永远是 0 号 token(即感叹号)。
解决方式是改用 bf16。
我印象中 AscendvLLM 的 FX 后端是支持 bf16 的。
如果你的 AscendvLLM 用的是 MindIE 后端,那么由于 MindIE 目前还不能支持 Qwen 系列模型的 bf16 推理,所以暂时无解,你可以设个 INF_NAN_MODE_ENABLE=0
让 MindIE 将溢出值截断而不是变 nan,这样它首 token 不会永远是 0 号,但是会导致推理质量变得不稳定。
你是在用 fp16 跑推理么?
是的,用的MindIE模式+fp16,我试下你的方案
你是在用 fp16 跑推理么? qwen2-7B-instruct 这个模型在 910B 设备上,用 fp16 推理会溢出,导致 prefill 过后所有的 logits 全部为 nan,于是第一个 token 采样就永远是 0 号 token(即感叹号)。 解决方式是改用 bf16。 我印象中 AscendvLLM 的 FX 后端是支持 bf16 的。 如果你的 AscendvLLM 用的是 MindIE 后端,那么由于 MindIE 目前还不能支持 Qwen 系列模型的 bf16 推理,所以暂时无解,你可以设个 让 MindIE 将溢出值截断而不是变 nan,这样它首 token 不会永远是 0 号,但是会导致推理质量变得不稳定。
INF_NAN_MODE_ENABLE=0
还能有这种bug?哈人。
你是在用 fp16 跑推理么? qwen2-7B-instruct 这个模型在 910B 设备上,用 fp16 推理会溢出,导致 prefill 过后所有的 logits 全部为 nan,于是第一个 token 采样就永远是 0 号 token(即感叹号)。 解决方式是改用 bf16。 我印象中 AscendvLLM 的 FX 后端是支持 bf16 的。 如果你的 AscendvLLM 用的是 MindIE 后端,那么由于 MindIE 目前还不能支持 Qwen 系列模型的 bf16 推理,所以暂时无解,你可以设个 让 MindIE 将溢出值截断而不是变 nan,这样它首 token 不会永远是 0 号,但是会导致推理质量变得不稳定。
INF_NAN_MODE_ENABLE=0
还能有这种bug?哈人。
这也不能叫 bug 吧。 毕竟模型本来是 bf16 的,而 bf16 比 fp16 有更多的指数位,所以 bf16 正常推理的模型拿 fp16 去跑,确实是有可能会溢出的。
你是在用 fp16 跑推理么?
是的,用的MindIE模式+fp16,我试下你的方案
MindIE 我近期发现了一个能强行让它跑 BF16 的方法:
找到 atb-models/atb_llm/models/qwen2/flash_causal_qwen2.py
这个文件,然后:
torch.float16
改成 self.dtype
,并把前面的 1 改成 2048。torch.float16
改成 self.dtype
False
改成 self.dtype == torch.bfloat16
这样改完之后,它用 BF16 能跑 32K 长序列不报错,并且我测的一些评测集也和 A100 基本一致。 但由于 MindIE 的模型组件是闭源的,因此我也没法判断这样改会不会有什么别的副作用。
问题已解决,换成AscendOPP-DEFAULT推理后端+BF16就可以了。MindIE不支持BF16推理
问题已解决,换成AscendOPP-DEFAULT推理后端+BF16就可以了。MindIE不支持BF16推理 具体是怎么解决的能分享下吗?碰到同样的问题
问题已解决,换成AscendOPP-DEFAULT推理后端+BF16就可以了。MindIE不支持BF16推理 具体是怎么解决的能分享下吗?碰到同样的问题
就是推理模式设置为Default,然后才能用BF16 export INFER_MODE=DEFAULT export USE_MASKFREE_ATTN=1 export MASKFREE_ATTN_THRESHOLD=16384
如图这样,微调前后推理都会加上这个链接。基于昇腾910B+AscendvLLM部署的