外观
大模型推理加速技术总览
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 当前优化模型最主要的技术手段有哪些?
大模型加速优化可从三个层面入手:
| 层面 | 技术手段 | 说明 |
|---|---|---|
| 算法层面 | 蒸馏、量化 | 通过模型压缩减少计算量 |
| 软件层面 | 计算图优化、模型编译 | 优化计算图的执行效率 |
| 硬件层面 | FP8 | NVIDIA H 系列 GPU 开始支持,兼有 FP16 的稳定性和 INT8 的速度 |
2. 推理加速框架有哪些?都有什么特点?
2.1 FasterTransformer
NVIDIA 推出的 FasterTransformer 不修改模型架构,而是在计算加速层面优化 Transformer 的 encoder 和 decoder 模块:
- 尽可能多地融合除了 GEMM 以外的操作
- 支持 FP16、INT8、FP8
- 移除 encoder 输入中无用的 padding 来减少计算开销
2.2 TurboTransformers
腾讯推出的 TurboTransformers 由 computation runtime 及 serving framework 组成,适用于 CPU 和 GPU,无需预处理便可处理变长的输入序列:
- 与 FasterTransformer 类似,融合了除 GEMM 之外的操作以减少计算量
- Smart batching:对 batch 内不同长度的序列最小化 zero-padding 开销
- 对 LayerNorm 和 Softmax 进行批处理,使其更适合并行计算
- 引入模型感知分配器,确保在可变长度请求服务期间内存占用较小
2.3 vLLM
vLLM 的两大核心技术:
| 技术 | 说明 |
|---|---|
| Continuous batching | 有 iteration-level 的调度机制,每次迭代 batch 大小都变化,在大量查询下仍可很好工作 |
| PagedAttention | 受操作系统中虚拟内存和分页思想启发的注意力算法,是模型加速的秘诀 |
3. vLLM 篇
3.1 vLLM 的功能有哪些?
- 文本生成的速度最快
- 高吞吐量服务:支持各种解码算法,如 parallel sampling、beam search 等
- 与 OpenAI API 兼容:只需替换端点 URL 即可使用
3.2 vLLM 的优点有哪些?
| 优点 | 说明 |
|---|---|
| 推理速度最快 | 实验多次发现 vLLM 的推理速度是最快的 |
| 高吞吐量服务 | 支持各种解码算法(parallel sampling, beam search 等) |
| 兼容 OpenAI API | 使用 OpenAI API 只需替换端点 URL |
3.3 vLLM 的缺点有哪些?
| 缺点 | 说明 |
|---|---|
| 添加自定义模型复杂 | 如果模型没有使用与 vLLM 中现有模型类似的架构,过程会变得复杂 |
| 缺乏适配器支持 | 没有 LoRA、QLoRA 等适配器单独使用的选项 |
| 缺少权重量化 | 有时 LLM 不需要使用 GPU 内存,权重量化对减少 GPU 内存消耗至关重要 |
3.4 vLLM 离线批量推理
python
# pip install vllm
from vllm import LLM, SamplingParams
prompts = [
"Funniest joke ever:",
"The capital of France is",
"The future of AI is",
]
sampling_params = SamplingParams(temperature=0.95, top_p=0.95, max_tokens=200)
llm = LLM(model="huggyllama/llama-13b")
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")3.5 vLLM API Server
bash
# 启动服务
python -m vllm.entrypoints.api_server --env MODEL_NAME=huggyllama/llama-13bbash
# 查询模型
curl http://localhost:8000/generate \
-d '{
"prompt": "Funniest joke ever:",
"n": 1,
"temperature": 0.95,
"max_tokens": 200
}'4. Text Generation Inference 篇
4.1 介绍一下 Text Generation Inference
Text Generation Inference(TGI)是用于文本生成推断的 Rust、Python 和 gRPC 服务器,在 HuggingFace 中已有 LLM 推理 API 使用。
4.2 TGI 的功能有哪些?
- 内置服务评估:可以监控服务器负载并深入了解其性能
- Flash Attention 优化:使用 flash attention(和 v2)和 Paged attention 优化 transformer 推理代码
- Docker 环境:所有依赖项都安装在 Docker 中,开箱即用
- 支持 HuggingFace 模型:轻松运行自己的模型或使用任何 HuggingFace 模型中心模型
- 推理控制:精度调整、量化、张量并行性、重复惩罚等
4.3 TGI 的优点有哪些?
| 优点 | 说明 |
|---|---|
| 内置服务评估 | 监控服务器负载并深入了解性能 |
| Flash Attention 优化 | 对未使用该技术的模型可以进行优化 |
| Docker 部署 | 现成的环境,无需配置 |
| HuggingFace 支持 | 轻松运行任何 HF 模型 |
| 推理控制丰富 | 精度调整、量化、张量并行、重复惩罚等 |
4.4 TGI 的缺点有哪些?
| 缺点 | 说明 |
|---|---|
| 缺乏适配器支持 | 可使用适配器部署 LLM,但目前还没有官方支持或文档 |
| 源代码编译困难 | 从 Rust + CUDA 内核编译,对不熟悉 Rust 的人有挑战 |
| 文档不完整 | 基础知识在 README 中,更多细节需在问题或源代码中搜索 |
4.5 TGI 使用 Docker 运行 Web Server
bash
mkdir data
docker run --gpus all --shm-size 1g -p 8080:80 \
-v data:/data ghcr.io/huggingface/text-generation-inference:0.9 \
--model-id huggyllama/llama-13b \
--num-shard 1TGI 通过 Docker 部署简单快捷,适合快速搭建 LLM 推理服务。