108 lines
2.7 KiB
Markdown
108 lines
2.7 KiB
Markdown
# PaddleOCR-VL-1.6 GPU 子项目
|
||
|
||
此目录是与根目录 CPU 版本隔离的 GPU 实验环境。
|
||
|
||
> **验证状态:未在 NVIDIA GPU 上实测。** 当前开发机器只有集成显卡,无法运行 CUDA。代码仅完成静态检查;最终安装、兼容性和性能必须在目标 NVIDIA GPU 机器上验证。
|
||
|
||
## 为什么独立环境
|
||
|
||
`paddlepaddle` 与 `paddlepaddle-gpu` 都提供 `paddle` 模块,不能安全共用同一个虚拟环境。本目录具有独立的:
|
||
|
||
- `pyproject.toml`
|
||
- `.python-version`(Python 3.11)
|
||
- `.venv`(执行安装后生成)
|
||
- `uv.lock`(在目标 GPU 机器安装后生成)
|
||
|
||
根目录 CPU 环境不会被修改。
|
||
|
||
## 前置条件
|
||
|
||
1. NVIDIA CUDA GPU(Intel/AMD 集成显卡不能运行 Paddle CUDA 版本)
|
||
2. 兼容的 NVIDIA 驱动
|
||
3. Python 3.11
|
||
4. uv
|
||
5. 根据 PaddlePaddle 官方兼容表选择 CUDA Wheel
|
||
|
||
先检查目标机器:
|
||
|
||
```bash
|
||
nvidia-smi
|
||
```
|
||
|
||
`nvidia-smi` 显示的 CUDA Version 是驱动支持上限,不等同于本机安装的 CUDA Toolkit,也不能单独用于判断 Wheel 版本。
|
||
|
||
## 安装
|
||
|
||
在仓库根目录运行:
|
||
|
||
```bash
|
||
# 只查看将执行的命令,不安装
|
||
python gpu/setup_env.py --cuda cu118 --dry-run
|
||
|
||
# CUDA 11.8 Wheel
|
||
python gpu/setup_env.py --cuda cu118
|
||
|
||
# 或 CUDA 12.6 Wheel
|
||
python gpu/setup_env.py --cuda cu126
|
||
```
|
||
|
||
安装脚本将在 `gpu/.venv` 创建独立环境。若官方 Wheel 支持范围发生变化,请同步更新 `gpu/pyproject.toml` 与 `gpu/setup_env.py`。
|
||
|
||
## 验证环境
|
||
|
||
```bash
|
||
uv run --project gpu python gpu/verify_env.py
|
||
```
|
||
|
||
该脚本会检查:
|
||
|
||
- PaddlePaddle 是否为 CUDA 构建
|
||
- CUDA GPU 数量及名称
|
||
- `gpu:0` 是否能完成矩阵乘法
|
||
|
||
任何检查失败都会以非零状态退出,不会自动回退到 CPU。
|
||
|
||
## 单图 Benchmark
|
||
|
||
```bash
|
||
uv run --project gpu python gpu/main.py
|
||
```
|
||
|
||
常用参数:
|
||
|
||
```bash
|
||
uv run --project gpu python gpu/main.py \
|
||
--image images/手写01.png \
|
||
--device-id 0 \
|
||
--warmup 1 \
|
||
--rounds 3
|
||
```
|
||
|
||
Windows PowerShell 可写为单行,或使用反引号续行。
|
||
|
||
Benchmark 会记录:
|
||
|
||
- GPU 型号和设备编号
|
||
- Python/PaddlePaddle 版本
|
||
- 模型初始化耗时
|
||
- 预热和正式推理轮数
|
||
- min/max/mean/median/stdev
|
||
- 可获取时的 CUDA 显存统计
|
||
- 图片尺寸和文本块数量
|
||
|
||
结果写入:
|
||
|
||
```text
|
||
benchmarks/gpu/gpu-benchmark-YYYYMMDD-HHMMSS.json
|
||
```
|
||
|
||
## 当前范围
|
||
|
||
当前只实现单 GPU、单图 Benchmark。暂未实现 GPU 多进程批处理,原因是:
|
||
|
||
- 同一 GPU 上启动多个模型实例会重复占用显存
|
||
- 多进程通常不会线性提升单卡吞吐
|
||
- 容易引发显存不足和 CUDA 上下文争抢
|
||
|
||
后续应优先评估模型/pipeline 原生批处理能力,再决定是否增加多 GPU 或任务队列。
|