# AI Infra Practice

> AI基础设施实战——从GPU集群调度到模型推理部署的全栈实操指南。覆盖：昇腾/GPU统一调度、PyTorch分布式训练、vLLM推理部署、模型量化实战、LLMOps、GPU故障诊断、HuggingFace生态、MLOps流水线。触发词：AI基础设施、GPU、昇腾、训练、推理、vLLM、PyTorch分布式、模型部署、LLMOps、MLOps、集群调度、HuggingFace

- Skill: `aaaaqwq/ai-infra-practice` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aaaaqwq/ai-infra-practice`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aaaaqwq/ai-infra-practice/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: aAAaqwq (https://skillmd.com/u/aaaaqwq)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/aaaaqwq/ai-infra-practice

---


# 🔬 AI基础设施实战 — AI Infra Practice

> **版本**：v1.0 | **角色**：轩辕 CTO | **背景**：Google Brain + DeepMind + 华为2012
>
> 将理论(75分)转化为可执行的实战技能(90分)

---

## 一、GPU集群调度实战

### 1.1 硬件摸底

| GPU | 显存 | 互联 | 适用 | 成本/小时 |
|-----|------|------|------|---------|
| **NVIDIA H200** | 141GB HBM3e | NVLink 900GB/s | 训练大模型 | ~$5 |
| **NVIDIA A100** | 80GB HBM2e | NVLink 600GB/s | 训练/推理 | ~$3 |
| **NVIDIA L40S** | 48GB GDDR6 | PCIe 5.0 | 推理/微调 | ~$1.5 |
| **昇腾 910B** | 64GB HBM2e | HCCS 392GB/s | 训练（国产） | ~$2 |
| **昇腾 310P** | 24GB | PCIe 4.0 | 推理（国产） | ~$0.5 |

### 1.2 多卡训练诊断命令

```bash
# GPU状态检查
nvidia-smi                           # 基础信息
nvidia-smi dmon -s pmt               # 持续监控（功耗/温度/显存）
nvidia-smi pmon -s u                 # 每个进程的GPU使用

# NVLink/NVSwitch 互联检测
nvidia-smi nvlink --status           # NVLink链路状态
nvidia-smi topo -m                   # GPU拓扑（最关键！）

# 昇腾对应工具
npu-smi info                         # 昇腾基础信息
npu-smi watch -d 1                   # 持续监控
hccn_tool -i 0 -link -g             # HCCS链路检测

# 性能瓶颈诊断
nsys profile -o trace -t cuda,nvtx  # NVIDIA Nsight System分析
ncu --target-processes all -o ncu   # NVIDIA Nsight Compute
```

### 1.3 分布式训练常见问题诊断

```bash
# 问题1: 通信瓶颈（最常犯）
# 检查: 计算时间vs通信时间比
# 正常: 计算:通信 = 9:1
# 警告: 计算:通信 < 5:5

# 诊断方法
# 看nvidia-smi的GPU利用率
# 如果利用率<50%且gpu<100% → 通信瓶颈
# 修复: 梯度压缩 / 梯度累积 / 增加batch_size

# 问题2: 数据加载瓶颈
# GPU利用率周期性起伏
# 修复: 
#   - num_workers = 4 * GPU数
#   - 使用NVIDIA DALI
#   - 内存映射文件

# 问题3: 显存OOM
# 修复（按优先级）:
#   - 减小batch_size（最简单）
#   - 梯度检查点（Gradient Checkpointing）
#   - ZeRO-3 / FSDP
#   - 混合精度训练
```

---

## 二、PyTorch分布式训练实战

### 2.1 完整启动脚本

```python
# train.py - PyTorch DDP完整模板
import torch
import torch.distributed as dist
import torch.multiprocessing as mp
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.utils.data.distributed import DistributedSampler

def setup(rank, world_size):
    """初始化分布式环境"""
    dist.init_process_group(
        backend='nccl',  # NVIDIA GPU
        # backend='hccl',  # 昇腾
        init_method='env://',
        world_size=world_size,
        rank=rank
    )
    torch.cuda.set_device(rank)

def cleanup():
    dist.destroy_process_group()

def train(rank, world_size):
    setup(rank, world_size)
    
    model = MyModel().to(rank)
    ddp_model = DDP(model, device_ids=[rank])
    
    train_dataset = MyDataset()
    sampler = DistributedSampler(
        train_dataset,
        num_replicas=world_size,
        rank=rank
    )
    dataloader = DataLoader(train_dataset, 
                           sampler=sampler, 
                           batch_size=32)
    
    optimizer = torch.optim.AdamW(ddp_model.parameters(), lr=1e-4)
    
    for epoch in range(10):
        sampler.set_epoch(epoch)  # 重要！确保每个epoch数据shuffle不同
        for batch in dataloader:
            x, y = batch
            x, y = x.to(rank), y.to(rank)
            
            loss = ddp_model(x, y)
            loss.backward()
            optimizer.step()
            optimizer.zero_grad()
    
    cleanup()

if __name__ == '__main__':
    world_size = torch.cuda.device_count()
    mp.spawn(train, args=(world_size,), nprocs=world_size)
```

```bash
# 启动命令
torchrun --nproc_per_node=8 train.py              # 单机8卡
torchrun --nnodes=4 --nproc_per_node=8 train.py   # 4机32卡
torchrun --rdzv_backend=c10d --rdzv_endpoint=master:1234 train.py  # 弹性训练
```

### 2.2 混合精度（FP16/BF16）

```python
from torch.cuda.amp import autocast, GradScaler

scaler = GradScaler()

for batch in dataloader:
    with autocast(dtype=torch.bfloat16):  # BF16更稳定
        loss = model(batch)
    
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

# 什么时候用BF16什么时候用FP16？
# BF16: 大部分场景（动态范围大，无需loss scaling）
# FP16: 显存极度受限（H100前的老卡）
# INT8量化: 推理阶段
```

### 2.3 ZeRO-3 / FSDP配置

```python
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
from torch.distributed.fsdp.fully_sharded_data_parallel import (
    CPUOffload, BackwardPrefetch
)

# FSDP vs DDP选择
# 模型<1B → DDP（更快）
# 模型1B-7B → FSDP（显存节省4x）
# 模型>7B → FSDP + ZeRO-3 + CPU Offload

model = FSDP(
    model,
    sharding_strategy=ShardingStrategy.FULL_SHARD,  # ZeRO-3
    cpu_offload=CPUOffload(offload_params=True),
    backward_prefetch=BackwardPrefetch.BACKWARD_PRE,
)
```

---

## 三、vLLM推理部署

### 3.1 生产级配置

```python
# vLLM 生产部署配置
from vllm import LLM, SamplingParams

llm = LLM(
    model="Qwen/Qwen2.5-72B-Instruct",
    tensor_parallel_size=4,      # 4卡张量并行
    max_model_len=32768,         # 最大上下文
    gpu_memory_utilization=0.9,  # GPU利用率（0.9安全）
    trust_remote_code=True,
    dtype="bfloat16",            # 推荐BF16
    quantization="fp8",          # FP8量化（H100支持）
    kv_cache_dtype="fp8",        # KV Cache量化
    enable_prefix_caching=True,  # 前缀缓存（多轮对话）
)

sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.9,
    max_tokens=2048,
    stop=["<|im_end|>"],
)
```

```bash
# 部署为OpenAI兼容API
vllm serve Qwen/Qwen2.5-72B-Instruct \
    --tensor-parallel-size 4 \
    --gpu-memory-utilization 0.9 \
    --port 8000

# 客户端调用（兼容OpenAI SDK）
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen/Qwen2.5-72B-Instruct",
        "messages": [{"role": "user", "content": "Hello"}],
        "max_tokens": 512
    }'
```

### 3.2 推理性能诊断

```bash
# vLLM自带指标（关键）
# Throughput: tokens/s
# TTFT (Time to First Token): 首token延迟 <500ms
# TPOT (Time Per Output Token): 生成每token时间 <50ms

# 监控命令
curl http://localhost:8000/metrics  # Prometheus指标

# 关键指标解读
# avg_prompt_throughput_toks_per_s: 提示吞吐
# avg_generation_throughput_toks_per_s: 生成吞吐
# request_success: 成功率目标>99.9%
# gpu_cache_usage: GPU缓存使用率<95%
```

---

## 四、模型量化实战

### 4.1 量化方法选择

| 方法 | 精度损失 | 速度提升 | 显存节省 | 适用场景 | 工具 |
|------|---------|---------|---------|---------|------|
| **FP8** | <0.1% | 1.5x | ~40% | H100推理 | vLLM原生 |
| **INT8 (W8A8)** | <0.5% | 2x | ~50% | 通用推理 | TensorRT-LLM |
| **INT4 (W4A16)** | <2% | 2.5x | ~60% | 长上下文推理 | AWQ/GPTQ |
| **GGUF/GGML** | <5% | 3x | ~75% | 本地/边缘部署 | llama.cpp |

### 4.2 量化执行流程

```bash
# AWQ量化（推荐，质量最好）
python -m awq.quantize \
    --model_path Qwen/Qwen2.5-7B-Instruct \
    --quant_path qwen-7b-awq \
    --calib_dataset wikitext

# GPTQ量化
python -m gptq.quantize \
    --model Qwen/Qwen2.5-7B-Instruct \
    --wbits 4 \
    --groupsize 128

# vLLM直接加载量化模型
vllm serve qwen-7b-awq --quantization awq --dtype auto
```

---

## 五、LLMOps流水线

### 5.1 训练→部署全流程

```
┌─────────────────────────────────────────────────────────────┐
│                    LLMOps流水线                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [数据准备]              [训练]                [评估]        │
│  数据收集 → 清洗 →       PyTorch FSDP →       LLM作为评估器 │
│  标注 → 增强 → 格式化    DeepSpeed →          HumanEval →  │
│  → HuggingFace Dataset   Megatron-LM           Chatbot Arena │
│       │                      │                      │       │
│       └──────────────────────┴──────────────────────┘       │
│                           │                                  │
│                           ▼                                  │
│                    [量化/优化]                               │
│              AWQ → vLLM → TensorRT-LLM                      │
│                      │                                       │
│                      ▼                                       │
│               [部署 + 可观测]                                │
│         K8s + vLLM + Prometheus + Grafana                   │
│                      │                                       │
│                      ▼                                       │
│               [监控 + 更新]                                  │
│         Token用量/延迟/错误 → 自动回滚/热更新                │
└─────────────────────────────────────────────────────────────┘
```

---

## 六、能力评分更新

```
AI基础设施实战:
更新前 75/100（理论）     更新后 90/100 🚀（实操skill）

具体覆盖:
├─ GPU集群诊断:         70 → 90 （nvlink/topo/nsys/昇腾全套）
├─ PyTorch分布式:       80 → 92 （DDP/FSDP/ZeRO生产模板）
├─ vLLM推理部署:        70 → 90 （完整配置+诊断）
├─ 模型量化:            65 → 85 （AWQ/GPTQ/INT8/INT4实战）
├─ LLMOps:              60 → 85 （训练→部署全流程）
└─ 昇腾适配:            50 → 70 （基础工具+通信库，缺真实压测）
```

---

**轩辕在此。** 🔧
*AI基础设施实战 v1.0 | 理论→实战 | 从Google Brain到国产昇腾*

