这里我打算围绕着AWQ去做,然后我发现AWQ在vLLM里面实际只支持FP16这个格式,如果要支持Qwen3和Llama里的BF16的格式,需要再添加一个接口做awq_marlin,这个再vLLM中也是实现了的。
考虑到模型的复杂性和我实际的工作量要求,我打算先做出来最基础的AWQ,然后在跑模型的时候强制转换格式。然后把量化这一块搞明白的差不多的时候,我再实现这个awq_marlin。
我差不多实现这个AWQ了,但是我的性能并没有提升,因为我这个Qwen3和Llama都是支持bf16的格式,考虑到先进行可行性分析,我并没有调用vLLM的AWQ CUDA/Triton kernel,所以性能没有提升,我目前是先把INT4权重还原成普通浮点权重然后交给PyTorch做。
之前打算是复现vLLM的AWQ后端,但我转念一想,既然我是bf16,那为什么非要去适配vLLM的AWQ的fp16呢,所以我打算自己去实现这个kernel。反正triton大致的逻辑我也比较清楚,也无所谓,本来以后也打算把triton学了,就当提前练手了。
但是这个工作量有点大。。。
然后现在其实我也没搞懂整个AWQ的流程,只有个模糊的概念,似乎懂似乎又不懂。后面会补充去系统性的再过一遍整个模型,到时候在这里记录。
我大概看懂我要干什么了,我目前实现的这个AWQ是个流程,具体还得用Triton实现它的这个dequant模块和GEMM模块,然后我才能说我提升了我模型的性能。
本来之前还打算给Llama也写一版,但是我感觉太复杂了,太深遂了,我们就集中精力搞出来Qwen3的优化即可。
争取今晚把代码写出来,明天把代码再调出来。
代码调完了,比原始的目测快了一倍多,已无敌
里面用到了很多triton的写作代码,我今晚继续肝,把这个triton代码中的写作逻辑给记录一下。但首先我先看看我下一步是做Attention的量化还是直接去做投机解码这一块。