官方地址

课程学习

部署到服务器的话,涉及到一些场景
服务器端:CPU部署,单GPU/TPU/NPU部署,多卡/集群部署.…
移动端/边缘端:移动机器人,手机

部署问题

  • 计算开销大
    • 大模型参数量巨大,前向推理时需要进行大量计算。
    • 根据InternLM2技术报告提供的模型参数数据,以及OpenAlE团队提供的计算量估算方法2],20B模型每生成1个token,就要进行约406亿次浮点运算;照此计算,若生成128个token,就要进行5.2万亿次运算
    • 20B算是大模型里的“小”模型了,若模型参数规模达到175B(GPT-3),Batch-Size(BS)再大一点,每次推理计算量将达到干万亿量级,
    • 以NVIDIA A100为例,单张理论FP16运算性能为每秒77.97 TFLOPs!1(77万亿),性能捉紧。
  • 内存开销大
    • 以FP16为例,20B模型仅加载参数就需40G+显存。175B模型(如GPT-3)更是需要350G+显存!
    • 大模型在推理过程中,为避免重复计算,会将计算注意力(Attention)得到的KV进行缓存。根据InternLM技术报告提供的模型参数数据,以及KV Cache空间估算方法2,以FP16为例,在batch-size为16、输入512 tokens、输出32 tokens的情境下,仅20B模型就会产生10.3GB的缓存,
    • 目前,以NVID1ARTX4060消费级显卡为例(参考零售价¥2393),单卡显存仅有8GB;NVIDIA A100单卡显存仅有80GB,
  • 访存瓶颈
    • 大模型推理是“访存密集”型任务。目前硬件计算速度“远快于”显存带宽,存在严重的访存性能瓶颈。
    • 以RTX4090推理175B大模型为例,BS为1时计算量为6.83 TFLOPs,远低于82.58 TFLOPs的FP16计算能力;但访存量为32.62TB,是显存带宽每秒处理能力的30倍。
  • 动态请求
    • 请求量不确定;
    • 请求时间不确定;
    • Token逐个生成,生成数量不确定。

部署方法

模型剪枝

剪枝指移除模型中不必要或多余的组件,比如参数,以使模型更加高效。通过对模型中贡献有限的冗余参数进行剪枝,在保证性能最低下降的同时,可以减小存储需求、提高计算效率,
非结构化剪枝 如:SparseGPT11,LoRAPrune
指移除个别参数,而不考虑整体网络结构。这种方法通过将低于阈值的参数置零的方式对个别权重或神经元进行处理。
结构化剪枝 如: LLM-Pruner
根据预定义规则移除连接或分层结构,同时保持整体网络结构。 这种方法一次性地针对整组权重,优势在于降低模型复杂性和 内存使用,同时保持整体的LLM结构完整。

知识蒸馏

知识蒸馏是一种经典的模型压缩方法,核心思想是通过引导轻量化的学生模型“模仿”性能更好、结构更复杂的教师模型,在不改变学生模型结构的情况下提高其性能

量化

浮点数量化为定点数或整数,损失一点精度,提升速度。

LMDeployHuggingFaceTurboMind

课程作业

Transformer库是Huggingface社区推出的用于运行HF模型的官方库。

conda activate lmdeploy
lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]

与大模型对话

W4A16量化

server

python集成方式

报错:

应该是内存不足的原因

是本地终端启动的上个任务还没关掉,我说找个半天。

运行视觉多模态大模型llava

部署到 OpenXLab