lmdeploy
lmdeploy copied to clipboard
GPTQ 和 AWQ 的推理 kernel 能否互用?
请教个量化相关的问题,看起来 GPTQ 和 AWQ 在推理阶段的代码语义是一致的,都是通过 zero/scale/q_weight得到原始的权重然后和激活进行 GEMM,量化的 group size 一致,且都是 per-channel的。
所以在推理阶段,两个kernel 的代码能否互通使用呢?
感谢
权重 layout 调整好了理论上是可以的
权重 layout 调整好了理论上是可以的
好的感谢!所以评估的时候说GPTQ 更快或者 AWQ 更快其实没有意义对吧,只能说某个实现更快。
另外,有个新的论文不知道你们是否研究过,代码仓库在这里,一个更快的int4fp16的实现。 https://github.com/SqueezeBits/QUICK?tab=readme-ov-file
另外,有个新的论文不知道你们是否研究过,代码仓库在这里,一个更快的int4fp16的实现。
这玩意并不快。
另外,有个新的论文不知道你们是否研究过,代码仓库在这里,一个更快的int4fp16的实现。
这玩意并不快。
感谢!我看论文以为发现了新世界。 他里面声称反量化过程中存在 bank 冲突你了解吗? 我没看到他有详细的解释,一直很懵,我测试的代码,比如一个 warp 内的相邻线程同时向shared_memory的相邻地址写入64bit数据,虽然线程 0 和线程 16 是写入同一个 bank,但是实际上profile 是没有 bank 冲突的。 大佬如果了解这块的话,求指点!
layout 调整好了就没有 bank conflict
比如一个 warp 内的相邻线程同时向shared_memory的相邻地址写入64bit数据,虽然线程 0 和线程 16 是写入同一个 bank,但是实际上profile 是没有 bank 冲突的。
32 个 32-bit 的 bank 无法同时执行 32 个 64-bit 读写操作。64-bit 读写操作是分 0-15 和 16-31 两步执行的,也可以理解为 64-bit 读写只有 16 个 bank。
layout 调整好了就没有 bank conflict
比如一个 warp 内的相邻线程同时向shared_memory的相邻地址写入64bit数据,虽然线程 0 和线程 16 是写入同一个 bank,但是实际上profile 是没有 bank 冲突的。
32 个 32-bit 的 bank 无法同时执行 32 个 64-bit 读写操作。64-bit 读写操作是分 0-15 和 16-31 两步执行的,也可以理解为 64-bit 读写只有 16 个 bank。
嗯嗯理解,这种情况下没有冲突。所以那篇论文里号称的反量化过程中的 bank 冲突实际是不存在的是吗?
另外他说的是省去了从shared memory 到寄存器之间的读写,这一块实际上不如我们这边的 kernel 高效是吗?
所以那篇论文里号称的反量化过程中的 bank 冲突实际是不存在的是吗?
还是要看具体怎么做的
另外他说的是省去了从shared memory 到寄存器之间的读写,这一块实际上不如我们这边的 kernel 高效是吗?
大家都是这么做的
所以那篇论文里号称的反量化过程中的 bank 冲突实际是不存在的是吗?
还是要看具体怎么做的
另外他说的是省去了从shared memory 到寄存器之间的读写,这一块实际上不如我们这边的 kernel 高效是吗?
大家都是这么做的
感谢 学习了!