使用lmdeploy直接运行
- 使用如下命令运行lm2.5 7b
lmdeploy chat /root/models/internlm2_5-7b-chat
- 看到显存占用约为95%,即约为 22.8GB
创建API服务器
-
本地进行连接
本地调用
-
使用max cache为0.4
占用约为80%,少了约3.6G
使用int4量化
那么本节中19GB的显存占用与[2.2.1 设置最大kv cache缓存大小](#2.2.1 23)中19GB的显存占用区别何在呢?
由于都使用BF16精度下的internlm2.5 7B模型,故剩余显存均为10GB,且 cache-max-entry-count
均为0.4,这意味着LMDeploy将分配40%的剩余显存用于kv cache,即10GB*0.4=4GB。但quant-policy
设置为4时,意味着使用int4精度进行量化。因此,LMDeploy将会使用int4精度提前开辟4GB的kv cache。
相比使用BF16精度的kv cache,int4的Cache可以在相同4GB的显存下只需要4位来存储一个数值,而BF16需要16位。这意味着int4的Cache可以存储的元素数量是BF16的四倍。
- 占用计算
- fp16的7b模型,占用14GB,因此剩余10GB
- max cache为0.4,占用额外4GB一共占用约75%
int4的Cache可以存储的元素数量是BF16的四倍。
W4A16量化
漫长的等待…
终于!
量化之后模型非常小
分析下占用
7B*0.5=3.5B,约为3.5GB,剩余20.5GB
max-cache的80%,为16.4GB
总共使用16.4+3.5~=20GB,约为83%,跟实际情况符合
来个顶级量化
极致省内存
变小了,也变蠢了?()