143 lines
4.1 KiB
Markdown
143 lines
4.1 KiB
Markdown
# GPU Docker Deployment Guide
|
||
|
||
本文档介绍如何使用 GPU 加速 `faster-whisper` 字幕生成,大幅提升处理速度。
|
||
|
||
## 为什么要 GPU 加速
|
||
|
||
MoneyPrinterTurbo 中唯一的深度学习环节是 **faster-whisper 语音识别**(将音频转为带时间戳的字幕)。
|
||
|
||
- **CPU 模式**(默认):`large-v3` 模型生成字幕较慢
|
||
- **GPU 模式**:利用 NVIDIA GPU + CUDA 加速,速度提升 **5-10 倍**
|
||
|
||
> 注意:项目的其他环节(脚本生成、音频合成、视频剪辑)不涉及深度学习,GPU 只加速字幕生成。
|
||
|
||
## 部署方式
|
||
|
||
本项目提供两种 Docker 部署方式,**默认 CPU 部署不受任何影响**:
|
||
|
||
### CPU 部署(默认,零变化)
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
使用原有的 `Dockerfile`(`python:3.11-slim-bullseye`),无需 GPU。
|
||
|
||
### GPU 部署(有 NVIDIA GPU 的用户)
|
||
|
||
```bash
|
||
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d
|
||
```
|
||
|
||
使用 `Dockerfile.gpu`(`nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04`)并为 api 服务挂载 GPU。
|
||
|
||
## GPU 部署前提条件
|
||
|
||
### 1. 硬件要求
|
||
|
||
- NVIDIA GPU(建议 6GB 以上显存)
|
||
- `large-v3` 模型在 GPU 上 `float16` 精度约占用 1.5GB 显存
|
||
|
||
### 2. 软件要求
|
||
|
||
- **NVIDIA 驱动**:最新版即可,运行 `nvidia-smi` 确认
|
||
- **Docker Desktop**
|
||
- **NVIDIA Container Toolkit**:运行 `docker info` 查看 Runtimes 列表中是否有 `nvidia`
|
||
|
||
### 3. 环境验证
|
||
|
||
```bash
|
||
# 确认 NVIDIA 驱动正常
|
||
nvidia-smi
|
||
|
||
# 确认 Docker 支持 GPU(Runtimes 中应包含 nvidia)
|
||
docker info | findstr nvidia
|
||
```
|
||
|
||
如果没有 `nvidia` runtime,需要先安装 [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)。
|
||
|
||
## 配置 Whisper 使用 GPU
|
||
|
||
在 `config.toml` 中设置:
|
||
|
||
```toml
|
||
subtitle_provider = "whisper"
|
||
|
||
[whisper]
|
||
model_size = "large-v3"
|
||
device = "cuda" # 使用 GPU(CPU 用户设为 "cpu")
|
||
compute_type = "float16" # GPU 推荐 float16(CPU 用户设为 "int8")
|
||
```
|
||
|
||
## 文件说明
|
||
|
||
| 文件 | 用途 |
|
||
|---|---|
|
||
| `Dockerfile` | 默认 CPU 镜像(原有,未修改) |
|
||
| `Dockerfile.gpu` | GPU 镜像(新增,基于 NVIDIA CUDA) |
|
||
| `docker-compose.yml` | 默认 CPU 部署配置(原有,未修改) |
|
||
| `docker-compose.gpu.yml` | GPU 部署覆盖配置(新增) |
|
||
|
||
## GPU 部署步骤
|
||
|
||
### 第 1 步:拉取 CUDA 基础镜像
|
||
|
||
```bash
|
||
docker pull nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04
|
||
```
|
||
|
||
> 如果使用了阿里云等镜像加速源,可能对 `nvidia/cuda` 返回 403。请确保能从 Docker Hub 直接拉取。
|
||
|
||
### 第 2 步:修改 config.toml
|
||
|
||
按上文说明设置 `subtitle_provider = "whisper"` 和 `device = "cuda"`。
|
||
|
||
### 第 3 步:构建并启动
|
||
|
||
```bash
|
||
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build
|
||
```
|
||
|
||
### 第 4 步:验证 GPU 是否生效
|
||
|
||
```bash
|
||
docker exec -it moneyprinterturbo-api nvidia-smi
|
||
```
|
||
|
||
如果能看到 GPU 信息,说明 GPU 挂载成功。
|
||
|
||
## 显存与并发建议
|
||
|
||
| GPU 显存 | 建议最大并发任务数 |
|
||
|---|---|
|
||
| 4GB | 1-2 |
|
||
| 6GB | 2-3 |
|
||
| 8GB | 3-4 |
|
||
| 12GB+ | 5 |
|
||
|
||
可通过 `config.toml` 中的 `max_concurrent_tasks` 控制并发数。
|
||
|
||
## 故障排查
|
||
|
||
### 问题 1:镜像拉取失败(403 Forbidden)
|
||
|
||
阿里云镜像加速对 `nvidia/cuda` 返回 403。解决方法:
|
||
- 配置其他可用的镜像加速源
|
||
- 或直接 `docker pull nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04`
|
||
|
||
### 问题 2:pip 安装报 `Cannot uninstall blinker`
|
||
|
||
Ubuntu 22.04 系统自带的 `blinker` 通过 `distutils` 安装,pip 无法卸载。`Dockerfile.gpu` 已通过 `apt-get remove -y python3-blinker` 处理。
|
||
|
||
### 问题 3:容器内 `nvidia-smi` 找不到 GPU
|
||
|
||
- 确认宿主机已安装 NVIDIA Container Toolkit
|
||
- 确认 `docker info` 中 Runtimes 包含 `nvidia`
|
||
- 确认使用了 GPU 部署命令:`docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d`
|
||
|
||
### 问题 4:Whisper 报 CUDA 错误
|
||
|
||
- 确认 `config.toml` 中 `device = "cuda"`(大小写敏感,不是 `"CPU"`)
|
||
- 确认 `compute_type = "float16"`
|
||
- 确认 `subtitle_provider = "whisper"`
|