(2025.12.23更新加速版)AMD RDNA ROCm vllm后端演示,vllm nn.Conv3d 算子triton适配,以及pipeline中DocLayout-YOLO适配分享 #3662
healy-hub
started this conversation in
Show and tell
Replies: 1 comment 1 reply
-
|
非常赞的patch,能详细说说为啥7900 要这样手动调的原因?--- 针对7900xtx的手动调优配置,其他GPU的最优组合可能需要自行寻找,AMD的autotune效果就是没有效果 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
据AMD反馈的issue,似乎最近RDNA的CK后端就要上线了,期待一手,到时候测试分享。
2025.12.23更新回答分享,删除了第一种慢速方式,仅采用5D矩阵乘法实现。另外增加Triton 后端的flash_attn使用,这里很有意思,LLM部分是flash_attn运算的,但是ViT model部分是Torch SDPA backend,其实是通过环境变量加载AMD预设的AOTriton计算的,最终整体性能提升10%以上了,vllm这里使用的是最新编译的0.14.0rc1.dev3+gde08b8f61.d20251219.rocm711。Torch版本有特定推荐,这个版本的fp16和bf16矩阵乘能到104tflops的结果,相比月早期的94tflops提升明显。
基于Triton的ROCm 不同后端实现优化,基本实现vllm后端正常推理,以及pipeline后端中第一步layout用的DocLayout-YOLO
已有完整python vllm和mineru环境直接跳转第五步!!!建议使用推荐版本的vllm和Torch其他GPU执行问题可以参考,先prof查看定位找到哪个算子问题,然后triton后端实现即可
测试了一下,基本和MinerU官网效果差不多,用AMD的人也不是很多,就在评论区分享给大家了
1.结果介绍
直接gradio网页测试一本531页的第三版 python编程从入门到实践书测试一下速度,可以到1.79it/s:
这个速度我觉得已经有不错的性价比了
Two Step Extraction: 100%|███████████████████████████████████████████████| 531/531 [04:57<00:00, 1.79it/s]
下面为具体的终端执行测试结果:
采用-b vlm-vllm-engine模式举个例子
测试结果为优化为5d矩阵乘代替原来的点积结果:
Adding requests: 100%|██████████████████████████████████████████████| 531/531 [00:07<00:00, 68.05it/s]
Processed prompts: 100%|██████████████| 531/531 [02:25<00:00, 3.64it/s, est. speed input: 5075.22 toks/s, output: 927.59 toks/s]
Warning: line does not match layout format:
Warning: line does not match layout format:
Adding requests: 100%|██████████████████████████████████████████████| 5907/5907 [00:15<00:00, 373.37it/s]
Processed prompts: 100%|███████████| 5907/5907 [01:47<00:00, 54.73it/s, est. speed input: 9060.71 toks/s, output: 2063.93 toks/s]
2.原因介绍
AMD RDNA使用vllm后端有严重的性能问题,原因是因为vllm的qwen2_vl.py中有一个算子在rocm kernel上没有对应的实现,导致性能出现严重的卷积计算回退,一次执行花了12s,。。。。。。。。一言难尽。即MIOpen 库中缺少模型中特定 Conv3d(bfloat16) 的优化内核。
DocLayout-YOLO的g2l_crm.py空洞卷积也是这个问题,专业的CDNA MI210也没解决这个问题
正好一起处理了。
3.环境介绍
System: Ubuntu 24.04.3 Kernel: Linux 6.14.0-37-generic ROCm version: 7.1.1 CPU 13900K 内存 64G 6800MHz ddr5
python环境:
python 3.13.8
pytorch-triton-rocm 3.6.0+git5261b273
torch 2.10.0.dev20251208+rocm7.1
torchvision 0.25.0.dev20251209+rocm7.1
vllm 0.14.0rc1.dev3+gde08b8f61.d20251219.rocm711
aiter 0.1.7.post3.dev34+ge0fb38eda
flash_attn 2.8.3
不同版本无所谓,处理方法是一样的。
4.前置环境安装
vllm 安装参考官方手册Vllm
5.vllm中关键triton算子添加
手动优化算子到矩阵乘法,7900xtx肯定适用,其他AMD GPU不一定是最佳速度实现,里面的手动部分可能需要微调。
关键更改
XXX/vllm/model_executor/models/qwen2_vl.py文件:
1.qwen2_vl.py文件33行下增加from .qwen2_vl_vision_kernels import triton_conv3d_patchify
2.qwen2_vl.py文件498行class Qwen2VisionPatchEmbed(nn.Module)函数,PS.就是这玩意AMD没有现成的内核算子导致回退,这里我们直接5D张量一步到位,改为矩阵乘法
3.XXX/vllm/model_executor/models/目录下创建qwen2_vl_vision_kernels.py文件,用triton实现
4.关闭终端后再次使用mineru-gradio会报一个Lora错误,修改代码跳过它,似乎mineru官方改了,看一下没问题就不用改了
打开该文件XXX/mineru_vl_utils/vlm_client/vllm_async_engine_client.py修改第58行self.tokenizer = vllm_async_llm.tokenizer.get_lora_tokenizer()为:
最后整三个环境变量后愉快玩耍即可
6.vllm后端已经没有问题,下面是pipeline 中layout用的doclayout-yolo模型空洞卷积问题
我在 DocLayout-YOLO 下做了一个回答,因此 pipeline 的空洞卷积问题不在这里赘述,直接点击链接查看即可。
查看自己doclayout-yolo安装位置如下,然后进入修改链接中回复介绍的文件即可
Beta Was this translation helpful? Give feedback.
All reactions