docs: 新增离线部署导入镜像说明 + 更新功能特性
README: - 新增「离线部署(导入预构建镜像)」章节:docker load + 启动命令 - 功能特性更新:设置页、任务删除、进度细分、离线运行、/docs 公开 docs/DOCKER.md: - 新增「导入预构建镜像(离线部署)」完整章节: 前置要求、导出步骤、需拷贝文件清单、导入启动命令、离线说明、后续更新代码 .gitignore: - 排除 *.tar(导出的镜像文件不入库)
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -19,3 +19,6 @@ logs/
|
|||||||
|
|
||||||
# 测试数据与脚本(本地测试用,不入库)
|
# 测试数据与脚本(本地测试用,不入库)
|
||||||
/test/
|
/test/
|
||||||
|
|
||||||
|
# 导出的 Docker 镜像 tar(太大,不入库)
|
||||||
|
*.tar
|
||||||
|
|||||||
38
README.md
38
README.md
@@ -15,11 +15,14 @@
|
|||||||
- **双语字幕**:英文在上、中文在下,亦可单独下载英文 / 中文字幕
|
- **双语字幕**:英文在上、中文在下,亦可单独下载英文 / 中文字幕
|
||||||
- **faster-whisper 转写**:词级时间戳,断句精确(取首末词时间戳)
|
- **faster-whisper 转写**:词级时间戳,断句精确(取首末词时间戳)
|
||||||
- **NLLB-200 英译中**:ASR 与翻译模型不共驻,翻译时独占显存跑大 batch
|
- **NLLB-200 英译中**:ASR 与翻译模型不共驻,翻译时独占显存跑大 batch
|
||||||
- **任务状态机**:`queued → uploading → extracting → transcribing → segmenting → translating → done`
|
- **设置页**:运行时调整 batch_size / beam_size,保存后对后续任务生效(DB 持久化)
|
||||||
|
- **任务管理**:删除已完成/失败任务及其产物,进度条按批次细分
|
||||||
|
- **任务状态机**:`queued -> uploading -> extracting -> transcribing -> segmenting -> translating -> done`
|
||||||
- **实时日志页**:按级别分层(debug=详细子步骤 / info=阶段转换 / error=完整 traceback)
|
- **实时日志页**:按级别分层(debug=详细子步骤 / info=阶段转换 / error=完整 traceback)
|
||||||
- **定时缓存清理**:任务产物默认保留 7 天,超期连同 DB 记录一并删除
|
- **定时缓存清理**:任务产物默认保留 7 天,超期连同 DB 记录一并删除
|
||||||
- **SQLite 持久化**(自包含,无需外部 DB)
|
- **SQLite 持久化**(自包含,无需外部 DB)
|
||||||
- `/docs`(Swagger UI)受 Basic Auth 保护
|
- **离线运行**:模型缓存就位后完全离线,无需访问 HuggingFace
|
||||||
|
- `/docs`(Swagger UI)公开访问
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -115,6 +118,37 @@ AUDIO2TEXT_VARIANT=gpu ./setup.sh
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 离线部署(导入预构建镜像)
|
||||||
|
|
||||||
|
已有 `audio2text-gpu.tar` 镜像文件时,新机器无需构建,直接导入即可启动(仍需 NVIDIA 驱动 +
|
||||||
|
nvidia container runtime + 模型缓存 `./models`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 导入镜像
|
||||||
|
docker load -i audio2text-gpu.tar
|
||||||
|
|
||||||
|
# 2. 准备配置 + 数据目录
|
||||||
|
mkdir -p data-gpu/uploads data-gpu/.work data-gpu/outputs models
|
||||||
|
|
||||||
|
# 3. 启动容器(config.gpu.yaml 需自行准备,或从项目仓库取)
|
||||||
|
docker run -d --name audio2text-gpu \
|
||||||
|
--gpus all \
|
||||||
|
-p 8001:8000 \
|
||||||
|
-v "$(pwd)/data-gpu:/data" \
|
||||||
|
-v "$(pwd)/models:/models" \
|
||||||
|
-v "$(pwd)/config.gpu.yaml:/app/config.yaml:ro" \
|
||||||
|
--restart unless-stopped \
|
||||||
|
audio2text:gpu
|
||||||
|
```
|
||||||
|
|
||||||
|
> **模型缓存**:`./models` 目录需包含 Whisper `large-v3-turbo` + NLLB `distilled-1.3B` 权重
|
||||||
|
> (约 5.5GB)。首次部署时从源机器拷贝 `models/` 目录,或联网用 `prefetch_models.sh` 预拉。
|
||||||
|
> 镜像内置 `HF_HUB_OFFLINE=1`,模型就位后完全离线运行,无需访问 HuggingFace。
|
||||||
|
|
||||||
|
详细步骤见 [Docker 说明 - 导入预构建镜像](./docs/DOCKER.md#导入预构建镜像离线部署)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 入口
|
## 入口
|
||||||
|
|
||||||
| 入口 | 地址 |
|
| 入口 | 地址 |
|
||||||
|
|||||||
@@ -94,6 +94,94 @@ docker compose --profile cpu up -d --build # CPU 生产
|
|||||||
docker compose --profile gpu up -d --build # GPU 生产(需 nvidia runtime)
|
docker compose --profile gpu up -d --build # GPU 生产(需 nvidia runtime)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 导入预构建镜像(离线部署)
|
||||||
|
|
||||||
|
当目标机器无法访问 Docker Hub(或构建太慢)时,可在已构建好镜像的机器上导出 tar,
|
||||||
|
拷到新机器导入,跳过整个构建过程。
|
||||||
|
|
||||||
|
#### 前置要求(新机器)
|
||||||
|
|
||||||
|
- **NVIDIA GPU 驱动**(宿主机)
|
||||||
|
- **nvidia container runtime**(`nvidia-container-toolkit`)
|
||||||
|
- Docker
|
||||||
|
- `config.gpu.yaml` 配置文件(从项目仓库取,或自行编写)
|
||||||
|
- 模型缓存 `./models` 目录(约 5.5GB,从源机器拷贝或联网预拉)
|
||||||
|
|
||||||
|
验证 GPU 可用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nvidia-smi # 宿主能看到 GPU
|
||||||
|
docker run --rm --gpus all nvidia/cuda:12.1.0-runtime-ubuntu22.04 nvidia-smi
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤 1:源机器导出镜像
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在已构建好 audio2text:gpu 镜像的机器上
|
||||||
|
docker save -o audio2text-gpu.tar audio2text:gpu
|
||||||
|
ls -lh audio2text-gpu.tar # ~4.3GB
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤 2:拷贝到新机器
|
||||||
|
|
||||||
|
需要拷贝的文件:
|
||||||
|
|
||||||
|
| 文件/目录 | 大小 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| `audio2text-gpu.tar` | ~4.3GB | Docker 镜像(含 ffmpeg + torch + faster-whisper + transformers + app 代码) |
|
||||||
|
| `config.gpu.yaml` | <1KB | GPU 配置文件 |
|
||||||
|
| `models/` | ~5.5GB | 模型缓存(Whisper large-v3-turbo + NLLB distilled-1.3B 权重) |
|
||||||
|
|
||||||
|
> `models/` 可不拷贝,新机器联网时用 `prefetch_models.sh` 预拉。但离线部署必须拷贝。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 用 scp / rsync / U盘 等方式拷贝
|
||||||
|
scp audio2text-gpu.tar config.gpu.yaml user@newhost:~/audio2text/
|
||||||
|
rsync -avP models/ user@newhost:~/audio2text/models/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 步骤 3:新机器导入并启动
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/audio2text
|
||||||
|
|
||||||
|
# 1. 导入镜像
|
||||||
|
docker load -i audio2text-gpu.tar
|
||||||
|
# 输出:Loaded image: audio2text:gpu
|
||||||
|
|
||||||
|
# 2. 准备数据目录
|
||||||
|
mkdir -p data-gpu/uploads data-gpu/.work data-gpu/outputs
|
||||||
|
|
||||||
|
# 3. 启动容器
|
||||||
|
docker run -d --name audio2text-gpu \
|
||||||
|
--gpus all \
|
||||||
|
-p 8001:8000 \
|
||||||
|
-v "$(pwd)/data-gpu:/data" \
|
||||||
|
-v "$(pwd)/models:/models" \
|
||||||
|
-v "$(pwd)/config.gpu.yaml:/app/config.yaml:ro" \
|
||||||
|
--restart unless-stopped \
|
||||||
|
audio2text:gpu
|
||||||
|
|
||||||
|
# 4. 验证
|
||||||
|
curl -s http://127.0.0.1:8001/health | python -m json.tool
|
||||||
|
# 应见 cuda_available=true, gpu="NVIDIA GeForce RTX 3090"
|
||||||
|
```
|
||||||
|
|
||||||
|
打开 `http://127.0.0.1:8001/` 即可使用。
|
||||||
|
|
||||||
|
#### 离线运行说明
|
||||||
|
|
||||||
|
镜像内置 `HF_HUB_OFFLINE=1` + `TRANSFORMERS_OFFLINE=1` 环境变量,模型缓存就位后
|
||||||
|
**完全离线运行**,不会尝试访问 HuggingFace。这避免了离线环境下 transformers
|
||||||
|
pipeline 因网络请求超时导致的翻译失败。
|
||||||
|
|
||||||
|
#### 后续更新代码
|
||||||
|
|
||||||
|
导入的镜像包含导出时的 app 代码。如需更新代码,有两个选择:
|
||||||
|
|
||||||
|
1. **重新构建**:把项目代码拷到新机器,`docker build --build-arg VARIANT=gpu -t audio2text:gpu .`
|
||||||
|
2. **挂载源码**(临时调试):启动时加 `-v "$(pwd)/app:/app/app"` 覆盖镜像内代码
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 缓存分层与删除边界
|
## 缓存分层与删除边界
|
||||||
|
|||||||
Reference in New Issue
Block a user