Skip to content
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

Open
1 of 2 tasks
qingchunlizhi opened this issue May 21, 2024 · 10 comments
Open
1 of 2 tasks

Comments

@qingchunlizhi
Copy link

qingchunlizhi commented May 21, 2024

Checklist

  • 1. I have searched related issues but cannot get the expected help.
  • 2. The bug has not been fixed in the latest version.

Describe the bug

image 使用KV cache(int8或int4)量化internvl-v1.5后,GPU显存占用增加到了73G,直接用Transformers加载只有50G左右。这个是怎么回事?该怎么修复?谢谢! 量化代码如下:
engine_config = TurbomindEngineConfig(quant_policy=4)
pipe = pipeline('./models/InternVL-Chat-V1-5',
                backend_config=TurbomindEngineConfig(quant_policy=4, session_len=4096))

Reproduction

engine_config = TurbomindEngineConfig(quant_policy=4)
pipe = pipeline('./models/InternVL-Chat-V1-5',
                backend_config=TurbomindEngineConfig(quant_policy=4, session_len=4096))

Environment

...

Error traceback

No response

@lvhan028
Copy link
Collaborator

这是因为 lmdeploy 采用了"激进"的 kv cache mem分配策略

https://lmdeploy.readthedocs.io/en/latest/inference/pipeline.html#usage

可以参考上面文档的说明

@lvhan028 lvhan028 changed the title [Bug] 使用KV cache(int8或int4)量化internvl-v1.5后,显存反而增加了 使用KV cache(int8或int4)量化internvl-v1.5后,显存反而增加了 May 21, 2024
@qingchunlizhi
Copy link
Author

那用这种方式量化还是不能解决在内存小的卡上运行的问题吧。我该如何把模型显存占用降低到比如30G一下呢

@lvhan028
Copy link
Collaborator

是可以的。调小 max-cache-entry-count的比例就好了

@qingchunlizhi
Copy link
Author

qingchunlizhi commented May 21, 2024

max-cache-entry-count 我调成0.2,int4量化后模型依旧占用超过51G。但是BF16模型加载完是50G,如果直接用官方的int8模型,加载完显存占用只有27G。是不是量化完后先要保存,然后再加载推理?

@irexyc
Copy link
Collaborator

irexyc commented May 21, 2024

一个是kv cache量化,一个是权重量化,不一样。你说的官方的int8是用的bnb,跑一下你会发现比fp还慢。你可以关注一下LMDeploy 的量化功能 #1553 ,这个PR合入后, 显存会降下来,速度也会更快。

@rTrQqgH74lc2PT5k
Copy link

rTrQqgH74lc2PT5k commented May 25, 2024

@irexyc 请问如何打开这些功能呢,需要做什么设置吗?我的理解

  1. 省显存1个是vision均分后可以省显存,这个需要如何进行设置呢
  2. 权重量化 [Feature] Support vl models quantization #1553 功能是要单独的进行量化后保存下来才能使用,还是通过参数进行设置即可使用,可能是不太清楚这些量化的原理(bnb,W4A16),感觉不太知道怎么用
  3. 降低max-cache-entry-count进一步节省显存占用

一个是kv cache量化,一个是权重量化,不一样。你说的官方的int8是用的bnb,跑一下你会发现比fp还慢。你可以关注一下LMDeploy 的量化功能 #1553 ,这个PR合入后, 显存会降下来,速度也会更快。

@rTrQqgH74lc2PT5k
Copy link

rTrQqgH74lc2PT5k commented May 25, 2024

可以更新一些文档来进行说明吗?

似乎有一些文档说明:

The default parameters of the visual model can be modified by setting `VisonConfig`.

PS:这里的VisonConfig是不是typo了,VisionConfig

@qingchunlizhi
Copy link
Author

一个是kv cache量化,一个是权重量化,不一样。你说的官方的int8是用的bnb,跑一下你会发现比fp还慢。你可以关注一下LMDeploy 的量化功能 #1553 ,这个PR合入后, 显存会降下来,速度也会更快。

您好,0.4.2版本里面降显存的部分合并进来了吗?用现在的版本测试模型占用的显存还是太大了:
image

@irexyc
Copy link
Collaborator

irexyc commented May 30, 2024

@qingchunlizhi

backend_config 看一下 cache_max_entry_count 这个参数,设成0.5试试,这个表示kvcache 显存申请的百分比,跟模型权重无关,大小影响batch_size 和 session_len。

@irexyc
Copy link
Collaborator

irexyc commented May 30, 2024

@rTrQqgH74lc2PT5k

因为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了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants