本文是通过 AI 创建的技术说明与实现示例。所发布的代码和步骤基于一手信息构建,但未经作者在实际设备上进行运行验证。根据环境和版本的不同,实际运行结果可能会有所差异。
随着 AI 的普及,针对推理工作负载进行适当的 GPU 资源规模估算(Sizing)以及总拥有成本(TCO)的优化已成为重要的课题。一手信息中阐述了一种方法:根据用途对推理工作负载进行分类,并基于具体的输入要素构建数据驱动的资源占用(Footprint)模型。本文将基于官方博客,对其中的构成要素和优化方法进行梳理。
按用途划分的 Token 模式与 INF(推理)工作负载分类
推理规模估算与 TCO 优化的第一步是明确要解决的问题。一手信息指出,大部分推理工作负载大致可分为以下 4 个类别:
AI Chatbots/Copilots(聊天机器人与 AI 助手)
AI Agents(执行深度研究与推理的高级 AI 智能体)
Content Generation(内容生成)
Translation Apps(翻译应用)
这些类别根据已缓存的输入 Token 数、输入 Token 数(ISL)以及输出 Token 数(OSL)的模式进行区分。例如,聊天机器人和 AI 助手倾向于较长的输入和较短的输出(例如:受限的 RAG 或多轮对话),而 AI 智能体的特征则是超过 128,000 个 Token 的极长上下文(例如:深度研究或扩展 RAG)。此外,内容生成具有较短的输入和较长的输出,而翻译应用则具有相对均衡的 Token 长度。
通过核心与弹性容量模型平衡成本与运营
为了防止因不可预测的工作负载导致成本激增,一手信息提出了一种名为“核心与弹性(Core and Flex)”的策略。
核心(Core):针对稳定不变的工作负载,建立由本地部署(On-Premises)或预留(Reserved)云 GPU 构成的基线。这可以抑制价格波动风险,并为绝大多数用户保障高可靠性的服务。
弹性(Flex):为了应对激增的流量、新功能发布或实验等需求,引入公共云的弹性能力(竞价实例或按需 GPU)。
据说该模型能够在资本效率(Capex)和运营敏捷性(Opex)之间取得平衡,从而防止过度配置或阻碍业务增长。
flowchart TD
A["工作负载整体"] --> B["核心: 本地 / 预留GPU"]
A --> C["弹性: 竞价 / 按需GPU"]
B --> D["处理稳定流量"]
C --> E["处理突发性流量"]
决定规模估算的主要输入要素
除了把握具体用途外,规模估算计划还基于以下要素构建:
模型选型(LLM):更大的模型并不总是最优解,应考虑符合需求的的主流模型或经过微调的小型模型。
应用规模与 DAU / 并发数:明确每日活跃用户(DAU)以及同时发起的请求数量。高并发性会对 GPU 内存和延迟造成巨大压力。
输入与输出字符串长度(ISL / OSL):每个提示词的 Token 长度越长,对 GPU 内存和计算能力的需求就越大。
缓存命中率: 估算在请求之间重复使用的输入 Token 比例,通过从 KV 缓存中进行处理可以跳过预填充(Prefill),从而缩短首字延迟(TTFT,Time to First Token)并降低成本。
延迟指标:考虑在用户体验中具有高响应性的首字延迟(TTFT)的平均值、99分位数以及 Token 间延迟。
合同期限:对于可预测的流量,长期合同或本地部署更为合适;而对于波动较大的工作负载,灵活的云端容量则更为适用。
按工作负载划分的场景与推荐内存
一手信息列举了四个具体的企业级用例场景。
金融服务(面向客户经理的 AI 助手):
特征:分析复杂的客户邮件(长输入、短输出)。
要求:小于 1 秒的 TTFT,10~50 个并发会话,高精度(FP16/BF16),7B~13B 参数的中型模型。
内存推荐:7B~8B 模型约需 24GB,13B 模型约需 48GB。
生命科学(面向药物研发的 AI 智能体):
特征:处理全文科学论文(极长的上下文)。
要求:小于 2 秒的 TTFT,20~30 个并发用户,高精度,支持 16K~32K Token 的长上下文模型。
内存推荐:单单元超 80GB 的极高内存容量。
媒体与营销(实时内容生成):
特征:根据简短的摘要生成个性化邮件或广告文案。
要求:小于 1 秒的 TTFT,活动期间 50~100+ 的并发用户,FP16,通用指令微调后的 3B~7B 模型。
内存推荐:每块 GPU 16~24GB。
技术咨询(大规模翻译平台):
特征:为全球团队翻译代码和文档(每次输入输出各 1,000 个 Token)。
要求:较低的 TTFT,数百个并发请求,FP16 或 INT8,中到大规模的多语言及代码支持模型。
Mem 推荐:入门级 8GB~16GB GPU(适合在分布式云环境中运行)。
用于 TCO 优化的模型优化方法
在优化 TCO 时,策略性地缩减模型的内存占用是极其有效的方法。一手信息按工作量由少到多顺序列出了三种手段。
1. 量化(Quantization)
通过降低数值精度(例如:从 FP16 降至 FP8/INT8),无需重新训练即可将内存占用减少 25%~50%。将浮点运算精度从 16 位降低到 8 位(1 字节)可使权重内存大约减半,从而能够采用更小的 GPU、扩大批处理大小并扩展 KV 缓存。 一手信息中给出了作为训练后量化(PTQ)示例的代码,使用了 NVIDIA Model Optimizer。
import torch
import modelopt.torch.quantization as mtq
from modelopt.torch.export import export_hf_checkpoint
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B-Instruct", dtype=torch.float16, device_map="auto"
).eval()
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")
def calibration_loop(model):
for prompt in ["Summarize this client email:", "What are the key risks here?"]:
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
model(**inputs)
model = mtq.quantize(model, mtq.FP8_DEFAULT_CFG, forward_loop=calibration_loop)
export_hf_checkpoint(model, export_dir="./llama-3.1-8b-fp8")
该 FP8 训练后量化表明,在无需重新训练的情况下,Llama-3.1-8B 的权重内存从 16.06GB 降至 9.08GB,减少了 43.5%。FP8 在推理中几乎是无损的,并且比 INT8 或 INT4 具有更宽的余量(Headroom),因此是推荐的起点。
2. 剪枝(Pruning)与知识蒸馏(Knowledge Distillation)
如果仅靠量化仍显不足,则会进行剪枝(深度方向和宽度方向的剪枝),以删除重要性较低的层或神经元。此外,还将结合知识蒸馏,通过针对原始“教师模型”训练被剪枝的“学生模型”来恢复精度。由此,可以在硬件利用效率、电力以及运营开销方面实现持续的成本削减。

コメント