-
Notifications
You must be signed in to change notification settings - Fork 385
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用KV cache(int8或int4)量化internvl-v1.5后,显存反而增加了 #1626
Comments
这是因为 lmdeploy 采用了"激进"的 kv cache mem分配策略 https://lmdeploy.readthedocs.io/en/latest/inference/pipeline.html#usage 可以参考上面文档的说明 |
那用这种方式量化还是不能解决在内存小的卡上运行的问题吧。我该如何把模型显存占用降低到比如30G一下呢 |
是可以的。调小 max-cache-entry-count的比例就好了 |
max-cache-entry-count 我调成0.2,int4量化后模型依旧占用超过51G。但是BF16模型加载完是50G,如果直接用官方的int8模型,加载完显存占用只有27G。是不是量化完后先要保存,然后再加载推理? |
一个是kv cache量化,一个是权重量化,不一样。你说的官方的int8是用的bnb,跑一下你会发现比fp还慢。你可以关注一下LMDeploy 的量化功能 #1553 ,这个PR合入后, 显存会降下来,速度也会更快。 |
@irexyc 请问如何打开这些功能呢,需要做什么设置吗?我的理解
|
可以更新一些文档来进行说明吗? 似乎有一些文档说明: lmdeploy/docs/en/inference/vl_pipeline.md Line 134 in b15ec5f
PS:这里的 |
|
backend_config 看一下 cache_max_entry_count 这个参数,设成0.5试试,这个表示kvcache 显存申请的百分比,跟模型权重无关,大小影响batch_size 和 session_len。 |
因为LLM 多卡的时候,每个卡上需要的显存相等,如果vision不均分的话,会造成可用显存变少。目前这个是自动开启的。 权重量化 需要保存下来使用,文档可以看 https://github.com/InternLM/lmdeploy/blob/main/docs/zh_cn/quantization/w4a16.md,对VLM模型来说也是一致的。不过保存模型的时候,文件夹最好和官方一致,不然可能无法自动匹配到正确的对话模版。 kvcache 所占显存与模型权重无关,是通过 cache_max_entry_count 这个参数来控制的。影响最大的session_len, 以及batch_size。 VisonConfig 是 typos了。 |
Checklist
Describe the bug
使用KV cache(int8或int4)量化internvl-v1.5后,GPU显存占用增加到了73G,直接用Transformers加载只有50G左右。这个是怎么回事?该怎么修复?谢谢! 量化代码如下:Reproduction
Environment
Error traceback
No response
The text was updated successfully, but these errors were encountered: