大模型推理成本是AI落地的核心瓶颈。一个70B模型在单卡A100上未优化时每千Token推理成本可达数分钱,优化后可降至毫厘级。这之间的差距不来自模型本身,而来自推理引擎的优化技术栈。本文从KV Cache机制、PagedAttention显存管理、连续批处理、量化压缩、投机解码到推理引擎选型,逐层拆解LLM推理优化的全链路技术。
一、LLM推理的瓶颈在哪里
1.1 自回归生成的本质困境
大模型推理是自回归过程——每生成一个Token,都需要把前面所有Token重新过一遍Attention计算。生成第N个Token时,需要计算它与前面所有N-1个Token的注意力。如果每一步都重算所有历史Token,复杂度是O(N^2),随着序列变长,推理速度指数级下降。
自回归生成过程(以5 Token为例):
Step 1: [T1] → 计算Q1*K1
Step 2: [T1, T2] → 计算Q2*K1, Q2*K2
Step 3: [T1, T2, T3] → 计算Q3*K1, Q3*K2, Q3*K3
Step 4: [T1, T2, T3, T4] → 计算Q4*K1...K4
Step 5: [T1, T2, T3, T4, T5] → 计算Q5*K1...K5
没有KV Cache时:每步都重算所有历史Token的K和V → O(N^2) 计算量
有KV Cache时:历史Token的K和V已缓存,只需算新Token → O(N) 计算量
1.2 两阶段:Prefill与Decode
|
阶段 |
计算特征 |
计算密集度 |
GPU利用率 |
瓶颈 |
耗时占比 |
|
Prefill(预填充) |
并行处理所有Prompt Token |
计算密集型 |
高(60-90%) |
计算量 |
20-40% |
|
Decode(解码) |
逐个生成Token |
访存密集型 |
低(5-15%) |
显存带宽 |
60-80% |
关键洞察:推理的瓶颈不在计算能力,而在显存带宽。Decode阶段每个Token只需要做一次矩阵向量乘法(GEMV),计算量极小,但需要读取整个模型权重和KV Cache。GPU的计算单元大部分时间在等待数据从显存搬过来。这就是为什么同样参数量的模型,小Batch Size时推理速度几乎一样——瓶颈在带宽不在算力。
二、KV Cache:推理加速的第一块基石
2.1 KV Cache的工作原理
┌─────────────────────────────────────────────────────┐
│ KV Cache 机制 │
│ │
│ Layer 0: [K0_cache] [V0_cache] │
│ Layer 1: [K1_cache] [V1_cache] │
│ ... │
│ Layer N: [KN_cache] [VN_cache] │
│ │
│ 生成新Token时: │
│ 1. 新Token的Q与所有层的K_cache做Attention │
│ 2. 用Attention权重和V_cache计算输出 │
│ 3. 新Token的K和V追加到Cache │
│ │
│ 优势:避免重算历史Token的K和V │
│ 代价:显存占用随序列长度线性增长 │
└─────────────────────────────────────────────────────┘
2.2 KV Cache的显存占用
KV Cache的显存占用公式:2 * num_layers * seq_len * hidden_dim * batch_size * dtype_size。以常见模型为例:
|
模型 |
参数量 |
层数 |
隐藏维度 |
KV Cache/Token |
4K序列总Cache |
模型权重 |
|
Llama-2-7B |
7B |
32 |
4096 |
1MB |
~4GB |
~14GB(FP16) |
|
Llama-2-13B |
13B |
40 |
5120 |
1.6MB |
~6.4GB |
~26GB(FP16) |
|
Llama-2-70B |
70B |
80 |
8192 |
5MB |
~20GB |
~140GB(FP16) |
|
Qwen-72B |
72B |
80 |
8192 |
5MB |
~20GB |
~144GB(FP16) |
|
DeepSeek-67B |
67B(MoE) |
61 |
7168 |
4.4MB |
~17GB |
~134GB(FP16) |
可以看到,70B模型处理4K序列时,KV Cache就要吃掉20GB显存——几乎和模型权重本身一样大。这就是为什么大模型推理对显存容量要求极高,也是PagedAttention等显存优化技术存在的原因。
2.3 GQA与KV Cache压缩
|
注意力机制 |
KV头数 |
KV Cache大小 |
代表模型 |
质量影响 |
|
MHA(标准多头) |
=Q头数 |
100% |
Llama-2-7B/13B |
无 |
|
MQA(多查询) |
1 |
1/Q头数 |
PaLM, StarCoder |
有明显质量损失 |
|
GQA(分组查询) |
分组数 |
组数/Q头数 |
Llama-2-70B, Qwen2 |
几乎无损 |
GQA是目前的主流选择——它在MHA和MQA之间取了折中。Llama-2-70B用GQA把KV头数从80减少到8,KV Cache缩小10倍,质量几乎无损。Qwen2系列也采用了GQA设计。选模型时,GQA架构的模型在推理成本上有显著优势。
三、PagedAttention:vLLM的核心创新
传统推理引擎的KV Cache管理有一个致命问题:预分配连续显存。每个请求一开始就分配最大序列长度的显存空间,实际可能只用了很小一部分,浪费巨大。
3.1 传统KV Cache管理的问题
传统方式(预分配连续显存):
请求A: [##########__________] 预分配4K, 实际用1K → 3K浪费
请求B: [####__________________] 预分配4K, 实实用0.5K → 3.5K浪费
请求C: [############__________] 预分配4K, 实际用2K → 2K浪费
→ 碎片化严重,显存利用率可能不到40%
→ 无法动态扩展(预分配后无法追加)
→ 多请求并发时显存浪费叠加
3.2 PagedAttention的解决方案
PagedAttention(类似操作系统的虚拟内存分页):
物理显存被划分为固定大小的Block(通常16 Token/Block)
每个请求的KV Cache通过Page Table映射到物理Block
Block可以不连续,按需分配
请求A: [Block0][Block1] 实际用2个Block = 32 Token空间
请求B: [Block2] 实际用1个Block = 16 Token空间
请求C: [Block3][Block4][Block5] 实际用3个Block = 48 Token空间
→ 零碎片化,显存利用率可达90%+
→ 按需分配,不需要预分配最大长度
→ 支持Copy-on-Write(beam search共享KV Cache)
|
维度 |
传统KV Cache |
PagedAttention |
收益 |
|
显存利用率 |
30-50% |
90%+ |
翻倍 |
|
碎片化 |
严重(外部+内部) |
无(按Block分配) |
消除 |
|
最大并发数 |
受预分配限制 |
受总显存限制 |
2-4倍提升 |
|
Beam Search |
每条路径独立KV Cache |
Copy-on-Write共享 |
大幅省显存 |
|
长序列支持 |
预分配可能不足 |
动态扩展 |
无上限 |
|
实现复杂度 |
简单 |
复杂(Page Table管理) |
代价 |
四、连续批处理:吞吐量提升的关键
4.1 静态批处理 vs 连续批处理
静态批处理(Static Batching):
→ 凑齐一个Batch后开始处理
→ 等Batch中所有请求都完成才能处理下一批
→ 短请求被长请求拖累,GPU空闲等待
时间线:
请求A: ████████████████████ (200 tokens)
请求B: ████ (50 tokens) → 等待A完成...
请求C: ████████ (80 tokens) → 等待A完成...
↑ Batch开始 ↑ Batch结束
连续批处理(Continuous Batching):
→ 请求完成后立即移出Batch
→ 新请求可以动态加入Batch
→ GPU几乎不空闲
时间线:
请求A: ████████████████████ (200 tokens)
请求B: ████→完成! 新请求D加入: ████████
请求C: ████████→完成! 新请求E加入: ████████████
↑ 持续运行, 无等待
|
维度 |
静态批处理 |
连续批处理 |
提升 |
|
GPU利用率 |
30-60% |
80-95% |
2-3倍 |
|
吞吐量(Tokens/s) |
基准 |
2-4倍 |
显著 |
|
请求延迟 |
高(等待凑批) |
低(立即加入) |
改善 |
|
长尾请求影响 |
拖累全批 |
不影响其他请求 |
隔离 |
|
实现复杂度 |
简单 |
复杂(动态调度) |
代价 |
五、量化压缩:用精度换成本
5.1 量化方法对比
|
量化方法 |
精度 |
加速比 |
显存节省 |
质量损失 |
支持硬件 |
适用场景 |
|
FP16(基准) |
16bit |
1x |
0% |
0% |
所有GPU |
基准 |
|
BF16 |
16bit |
1x |
0% |
0% |
Ampere+ |
训练+推理 |
|
INT8(权重) |
8bit |
1.5-2x |
50% |
0.5-1% |
所有GPU |
通用 |
|
GPTQ |
4bit |
2-3x |
75% |
1-2% |
所有GPU |
权重量化 |
|
AWQ |
4bit |
2-3x |
75% |
0.5-1.5% |
所有GPU |
权重+激活 |
|
GGUF/GGML |
4-8bit |
1.5-2.5x |
50-75% |
0.5-2% |
CPU+GPU |
本地部署 |
|
FP8(NVIDIA) |
8bit |
2x+ |
50% |
0.3-0.5% |
Hopper(H100) |
最新GPU |
|
INT4(GPU) |
4bit |
3x+ |
75% |
1-2% |
Ampere+ |
极致压缩 |
5.2 量化对质量的影响
|
模型 |
量化方法 |
原始MMLU |
量化后MMLU |
损失 |
可用性判断 |
|
Llama-2-13B |
FP16 |
56.9 |
56.9 |
0% |
基准 |
|
Llama-2-13B |
GPTQ-4bit |
56.9 |
55.3 |
1.6% |
可用 |
|
Llama-2-13B |
AWQ-4bit |
56.9 |
55.8 |
1.1% |
可用 |
|
Llama-2-13B |
GGUF-Q4 |
56.9 |
54.9 |
2.0% |
勉强可用 |
|
Llama-2-13B |
INT3 |
56.9 |
48.2 |
8.7% |
不可用 |
|
Llama-2-70B |
FP16 |
69.8 |
69.8 |
0% |
基准 |
|
Llama-2-70B |
GPTQ-4bit |
69.8 |
68.5 |
1.3% |
可用 |
|
Llama-2-70B |
AWQ-4bit |
69.8 |
69.1 |
0.7% |
推荐 |
实践建议:13B及以下模型用4bit量化要谨慎评估质量损失,70B以上模型用AWQ-4bit几乎无损,是当前性价比最高的部署方案。INT3量化在大多数场景下质量损失过大,不推荐生产使用。
六、投机解码:用小模型加速大模型
投机解码(Speculative Decoding)是2023年以来最重要的推理加速技术。核心思想:用一个小模型(Draft Model)快速生成草稿Token,大模型(Target Model)批量验证,验证通过的Token直接采用,不通过的从失败点重新生成。
投机解码工作流程:
Step 1: 小模型快速生成K个草稿Token
Draft: [T1'] [T2'] [T3'] [T4'] [T5']
Step 2: 大模型一次性验证这K个Token
Target: 验证T1'→T2'→T3'→T4'→T5'
结果: T1'✓ T2'✓ T3'✗ T4'? T5'?
Step 3: 采纳正确的, 丢弃错误的
采纳: T1' T2' T3(大模型生成)
丢弃: T4' T5'(T3'错, 后面的都不要)
Step 4: 从T3开始, 回到Step 1继续
净效果:大模型一次Forward就处理了3个Token(而非1个)
加速比取决于小模型的准确率(accept rate)
|
组件 |
角色 |
要求 |
典型选择 | ||||
|
Draft Model |
快速生成草稿 |
小(1B-7B)、快、与大模型词表对齐 |
同系列小模型/Trial Attention | ||||
|
Target Model |
验证草稿+生成修正 |
大(70B+)、质量高 |
被加速的目标大模型 | ||||
|
接受率 |
小模型预测准确率 |
越高加速越多 |
60-85%常见 | ||||
|
草稿长度K |
每次推测的Token数 |
太短收益小,太长浪费 |
4-8常见 | ||||
|
场景 |
传统解码速度 |
投机解码速度 |
加速比 |
注意事项 | |||
|
代码生成 |
50 tokens/s |
90-120 tokens/s |
2x+ |
小模型对代码预测较准 | |||
|
通用对话 |
50 tokens/s |
70-85 tokens/s |
1.4-1.7x |
开放对话预测难度中 | |||
|
创意写作 |
50 tokens/s |
55-65 tokens/s |
1.1-1.3x |
创意性内容预测难度高 | |||
|
格式化输出 |
50 tokens/s |
100-150 tokens/s |
2-3x |
JSON/SQL等结构化预测极准 | |||
七、推理引擎横向对比
|
引擎 |
开发语言 |
PagedAttention |
连续批处理 |
量化支持 |
投机解码 |
特点 |
|
vLLM |
Python/C++ |
原生(首创) |
原生 |
GPTQ/AWQ/INT8 |
支持 |
吞吐量最优 |
|
SGLang |
Python/C++ |
支持 |
原生 |
GPTQ/AWQ |
支持 |
复杂程序加速最优 |
|
TGI |
Rust/Python |
支持 |
原生 |
GPTQ/AWQ/INT8 |
支持 |
HuggingFace生态 |
|
TensorRT-LLM |
C++ |
支持 |
原生 |
INT8/FP8 |
支持 |
NVIDIA硬件最优 |
|
LMDeploy |
C++/Python |
支持 |
原生 |
INT4/INT8 |
支持 |
OpenMMLab生态 |
|
llama.cpp |
C++ |
不支持 |
简单批处理 |
GGUF全系列 |
不支持 |
CPU/边缘部署最优 |
|
Ollama |
Go |
不支持 |
简单批处理 |
GGUF |
不支持 |
本地极简部署 |
7.1 引擎选型矩阵
|
场景 |
推荐引擎 |
理由 |
|
高并发服务端 |
vLLM |
PagedAttention+连续批处理, 吞吐量最优 |
|
复杂程序化推理 |
SGLang |
RadixAttention重用, 编程式调用最优 |
|
NVIDIA H100/H200 |
TensorRT-LLM |
FP8量化+定制Kernel, 硬件性能榨干 |
|
CPU/本地部署 |
llama.cpp |
GGUF量化, CPU推理最优 |
|
极简本地部署 |
Ollama |
一键安装, 开箱即用 |
|
多模型统一管理 |
vLLM/TGI |
支持多模型加载和切换 |
|
边缘设备 |
llama.cpp |
极低资源占用 |
|
RAG批量处理 |
vLLM |
高吞吐连续批处理适合批量化 |
八、Python实战:推理性能基准测试套件
以下Python代码实现了一个LLM推理性能基准测试套件,覆盖延迟、吞吐量、显存占用和量化影响四个维度。可用于量化对比不同推理引擎和量化方案的实际表现。
import time
import torch
from dataclasses import dataclass, field
from typing import List, Optional, Callable, Dict
from enum import Enum
class PrecisionLevel(Enum):
FP32 = "fp32"
FP16 = "fp16"
BF16 = "bf16"
INT8 = "int8"
INT4 = "int4"
@dataclass
class InferenceConfig:
model_name: str
precision: PrecisionLevel = PrecisionLevel.FP16
batch_size: int = 1
max_seq_len: int = 2048
use_kv_cache: bool = True
use_paged_attention: bool = False
use_continuous_batching: bool = False
use_speculative: bool = False
draft_model: Optional[str] = None
draft_k: int = 4
gpu_mem_fraction: float = 0.9
@dataclass
class LatencyMetrics:
prefill_ms: float = 0.0
decode_per_token_ms: float = 0.0
first_token_ms: float = 0.0
total_ms: float = 0.0
@dataclass
class ThroughputMetrics:
tokens_per_sec: float = 0.0
requests_per_sec: float = 0.0
gpu_utilization: float = 0.0
gpu_memory_used_gb: float = 0.0
kv_cache_gb: float = 0.0
model_weights_gb: float = 0.0
@dataclass
class BenchmarkResult:
engine: str
config: InferenceConfig
latency: LatencyMetrics = field(default_factory=LatencyMetrics)
throughput: ThroughputMetrics = field(default_factory=ThroughputMetrics)
quality_score: Optional[float] = None
class LLMInferenceBenchmark:
"""LLM推理性能基准测试套件"""
def __init__(self):
self.results: List[BenchmarkResult] = []
def measure_latency(self, generate_fn: Callable, prompt: str,
max_new_tokens: int = 256) -> LatencyMetrics:
"""测量单请求延迟指标"""
metrics = LatencyMetrics()
# 测量 Prefill 阶段(首Token延迟)
t0 = time.time()
first_token_time = None
token_count = 0
for token in generate_fn(prompt, max_new_tokens):
if first_token_time is None:
first_token_time = time.time()
metrics.first_token_ms = (first_token_time - t0) * 1000
token_count += 1
total_time = time.time() - t0
metrics.total_ms = total_time * 1000
metrics.prefill_ms = metrics.first_token_ms
if token_count > 1:
decode_time = total_time - (first_token_time - t0)
metrics.decode_per_token_ms = (decode_time / (token_count - 1)) * 1000
return metrics
def measure_throughput(self, generate_batch_fn: Callable,
prompts: List[str], max_new_tokens: int = 256) -> ThroughputMetrics:
"""测量批量吞吐指标"""
metrics = ThroughputMetrics()
total_tokens = 0
t0 = time.time()
for tokens_list in generate_batch_fn(prompts, max_new_tokens):
total_tokens += len(tokens_list)
elapsed = time.time() - t0
metrics.tokens_per_sec = total_tokens / elapsed if elapsed > 0 else 0
metrics.requests_per_sec = len(prompts) / elapsed if elapsed > 0 else 0
if torch.cuda.is_available():
metrics.gpu_memory_used_gb = torch.cuda.memory_allocated() / 1e9
reserved = torch.cuda.memory_reserved() / 1e9
total_mem = torch.cuda.get_device_properties(0).total_memory / 1e9
metrics.gpu_utilization = reserved / total_mem if total_mem > 0 else 0
return metrics
def estimate_kv_cache_size(self, num_layers: int, hidden_dim: int,
seq_len: int, batch_size: int,
precision_bytes: int = 2) -> float:
"""估算KV Cache显存占用(GB)"""
cache_size = (2 * num_layers * seq_len * hidden_dim *
batch_size * precision_bytes)
return cache_size / 1e9
def estimate_model_size(self, num_params: float,
precision_bytes: int = 2) -> float:
"""估算模型权重显存占用(GB)"""
return (num_params * precision_bytes) / 1e9
def run_comparison(self, configs: List[InferenceConfig],
generate_fns: Dict[str, Callable]) -> str:
"""运行多配置对比测试"""
for config in configs:
for engine_name, fn in generate_fns.items():
print(f"\nTesting: {engine_name} | {config.model_name} | {config.precision.value}")
result = BenchmarkResult(engine=engine_name, config=config)
result.latency = self.measure_latency(fn, "Explain RAG architecture:", 256)
result.throughput = self.measure_throughput(fn, ["Prompt " * 10] * 8, 256)
result.throughput.kv_cache_gb = self.estimate_kv_cache_size(
num_layers=32, hidden_dim=4096, seq_len=config.max_seq_len,
batch_size=config.batch_size,
precision_bytes=self._precision_bytes(config.precision),
)
result.throughput.model_weights_gb = self.estimate_model_size(
num_params=7.0,
precision_bytes=self._precision_bytes(config.precision),
)
self.results.append(result)
return self.generate_report()
def _precision_bytes(self, precision: PrecisionLevel) -> int:
return {PrecisionLevel.FP32: 4, PrecisionLevel.FP16: 2,
PrecisionLevel.BF16: 2, PrecisionLevel.INT8: 1,
PrecisionLevel.INT4: 0}.get(precision, 2)
def generate_report(self) -> str:
lines = ["=" * 80]
lines.append("LLM Inference Benchmark Report")
lines.append("=" * 80)
lines.append("")
header = f"{'Engine':<12} {'Model':<16} {'Prec':<6} {'TTFT':>7} {'Decode':>7} {'Tok/s':>7} {'Req/s':>6} {'GPU GB':>7} {'KV GB':>6}"
lines.append(header)
lines.append("-" * 80)
for r in self.results:
line = (f"{r.engine:<12} {r.config.model_name:<16} {r.config.precision.value:<6} "
f"{r.latency.first_token_ms:>6.1f}ms {r.latency.decode_per_token_ms:>5.1f}ms "
f"{r.throughput.tokens_per_sec:>6.0f} {r.throughput.requests_per_sec:>5.1f} "
f"{r.throughput.gpu_memory_used_gb:>6.2f}G {r.throughput.kv_cache_gb:>5.2f}G")
lines.append(line)
return "\n".join(lines)
这套基准测试套件覆盖了推理优化的四个核心维度:首Token延迟(衡量Prefill效率)、单Token解码延迟(衡量Decode效率)、批量吞吐量(衡量并发处理能力)和显存占用(衡量资源效率)。通过对比不同引擎和量化配置的测试结果,可以量化各优化技术的实际收益。
九、显存优化策略对比
|
策略 |
原理 |
显存节省 |
速度影响 |
质量影响 |
实现复杂度 |
|
GQA/MQA |
减少KV头数 |
5-10x(KV Cache) |
无负面影响 |
GQA几乎无损 |
模型架构决定 |
|
量化(INT4/8) |
降低权重精度 |
2-4x(权重) |
正/负取决于硬件 |
0.5-2% |
低(后量化) |
|
PagedAttention |
分页管理KV Cache |
2x(利用率) |
无负面影响 |
无 |
高(引擎级) |
|
KV Cache量化 |
降低Cache精度 |
2x(KV Cache) |
轻微 |
0.5-1% |
中 |
|
Prefix Caching |
复用相同前缀Cache |
显著(重复Prompt) |
正面 |
无 |
中 |
|
Offloading |
权重/Cache卸载到CPU |
大量(显存) |
严重(带宽) |
无 |
中 |
|
模型并行(TP/PP) |
拆分到多卡 |
每卡减少 |
通信开销 |
无 |
高 |
十、企业部署优化路径
10.1 成本优化阶梯
|
阶段 |
优化措施 |
成本降幅 |
技术难度 |
建议时机 |
|
基线 |
FP16直接部署 |
0%(基准) |
低 |
PoC验证 |
|
第一步 |
AWQ-4bit量化 |
50-75% |
低 |
立即实施 |
|
第二步 |
vLLM+PagedAttention |
并发提升2-4倍 |
中 |
生产上线 |
|
第三步 |
连续批处理 |
吞吐再提升2-3倍 |
中 |
流量增长后 |
|
第四步 |
GQA模型选型 |
KV Cache减少5-10倍 |
低 |
选模型时 |
|
第五步 |
投机解码 |
延迟降低1.5-2x |
中高 |
延迟敏感场景 |
|
第六步 |
FP8(如H100) |
速度+显存再翻倍 |
中 |
有H100时 |
10.2 不同规模的成本估算
|
部署规模 |
模型 |
量化 |
硬件 |
月成本估算 |
可支撑QPS |
|
小型(百级) |
7B |
AWQ-4bit |
1xA10(24GB) |
~$200 |
10-20 |
|
中型(千级) |
13B |
AWQ-4bit |
1xA100(40GB) |
~$800 |
20-40 |
|
大型(万级) |
70B |
AWQ-4bit |
2xA100(80GB) |
~$3000 |
15-30 |
|
超大型 |
70B |
FP8 |
1xH100(80GB) |
~$2500 |
30-50 |
|
边缘部署 |
7B |
GGUF-Q4 |
CPU 32GB RAM |
~$50 |
1-5 |
十一、总结
|
维度 |
核心要点 |
|
推理瓶颈 |
Decode阶段是访存密集型,瓶颈在显存带宽而非算力 |
|
KV Cache |
缓存历史Token的K/V避免重算,但显存占用随序列线性增长 |
|
GQA |
分组查询注意力减少KV头数,Llama-2-70B/Qwen2等主流模型已采用 |
|
PagedAttention |
分页管理KV Cache,显存利用率从30%提升到90%+ |
|
连续批处理 |
动态进出Batch,GPU利用率从60%提升到95% |
|
量化 |
AWQ-4bit几乎无损,显存节省75%,是性价比最高的优化 |
|
投机解码 |
小模型生成草稿+大模型验证,结构化输出场景可达2-3x加速 |
|
引擎选型 |
vLLM吞吐最优/SGLang编程式最优/TensorRT-LLM硬件最优/llama.cpp边缘最优 |
|
优化路径 |
量化→PagedAttention→连续批处理→GQA选型→投机解码→FP8 |
|
成本优化 |
从FP16到AWQ-4bit+vLLM可降低总成本5-10倍 |
LLM推理优化不是单一技术,而是一套从模型架构到部署运维的全链路技术栈。理解KV Cache的工作原理是基础,掌握PagedAttention和连续批处理是生产部署的关键,选对量化方案是性价比最高的优化,投机解码是延迟敏感场景的加速利器。每一步优化都有其适用场景和代价,组合使用才能实现最优的推理成本。
对于企业来说,推理成本不是固定开支,而是可以通过技术优化持续降低的变量。一个70B模型从FP16裸部署到AWQ-4bit+vLLM+连续批处理的优化路径,可以在保持质量几乎无损的前提下将推理成本降低一个数量级。这个差距,往往决定了AI业务能否盈利。
紫宸策 | GEO咨询与企业AI落地实践
公众号:紫宸策

316

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



