目录

  1. 引言
  2. LLaMA 模型介绍
  3. LLaMA 2 vs LLaMA 3
  4. 不同参数量对比
  5. 推理引擎适配
  6. 性能实测
  7. 实战部署案例
  8. 选型建议

引言

LLaMA 系列是最具影响力的开源大语言模型,从 LLaMA 到 LLaMA 3,推动了整个开源 AI 社区的发展。2023 年 2 月,Meta 发布了第一代 LLaMA,虽然仅限研究许可,但其出色的性能引发了开源社区的广泛关注。随后,LLaMA 2 于 2023 年 7 月发布,开放了商业使用许可,真正开启了开源 LLM 的黄金时代。2024 年 2 月,LLaMA 3 发布,带来了架构升级和性能飞跃,成为当时开源最强模型。

掌握 LLaMA 系列模型测试是 LLM 评估的基础。无论你是在选择生产部署的模型,还是在研究不同模型的特性,LLaMA 系列都是必须了解的基准。它的广泛采用意味着丰富的工具链、完善的文档、以及活跃的社区支持。

  • LLaMA 2 和 LLaMA 3 有什么区别? 架构改进、性能提升
  • 7B/13B/70B 如何选择? 精度与资源的权衡
  • 哪些推理引擎支持最好? vLLM/TensorRT-LLM/llama.cpp
  • 实际性能如何? 延迟、吞吐量实测数据
  • 如何选择最适合的模型? 场景需求决定

这些问题都指向一个核心主题:LLaMA 系列模型测试

LLaMA 系列演进

┌─────────────────────────────────────────────────────────────────────┐
│                     LLaMA 系列演进史                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  2023.02: LLaMA (第一代)                                            │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  模型:7B/13B/33B/65B                                       │   │
│  │  特点:开创性开源,性能接近 GPT-3                            │   │
│  │  限制:研究许可,非商业用途                                  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↓                                      │
│  2023.07: LLaMA 2 (第二代)                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  模型:7B/13B/70B                                           │   │
│  │  特点:商业可用,RLHF 对齐,上下文 4K                        │   │
│  │  改进:+40% 训练数据,更好的对话能力                         │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↓                                      │
│  2024.02: LLaMA 3 (第三代)                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  模型:8B/70B/405B                                          │   │
│  │  特点:架构升级,上下文 8K,代码能力增强                     │   │
│  │  改进:GQA 注意力,更高效的推理                              │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↓                                      │
│  2024.07: LLaMA 3.1 (优化版)                                        │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  模型:8B/70B/405B                                          │   │
│  │  特点:上下文 128K,工具调用,多语言                         │   │
│  │  改进:更好的指令遵循,降低幻觉                              │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

LLaMA 模型介绍

理解了 LLaMA 系列的发展历程后,让我们深入了解 LLaMA 3 的架构特性。LLaMA 3 相比 LLaMA 2 有多项重要改进,这些改进直接影响了推理性能和部署方式。

LLaMA 3 架构

LLaMA 3 的基础架构采用 Transformer Decoder-only 设计,这是当前 LLM 的标准架构。GQA(Grouped Query Attention)是 LLaMA 3 的关键改进之一,相比 LLaMA 2 的 MHA(Multi-Head Attention),GQA 将 query 头分组共享 key/value 头,显著降低了 KV Cache 的显存占用,提升了推理速度。

词表方面,LLaMA 3 使用了 128k token 词表,相比 LLaMA 2 的 32k 扩大了 4 倍。这使得 LLaMA 3 能更好地支持多语言和代码生成。上下文长度方面,LLaMA 3 支持 8192 tokens,LLaMA 3.1 更是扩展到 131072 tokens(128K),可以处理长文档和长对话。

训练数据方面,LLaMA 3 使用了超过 15T tokens 的训练数据,是 LLaMA 2 的 7.5 倍。更多的训练数据直接带来了性能提升。数据截止到 2023 年,确保了知识的时效性。

模型规格对比表显示了 LLaMA 3 系列的完整阵容。8B 模型适合轻量级应用,70B 模型是标准选择,405B 模型则是超大模型,需要多卡部署。LLaMA 3.1 系列在保持相同参数量的情况下,将上下文扩展到 128K,适合长文本应用。

├─────────────────────────────────────────────────┤
│                                                 │
│  基础架构:                                      │
│  ├── Transformer Decoder-only                  │
│  ├── GQA (Grouped Query Attention)            │
│  ├── SwiGLU 激活函数                           │
│  └── RoPE 位置编码                             │
│                                                 │
│  词表:                                          │
│  ├── 128k token 词表                           │
│  ├── 支持多语言                                │
│  └── 更好的代码 token 化                         │
│                                                 │
│  上下文:                                        │
│  ├── LLaMA 3: 8192 tokens                     │
│  ├── LLaMA 3.1: 131072 tokens (128K)          │
│  └── 使用 RoPE 插值扩展                          │
│                                                 │
│  训练数据:                                      │
│  ├── LLaMA 3: >15T tokens                     │
│  ├── LLaMA 3.1: >15T tokens                   │
│  └── 截止 2023 年数据                            │
│                                                 │
└─────────────────────────────────────────────────┘

模型规格对比

┌────────────────────────────────────────────────────────────────────┐
│                    LLaMA 3 系列模型规格                             │
├──────────────┬─────────────┬─────────────┬─────────────┬──────────┤
│   模型        │   参数量     │   激活参数   │   上下文     │   用途    │
│              │   (B)       │   (B)       │   (tokens)  │          │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│ LLaMA-3-8B   │   8         │   8         │   8K        │   轻量   │
│ LLaMA-3-70B  │   70        │   70        │   8K        │   标准   │
│ LLaMA-3-405B │   405       │   405       │   8K        │   超大   │
│ LLaMA-3.1-8B │   8         │   8         │   128K      │   长文本 │
│ LLaMA-3.1-70B│   70        │   70        │   128K      │   长文本 │
│ LLaMA-3.1-405B│  405       │   405       │   128K      │   超长   │
└──────────────┴─────────────┴─────────────┴─────────────┴──────────┘

注:LLaMA 3 采用 GQA,推理效率高于 LLaMA 2 的 MHA

LLaMA 2 vs LLaMA 3

LLaMA 3 相比 LLaMA 2 有显著提升,理解这些差异有助于你选择合适的模型版本。虽然 LLaMA 2 仍然是一个不错的选择,但在大多数场景下,LLaMA 3 提供了更好的性能和功能。

架构差异

注意力机制是 LLaMA 3 的核心改进之一。LLaMA 2 使用 MHA(Multi-Head Attention),每个 query 头都有独立的 key 和 value 头。LLaMA 3 使用 GQA(Grouped Query Attention),多个 query 头共享一组 key/value 头。这种设计将 KV Cache 的显存占用减少了 40-50%,推理速度提升了约 30%。

词表大小从 32k 扩展到 128k,使得 LLaMA 3 能更好地支持多语言和代码生成。上下文长度从 4K 扩展到 8K(LLaMA 3.1 扩展到 128K),可以处理更长的输入。训练数据从 2T tokens 增加到 15T tokens,7.5 倍的增长直接带来了性能提升。对齐优化方面,LLaMA 3 使用了改进的 RLHF 和 DPO 技术,指令遵循能力更好,幻觉更少。

性能对比数据显示,LLaMA 3 在各基准测试上均有显著提升。MMLU(综合知识)从 45.8% 提升到 68.4%,提升 22.6%。GSM8K(数学)从 27.5% 提升到 52.0%,提升 24.5%。HumanEval(代码)从 14.6% 提升到 62.2%,提升 47.6%,这是最显著的改进。ARC-C(科学)和 TruthfulQA(真实性)也有显著提升。

├─────────────────────────────────────────────────┤
│                                                 │
│  注意力机制:                                    │
│  ├── LLaMA 2: MHA (Multi-Head Attention)      │
│  ├── LLaMA 3: GQA (Grouped Query Attention)   │
│  └── 效果:GQA 显存减少 40-50%,速度提升 30%    │
│                                                 │
│  词表大小:                                      │
│  ├── LLaMA 2: 32k tokens                      │
│  ├── LLaMA 3: 128k tokens                     │
│  └── 效果:更好的多语言和代码支持              │
│                                                 │
│  上下文长度:                                    │
│  ├── LLaMA 2: 4096 tokens                     │
│  ├── LLaMA 3: 8192 tokens                     │
│  └── LLaMA 3.1: 131072 tokens (128K)          │
│                                                 │
│  训练数据:                                      │
│  ├── LLaMA 2: ~2T tokens                      │
│  ├── LLaMA 3: ~15T tokens                     │
│  └── 效果:7.5x 更多训练数据                    │
│                                                 │
│  对齐优化:                                      │
│  ├── LLaMA 2: RLHF                            │
│  ├── LLaMA 3: 改进的 RLHF + DPO               │
│  └── 效果:更好的指令遵循,更少幻觉            │
│                                                 │
└─────────────────────────────────────────────────┘

性能对比

┌────────────────────────────────────────────────────────────────────┐
│                LLaMA 2 vs LLaMA 3 性能对比                          │
├──────────────────┬─────────────┬─────────────┬─────────────────────┤
│   Benchmark       │   LLaMA-2-7B│   LLaMA-3-8B│   提升               │
├──────────────────┼─────────────┼─────────────┼─────────────────────┤
│   MMLU           │   45.8%     │   68.4%     │   +22.6%            │
│   GSM8K (数学)    │   27.5%     │   52.0%     │   +24.5%            │
│   HumanEval (代码)│   14.6%     │   62.2%     │   +47.6%            │
│   ARC-C          │   39.2%     │   60.0%     │   +20.8%            │
│   TruthfulQA     │   33.5%     │   50.0%     │   +16.5%            │
└──────────────────┴─────────────┴─────────────┴─────────────────────┘

注:LLaMA 3 在各基准测试上均有显著提升,尤其是代码和数学能力

不同参数量对比

选择合适参数量的模型是部署决策的关键。参数量越大,模型能力越强,但资源需求也越高。理解不同参数量模型的特点,可以帮助你做出合适的选择。

7B/8B vs 13B vs 70B

8B 模型(轻量级)适合资源受限场景。显存需求:FP16 约 16GB,INT4 约 6GB。推理速度:100-150 tok/s(A100)。适用场景包括个人使用、开发测试、简单问答、文本生成、资源受限环境。优势是速度快、成本低。

13B 模型(中量级,LLaMA 2)在质量和成本之间取得平衡。显存需求:FP16 约 26GB,INT4 约 10GB。推理速度:60-90 tok/s(A100)。适用场景包括企业应用、中等复杂度任务、内容创作、代码辅助、需要更好质量的场景。

70B 模型(重量级)提供最佳质量。显存需求:FP16 约 140GB,INT4 约 48GB。推理速度:20-40 tok/s(单卡 H100),需要多卡并行。适用场景包括复杂推理、专业领域、高质量内容生成、生产环境关键应用。优势是最佳质量,接近 GPT-4 水平。

405B 模型(超大,LLaMA 3)是开源最强性能。显存需求:FP16 约 810GB,INT4 约 240GB,需要多卡并行。适用场景包括最复杂任务、研究与前沿应用、需要 SOTA 性能的场景。

显存需求计算脚本可以帮助你估算不同配置的显存需求。通过指定模型参数量、量化类型、上下文长度,脚本会计算权重显存、KV Cache 显存、激活显存、以及总显存。这对于容量规划很有帮助。

├─────────────────────────────────────────────────┤
│                                                 │
│  8B 模型 (轻量级):                              │
│  ├── 显存需求:FP16 ~16GB, INT4 ~6GB          │
│  ├── 推理速度:100-150 tok/s (A100)           │
│  ├── 适用场景:                                  │
│  │   ├── 个人使用/开发测试                    │
│  │   ├── 简单问答/文本生成                    │
│  │   └── 资源受限环境                         │
│  └── 优势:速度快,成本低                      │
│                                                 │
│  13B 模型 (中量级 - LLaMA 2):                    │
│  ├── 显存需求:FP16 ~26GB, INT4 ~10GB         │
│  ├── 推理速度:60-90 tok/s (A100)             │
│  ├── 适用场景:                                  │
│  │   ├── 企业应用/中等复杂度任务              │
│  │   ├── 内容创作/代码辅助                    │
│  │   └── 需要更好质量的场景                   │
│  └── 优势:质量与成本平衡                      │
│                                                 │
│  70B 模型 (重量级):                             │
│  ├── 显存需求:FP16 ~140GB, INT4 ~48GB        │
│  ├── 推理速度:20-40 tok/s (单卡 H100)        │
│  ├── 适用场景:                                  │
│  │   ├── 复杂推理/专业领域                    │
│  │   ├── 高质量内容生成                       │
│  │   └── 生产环境关键应用                     │
│  └── 优势:最佳质量,接近 GPT-4                │
│                                                 │
│  405B 模型 (超大 - LLaMA 3):                     │
│  ├── 显存需求:FP16 ~810GB, INT4 ~240GB       │
│  ├── 推理速度:需多卡并行                      │
│  ├── 适用场景:                                  │
│  │   ├── 最复杂任务                           │
│  │   ├── 研究与前沿应用                       │
│  │   └── 需要 SOTA 性能的场景                   │
│  └── 优势:开源最强性能                        │
│                                                 │
└─────────────────────────────────────────────────┘

显存需求计算

#!/usr/bin/env python3
# calculate_memory_requirement.py - 显存需求计算

def calculate_vram(model_size_b: int, quantization: str, context: int = 4096):
    """
    计算显存需求
    
    参数:
        model_size_b: 模型参数量 (B)
        quantization: 量化类型 (fp16/int8/int4)
        context: 上下文长度
    """
    
    # 权重显存
    if quantization == 'fp16':
        bytes_per_param = 2
    elif quantization == 'int8':
        bytes_per_param = 1
    elif quantization == 'int4':
        bytes_per_param = 0.5
    else:
        raise ValueError(f"未知量化类型:{quantization}")
    
    weight_memory = model_size_b * 1e9 * bytes_per_param / 1e9  # GB
    
    # KV Cache 显存 (估算)
    # 假设:hidden_size = 4096, num_layers = 32
    kv_cache_per_token = 4 * 4096 * 32 * 2 / 1e9  # GB per token per batch
    kv_cache_memory = kv_cache_per_token * context * 1  # batch=1
    
    # 激活显存 (估算)
    activation_memory = weight_memory * 0.2  # 约 20%
    
    # 总显存
    total_memory = weight_memory + kv_cache_memory + activation_memory
    
    return {
        'weight_gb': round(weight_memory, 1),
        'kv_cache_gb': round(kv_cache_memory, 1),
        'activation_gb': round(activation_memory, 1),
        'total_gb': round(total_memory, 1)
    }

def main():
    print("="*70)
    print("LLaMA 模型显存需求计算")
    print("="*70)
    
    models = [
        (8, 'LLaMA-3-8B'),
        (70, 'LLaMA-3-70B'),
        (405, 'LLaMA-3-405B'),
    ]
    
    quants = ['fp16', 'int8', 'int4']
    
    for size, name in models:
        print(f"\n{name}:")
        print("-"*70)
        print(f"{'量化':<10} {'权重':<10} {'KV Cache':<12} {'激活':<10} {'总计':<10}")
        print("-"*70)
        
        for quant in quants:
            result = calculate_vram(size, quant)
            print(f"{quant:<10} {result['weight_gb']:<10.1f} "
                  f"{result['kv_cache_gb']:<12.1f} {result['activation_gb']:<10.1f} "
                  f"{result['total_gb']:<10.1f}")

if __name__ == "__main__":
    main()

推理引擎适配

LLaMA 系列作为最流行的开源模型,得到了所有主流推理引擎的完善支持。选择合适的推理引擎可以显著提升性能和易用性。

各引擎支持情况

各引擎对 LLaMA 的支持情况如下:vLLM 对 LLaMA 2/3/3.1 都有完善支持,是推荐选择。TensorRT-LLM 对 LLaMA 2/3 有完善支持,对 LLaMA 3.1 支持中,提供高性能。SGLang 对 LLaMA 2/3/3.1 都有支持,适合结构化生成场景。llama.cpp 对 LLaMA 2/3/3.1 都有完善支持,适合 CPU 推理。TGI 对 LLaMA 2/3/3.1 都有支持,是 HuggingFace 官方方案。

vLLM 部署 LLaMA 3 的脚本展示了如何使用 vLLM 启动 LLaMA 3 服务。配置包括模型名称、端口、张量并行数、最大序列长度、显存利用率、以及分块预填充。启动后,服务提供 OpenAI API 兼容接口。

llama.cpp 部署 LLaMA 3 的脚本展示了如何在 CPU 或混合模式下运行 LLaMA 3。配置包括 GGUF 模型路径、端口、GPU 层数、上下文大小、批处理大小。这使得 LLaMA 3 可以在无 GPU 或有限 GPU 的设备上运行。

├──────────────┬─────────────┬─────────────┬─────────────┬──────────┤
│   引擎        │   LLaMA 2    │   LLaMA 3    │   LLaMA 3.1  │   备注    │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│   vLLM       │   ✓ 完善    │   ✓ 完善    │   ✓ 完善    │   推荐    │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│   TensorRT   │   ✓ 完善    │   ✓ 完善    │   ✓ 支持    │   高性能  │
│   -LLM       │             │             │             │          │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│   SGLang     │   ✓ 支持    │   ✓ 支持    │   ✓ 支持    │   结构化  │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│   llama.cpp  │   ✓ 完善    │   ✓ 完善    │   ✓ 完善    │   CPU     │
├──────────────┼─────────────┼─────────────┼─────────────┼──────────┤
│   TGI        │   ✓ 支持    │   ✓ 支持    │   ✓ 支持    │   HF 官方  │
└──────────────┴─────────────┴─────────────┴─────────────┴──────────┘

vLLM 部署 LLaMA 3

#!/bin/bash
# deploy_llama3_vllm.sh - vLLM 部署 LLaMA 3

echo "=========================================="
echo "  vLLM 部署 LLaMA 3"
echo "=========================================="

# 配置
MODEL=${MODEL:-"meta-llama/Meta-Llama-3-8B-Instruct"}
PORT=${PORT:-8000}
TP_SIZE=${TP_SIZE:-1}

echo ""
echo "部署配置:"
echo "  模型:$MODEL"
echo "  端口:$PORT"
echo "  张量并行:$TP_SIZE"
echo ""

# 启动服务
python3 -m vllm.entrypoints.openai.api_server \
    --model $MODEL \
    --host 0.0.0.0 \
    --port $PORT \
    --tensor-parallel-size $TP_SIZE \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9 \
    --enable-chunked-prefill \
    --served-model-name llama-3

echo ""
echo "=========================================="
echo "  LLaMA 3 服务已启动"
echo "=========================================="
echo ""
echo "API 端点:http://localhost:$PORT/v1"
echo "测试:curl http://localhost:$PORT/v1/models"

llama.cpp 部署 LLaMA 3

#!/bin/bash
# deploy_llama3_llamacpp.sh - llama.cpp 部署 LLaMA 3

echo "=========================================="
echo "  llama.cpp 部署 LLaMA 3"
echo "=========================================="

# 配置
MODEL=${MODEL:-"~/.cache/llama.cpp/models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf"}
PORT=${PORT:-8080}
N_GPU=${N_GPU:-35}

echo ""
echo "部署配置:"
echo "  模型:$MODEL"
echo "  端口:$PORT"
echo "  GPU 层数:$N_GPU"
echo ""

# 启动服务
cd /opt/llama.cpp
./server \
    -m $MODEL \
    --host 0.0.0.0 \
    --port $PORT \
    -ngl $N_GPU \
    -c 8192 \
    --batch-size 512

echo ""
echo "=========================================="
echo "  LLaMA 3 服务已启动"
echo "=========================================="

性能实测

部署好 LLaMA 模型后,需要进行性能测试以验证配置是否正确,以及性能是否达到预期。性能测试包括吞吐量测试和延迟测试。

吞吐量测试

吞吐量测试脚本通过发送多个请求到 vLLM 服务,测量平均延迟、P95 延迟、总 token 数、以及吞吐量(tokens/s)。测试结果可以与官方参考值对比,如果性能明显低于预期,可能存在配置问题或硬件瓶颈。

性能参考表提供了不同配置下的预期性能。LLaMA-3-8B 在 FP16、batch=1 时吞吐量约 140-160 tokens/s,延迟 35-45ms。INT4 量化后,吞吐量提升到 200-240 tokens/s,延迟降低到 25-35ms。batch=32 时,吞吐量可达 2800-3200 tokens/s。

LLaMA-3-70B 需要多卡部署。FP16、8 卡 TP 时吞吐量约 80-100 tokens/s,延迟 80-120ms。INT4、4 卡 TP 时吞吐量约 120-150 tokens/s,延迟 60-90ms。INT4、8 卡 TP 时吞吐量约 200-250 tokens/s,延迟 50-70ms。

LLaMA-3.1-70B 在 INT4、8 卡 TP 时吞吐量约 180-220 tokens/s,延迟 60-80ms。启用 128K 上下文后,吞吐量略降到 150-180 tokens/s,延迟略增到 80-100ms。

import time
import requests
import statistics

def test_throughput(base_url: str, model: str, num_requests: int = 100):
    """吞吐量测试"""
    
    print("="*70)
    print(f"LLaMA 3 吞吐量测试 ({model})")
    print("="*70)
    
    prompt = "请介绍一下人工智能的基本概念。"
    
    latencies = []
    tokens_generated = []
    
    for i in range(num_requests):
        start = time.perf_counter()
        
        response = requests.post(
            f"{base_url}/v1/chat/completions",
            json={
                "model": model,
                "messages": [{"role": "user", "content": prompt}],
                "max_tokens": 100,
                "temperature": 0.7
            }
        )
        
        elapsed = time.perf_counter() - start
        
        if response.status_code == 200:
            data = response.json()
            content = data['choices'][0]['message']['content']
            tokens = len(content.split())
            
            latencies.append(elapsed * 1000)
            tokens_generated.append(tokens)
            
            if (i + 1) % 10 == 0:
                print(f"  完成 {i+1}/{num_requests} 请求")
        else:
            print(f"  请求失败:{response.status_code}")
    
    # 统计
    avg_latency = statistics.mean(latencies)
    p95_latency = sorted(latencies)[int(len(latencies) * 0.95)]
    total_tokens = sum(tokens_generated)
    total_time = sum(latencies) / 1000
    tokens_per_sec = total_tokens / total_time
    
    print()
    print("="*70)
    print("测试结果:")
    print(f"  平均延迟:{avg_latency:.1f} ms")
    print(f"  P95 延迟:{p95_latency:.1f} ms")
    print(f"  总 Tokens: {total_tokens}")
    print(f"  吞吐量:{tokens_per_sec:.1f} tokens/s")
    print("="*70)

if __name__ == "__main__":
    test_throughput("http://localhost:8000", "llama-3")

性能参考值

┌────────────────────────────────────────────────────────────────────┐
│                LLaMA 3 推理性能参考 (A100 80GB)                      │
├──────────────────┬─────────────┬─────────────┬─────────────────────┤
│   配置            │   吞吐量    │   延迟      │   显存占用          │
│                  │   (tok/s)   │   (ms)      │   (GB)              │
├──────────────────┼─────────────┼─────────────┼─────────────────────┤
│ LLaMA-3-8B       │             │             │                     │
│   FP16, batch=1  │   140-160   │   35-45     │   16-18             │
│   INT4, batch=1  │   200-240   │   25-35     │   8-10              │
│   INT4, batch=32 │   2800-3200 │   150-200   │   12-14             │
├──────────────────┼─────────────┼─────────────┼─────────────────────┤
│ LLaMA-3-70B      │             │             │                     │
│   FP16, 8xTP     │   80-100    │   80-120    │   140-160           │
│   INT4, 4xTP     │   120-150   │   60-90     │   60-80             │
│   INT4, 8xTP     │   200-250   │   50-70     │   60-80             │
├──────────────────┼─────────────┼─────────────┼─────────────────────┤
│ LLaMA-3.1-70B    │             │             │                     │
│   INT4, 8xTP     │   180-220   │   60-80     │   70-90             │
│   INT4, 8xTP,128K│   150-180   │   80-100    │   90-110            │
└──────────────────┴─────────────┴─────────────┴─────────────────────┘

注:测试条件 vLLM/TensorRT-LLM,实际性能受配置影响

实战部署案例

理解了 LLaMA 模型的特性和性能后,让我们看看实际部署案例。根据模型大小和硬件条件,部署方案有所不同。

单卡 8B 部署

单卡 8B 部署是最简单的场景。Docker Compose 配置包括:vLLM 镜像、GPU 资源配置、端口映射、模型缓存卷、以及启动命令。启动命令指定模型名称、张量并行数(1)、最大序列长度(8192)、显存利用率(0.9)、最大并发请求数(256)。健康检查确保服务可用。

多卡 70B 部署需要 8 卡并行。配置类似,但 GPU 数量改为 8,张量并行数也改为 8。这需要数据中心级的硬件,如 8 卡 A100 或 H100 服务器。

本地 CPU 部署(8B INT4)适合无 GPU 场景。脚本首先下载预量化的 GGUF 模型,然后使用 llama.cpp 启动服务。配置包括模型路径、主机地址、端口、上下文大小、线程数。预期速度 30-50 tokens/s(16 核 CPU),对于个人使用已经足够。

version: '3.8'

services:
  llama3-8b:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    ports:
      - "8000:8000"
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    command: >
      --model meta-llama/Meta-Llama-3-8B-Instruct
      --tensor-parallel-size 1
      --max-model-len 8192
      --gpu-memory-utilization 0.9
      --max-num-seqs 256
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped

多卡 70B 部署

# docker-compose.llama3-70b.yaml

version: '3.8'

services:
  llama3-70b:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 8
              capabilities: [gpu]
    ports:
      - "8000:8000"
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    command: >
      --model meta-llama/Meta-Llama-3-70B-Instruct
      --tensor-parallel-size 8
      --max-model-len 8192
      --gpu-memory-utilization 0.9
      --max-num-seqs 256
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped

本地 CPU 部署 (8B INT4)

#!/bin/bash
# deploy_llama3_cpu.sh - CPU 部署 LLaMA 3 8B

echo "=========================================="
echo "  CPU 部署 LLaMA 3 8B (INT4)"
echo "=========================================="

# 下载模型
huggingface-cli download bartowski/Meta-Llama-3-8B-Instruct-GGUF \
    Meta-Llama-3-8B-Instruct-Q4_K_M.gguf \
    --local-dir ~/.cache/llama.cpp/models

# 启动服务
cd /opt/llama.cpp
./server \
    -m ~/.cache/llama.cpp/models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf \
    --host 0.0.0.0 \
    --port 8080 \
    -c 4096 \
    -t 16

echo ""
echo "=========================================="
echo "  LLaMA 3 8B CPU 服务已启动"
echo "=========================================="
echo ""
echo "API 端点:http://localhost:8080"
echo "预期速度:30-50 tokens/s (16 核 CPU)"

选型建议

选择合适的 LLaMA 模型需要考虑场景需求、硬件条件、以及预算限制。下面的选型建议可以帮助你做出合适的选择。

场景推荐

个人使用/开发测试场景推荐 LLaMA-3-8B(INT4)。显存需求 6-8GB,硬件要求单卡 RTX 3060/4060。用途包括学习、原型开发、简单应用。

中小企业应用场景推荐 LLaMA-3-8B(FP16)或 LLaMA-3-70B。显存需求 16GB 或 48-80GB。硬件要求单卡 A10 或多卡 A100。用途包括客服系统、内容生成、知识问答。

大型企业应用推荐 LLaMA-3-70B(INT4/FP16)。显存需求 80-160GB。硬件要求 4-8 卡 A100/H100。用途包括核心业务、复杂推理、高质量生成。

研究与 SOTA 推荐 LLaMA-3.1-405B。显存需求 240-810GB。硬件要求 16-64 卡 H100。用途包括前沿研究、最复杂任务。

边缘/本地部署推荐 LLaMA-3-8B(INT4,llama.cpp)。显存需求 6GB 或 CPU。硬件要求笔记本/台式机 CPU。用途包括隐私敏感、离线场景、个人助手。

成本估算表显示了不同配置的硬件成本、云成本、以及电费(自建)。8B 单卡(RTX4090)硬件成本约1,600,云成本1,600,云成本300-500/月,电费50−80/月。70B8卡(A100)硬件成本约50−80/月。70B8卡(A100)硬件成本约80,000,云成本8,000−12,000/月,电费8,000−12,000/月,电费800-1,200/月。70B 8 卡(H100)硬件成本约240,000,云成本240,000,云成本20,000-30,000/月,电费$1,500-2,000/月。

├─────────────────────────────────────────────────┤
│                                                 │
│  个人使用/开发测试:                             │
│  ├── 推荐:LLaMA-3-8B (INT4)                   │
│  ├── 显存:6-8GB                               │
│  ├── 硬件:单卡 RTX 3060/4060                   │
│  └── 用途:学习、原型开发、简单应用            │
│                                                 │
│  中小企业应用:                                  │
│  ├── 推荐:LLaMA-3-8B (FP16) 或 LLaMA-3-70B    │
│  ├── 显存:16GB 或 48-80GB                      │
│  ├── 硬件:单卡 A10 或 多卡 A100                │
│  └── 用途:客服系统、内容生成、知识问答        │
│                                                 │
│  大型企业应用:                                  │
│  ├── 推荐:LLaMA-3-70B (INT4/FP16)             │
│  ├── 显存:80-160GB                            │
│  ├── 硬件:4-8 卡 A100/H100                     │
│  └── 用途:核心业务、复杂推理、高质量生成      │
│                                                 │
│  研究与 SOTA:                                   │
│  ├── 推荐:LLaMA-3.1-405B                      │
│  ├── 显存:240-810GB                           │
│  ├── 硬件:16-64 卡 H100                        │
│  └── 用途:前沿研究、最复杂任务                │
│                                                 │
│  边缘/本地部署:                                 │
│  ├── 推荐:LLaMA-3-8B (INT4, llama.cpp)        │
│  ├── 显存:6GB 或 CPU                          │
│  ├── 硬件:笔记本/台式机 CPU                   │
│  └── 用途:隐私敏感、离线场景、个人助手        │
│                                                 │
└─────────────────────────────────────────────────┘

成本估算

┌────────────────────────────────────────────────────────────────────┐
│                    LLaMA 部署成本估算 (月)                          │
├──────────────────┬─────────────┬─────────────┬─────────────────────┤
│   配置            │   硬件成本   │   云成本    │   电费 (自建)       │
│                  │   (一次性)  │   (月租)    │   (月)              │
├──────────────────┼─────────────┼─────────────┼─────────────────────┤
│ 8B 单卡 (RTX4090)│   $1,600    │   $300-500  │   $50-80            │
│ 8B 单卡 (A10)    │   $4,000    │   $600-900  │   $80-120           │
│ 70B 8 卡 (A100)   │   $80,000   │   $8000-12K │   $800-1200         │
│ 70B 8 卡 (H100)   │   $240,000  │   $20K-30K  │   $1500-2000        │
└──────────────────┴─────────────┴─────────────┴─────────────────────┘

注:云成本参考 AWS/Azure/GCP,电费按$0.1/kWh 计算

总结

今天学到的内容

  1. ✅ LLaMA 模型介绍:架构演进、LLaMA 3 特性
  2. ✅ LLaMA 2 vs LLaMA 3:架构差异、性能对比
  3. ✅ 不同参数量对比:8B/70B/405B 选择指南
  4. ✅ 推理引擎适配:vLLM/TensorRT-LLM/llama.cpp
  5. ✅ 性能实测:吞吐量、延迟参考值
  6. ✅ 实战部署案例:单卡/多卡/CPU 部署
  7. ✅ 选型建议:场景推荐、成本估算

下一步

明天我们将学习 Day 20 - DeepSeek 模型测试,深入了解:

  • DeepSeek 模型特点
  • 推理性能测试
  • 中文场景优化
  • 与其他模型对比
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐