一、学习笔记
-
前向推理需要的计算量公式
– C f o r w a r d = 2 ∗ N + 2 ∗ n l a y e r ∗ n c t x ∗ d a t t n C_{forward} = 2 * N + 2 * n_{layer} * n_{ctx} * d_{attn} Cforward=2∗N+2∗nlayer∗nctx∗dattn
– N是参数量, n l a y e r n_{layer} nlayer n c t x n_{ctx} nctx d a t t n d_{attn} dattn 分别代表层数,上下文长度,注意力维度

-
kv cache显存占用公式
– M k v c a c h e = 4 ∗ b ∗ n l a y e r ∗ d a t t n ∗ ( s + n ) M_{kvcache} = 4 * b * n_{layer} * d_{attn} * (s + n) Mkvcache=4∗b∗nlayer∗dattn∗(s+n)
–b n l a y e r n_{layer} nlayer d a t t n d_{attn} dattn s n分别是batchsize、层数、attention输出维、s是输入序列长度,n是输出序列长度
– 例子
-
FLOPS概念,常用卡的FLOPS
– 目前面临着硬件计算访存比与模型计算访存比需求不匹配问题。 -
常用的模型小型化方法有模型剪枝、知识蒸馏、量化



-
LMDeploy & turbomind
– https://github.com/InternLM/LMDeploy
– https://github.com/InternLM/lmdeploy/blob/main/docs/zh_cn/inference/turbomind.md
– FasterTransformer:https://github.com/NVIDIA/FasterTransformer- 高度优化的内核:FasterTransformer使用CUDA、cuBLAS和cuBLASLt等底层库来实现高效的矩阵运算。它针对Transformer模型中的自注意力(Self-Attention)和前馈网络(Feed-Forward Networks, FFN)等关键组件,实现了高度优化的CUDA内核。这些内核利用了GPU的并行计算能力,以提高运算速度。
- Tensor Cores的利用:在NVIDIA的Volta、Turing和Ampere等GPU架构中,Tensor Cores是专门设计用于加速深度学习运算的硬件单元。FasterTransformer自动利用这些Tensor Cores来加速FP16精度的计算,从而提高性能。
- 量化技术:FasterTransformer支持FP16和INT8量化,这可以显著减少模型的内存占用和加速推理过程。通过量化,模型的权重和激活值可以存储在更少的比特中,同时通过精心设计的量化策略来最小化精度损失。
稀疏性支持:对于Ampere架构的GPU,FasterTransformer支持模型的稀疏性,这可以进一步减少模型的内存占用和计算量。稀疏性意味着模型中的一些权重可以设置为零,从而在不牺牲太多精度的情况下减少计算。 - 并行策略:FasterTransformer支持张量并行和流水线并行。张量并行通过将模型的不同部分分配给不同的GPU来加速计算,而流水线并行则通过将模型的不同层分布在多个GPU上并同时处理来提高效率。
- 框架集成:FasterTransformer提供了与TensorFlow、PyTorch和Triton后端的集成,使得开发者可以轻松地将优化后的Transformer组件集成到他们熟悉的深度学习框架中。
二、作业
完成以下任务,并将实现过程记录截图:
- 使用HF部署的模型,包括两个问题的耗时

- 配置lmdeploy运行环境,部署1.8B模型,进行对话


- 设置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。
量化语句以及过程:
lmdeploy lite auto_awq \
/root/internlm2-chat-1_8b \
--calib-dataset 'ptb' \
--calib-samples 128 \
--calib-seqlen 1024 \
--w-bits 4 \
--w-group-size 128 \
--work-dir /root/internlm2-chat-1_8b-4bit

启动量化模型
lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.4

- 以API Server方式启动 lmdeploy,开启 W4A16量化,调整KV Cache的占用比例为0.4,分别使用命令行客户端与Gradio网页客户端与模型对话。
lmdeploy serve api_server \
/root/internlm2-chat-1_8b-4bit \
--model-format awq \
--quant-policy 0 \
--server-name 0.0.0.0 \
--server-port 23333 \
--cache-max-entry-count 0.4 \
--tp 1


- 使用W4A16量化,调整KV Cache的占用比例为0.4,使用Python代码集成的方式运行internlm2-chat-1.8b模型。脚本和结果:

6.使用 LMDeploy 运行视觉多模态大模型 llava gradio demo
注意图片要用jpg格式

三、参考资料
https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md
https://github.com/InternLM/lmdeploy/blob/main/docs/zh_cn/inference/turbomind.md
https://github.com/InternLM/lmdeploy/blob/main/README_zh-CN.md
本文介绍了深度学习中的计算效率优化,特别是FasterTransformer如何通过CUDA和TensorCores加速Transformer模型。讨论了计算量公式、KVCache占用、量化技术(如W4A16)以及如何使用lmdeploy部署和优化1.8B模型,包括张量并行、稀疏性和量化策略的应用。

被折叠的 条评论
为什么被折叠?



