---
name: yangge521/gpu-concurrent
source: https://app.decimal.ai/s/yangge521-gpu-concurrent@1/SKILL.md
source_sha256: b0f1caa16603
---

# 多 GPU 并发推理管理

## 概述

管理多 GPU 环境下的并发推理任务，通过环境变量隔离 GPU 资源，实现每张 GPU 独立运行推理进程。已在 8x MTT S4000 集群上验证。

## 使用场景

- 多路视频推理：16 路视频分配到 8 张 GPU
- 混合 GPU 集群：NVIDIA T4 + 摩尔线程 S4000 混合调度
- 弹性扩缩容：根据负载动态增减 GPU 进程
- GPU 资源池化：多租户共享 GPU 集群
- A/B 测试：同一模型在不同 GPU 上对比
- 故障转移：GPU 故障时自动迁移任务到健康 GPU

## 真实压测数据

### 8 卡 MTT S4000 并发测试结果

| 测试模式 | 总 FPS | 达标路数 | 状态 |
|---------|--------|---------|------|
| 8卡 x 1路 | 374.84 | 16/16 | 全部达标 |
| 8卡 x 2路 | 493.15 | 12/16 | 4路未达标 |

### 异常 GPU 记录

- GPU 0: 2路并发时 FPS 下降明显
- GPU 4: 2路并发时出现丢帧
- 建议: 排查散热、驱动版本、PCIe 带宽

## 操作指南

### 1. GPU 环境变量隔离

NVIDIA 使用 CUDA_VISIBLE_DEVICES=0,1 指定 GPU。摩尔线程使用 MUSA_VISIBLE_DEVICES=0,1。在启动推理进程前设置环境变量。

### 2. 多进程 GPU 分配

使用 subprocess.Popen 启动独立进程，每个进程通过 env 参数绑定特定 GPU。按 NUM_GPUS x ROUTES_PER_GPU 计算总路数。

### 3. render 节点隔离（Docker）

Docker 环境通过 devices 映射 /dev/dri/renderD128 实现隔离，配合环境变量指定 GPU。

### 4. GPU 负载监控

NVIDIA 使用 nvidia-smi --query-gpu 查询利用率和显存。摩尔线程使用 mthreads-gmi。每 5 秒采集一次。

### 5. 异常 GPU 处理策略

维护异常 GPU 列表，分配时自动跳过。检查 GPU 利用率（大于95%跳过）和显存使用率（大于90%跳过）。

### 6. 混合 GPU 调度

```python
GPU_CONFIG = {
    "nvidia": {"ids": [0, 1], "env_key": "CUDA_VISIBLE_DEVICES"},
    "mthreads": {"ids": [2, 3, 4, 5, 6, 7], "env_key": "MUSA_VISIBLE_DEVICES"},
}
```

按 GPU 类型分配任务，不同类型 GPU 使用不同框架后端。

## 常见问题与排查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 进程绑定 GPU 失败 | 环境变量未生效 | 确认 env 传递正确 |
| GPU 显存不释放 | 进程僵尸 | kill -9 强制终止 |
| 某些 GPU 性能低 | 散热/驱动问题 | 标记为异常跳过 |
| Docker 内 GPU 不可见 | 设备未映射 | 映射 render 节点 |
| 多进程 GPU 冲突 | 未做隔离 | 使用环境变量隔离 |
| 混合 GPU 不兼容 | 框架差异 | 按类型分组调度 |

## 扩展方向

- **Kubernetes GPU 调度**: 使用 device plugin 管理 GPU 资源
- **GPU 虚拟化**: MIG/vGPU 实现细粒度资源分配
- **弹性伸缩**: 根据负载自动增减 GPU 进程
- **GPU 池化**: 多租户共享 GPU，按需分配
- **故障自愈**: GPU 故障自动迁移任务
- **能耗优化**: 低负载时降频节能

## 技能链路

- **yolo-video-inference**: 提供推理工作负载
- **hw-codec-adapt**: 跨平台编解码适配
- **gpu-benchmark**: GPU 性能评估
- **perf-monitor**: GPU 负载监控
- **docker-deploy**: GPU 容器化部署

## 检查清单

- [ ] GPU 环境变量正确设置
- [ ] 每个 GPU 并发路数不超过 2
- [ ] 异常 GPU 已标记并跳过
- [ ] GPU 负载监控已部署
- [ ] 进程崩溃自动重启已实现
- [ ] render 节点正确映射（Docker）
- [ ] 混合 GPU 按类型分组调度