GLM-OCR部署教程:CPU模式降级运行方案(启用--device cpu参数)
GLM-OCR部署教程:CPU模式降级运行方案(启用--device cpu参数)
1. 项目概述与环境准备
GLM-OCR是一个基于GLM-V编码器-解码器架构构建的多模态OCR模型,专门为复杂文档理解而设计。它集成了在大规模图文数据上预训练的CogViT视觉编码器、轻量级跨模态连接器以及GLM-0.5B语言解码器,支持文本识别、表格识别、公式识别等多种功能。
核心特性:
- 模型大小:2.5GB
- 支持设备:CUDA GPU和CPU
- 服务端口:7860
- 访问地址:http://localhost:7860
环境要求:
- 操作系统:Linux(推荐Ubuntu 18.04+)
- Python版本:3.10.19
- 内存:至少8GB RAM(推荐16GB)
- 存储空间:至少10GB可用空间
2. CPU模式部署步骤
2.1 环境检查与准备
首先确认你的系统环境是否满足CPU运行的基本要求:
# 检查系统内存
free -h
# 检查Python版本
python --version
# 检查存储空间
df -h /root
如果系统内存低于8GB,建议先释放内存或增加交换空间:
# 创建交换文件(如果需要)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
2.2 修改启动脚本启用CPU模式
GLM-OCR项目默认使用GPU运行,但我们可以通过修改启动参数来启用CPU模式:
# 进入项目目录
cd /root/GLM-OCR
# 备份原始启动脚本
cp start_vllm.sh start_vllm.sh.backup
# 编辑启动脚本,添加--device cpu参数
nano start_vllm.sh
在启动脚本中找到包含serve_gradio.py的命令行,添加--device cpu参数:
# 修改前的大概样子(具体可能略有不同)
/opt/miniconda3/envs/py310/bin/python serve_gradio.py \
--model /root/ai-models/ZhipuAI/GLM-OCR \
--port 7860
# 修改后添加--device cpu参数
/opt/miniconda3/envs/py310/bin/python serve_gradio.py \
--model /root/ai-models/ZhipuAI/GLM-OCR \
--port 7860 \
--device cpu
保存修改后,给脚本添加执行权限(如果还没有):
chmod +x start_vllm.sh
2.3 安装必要的CPU依赖
确保所有必要的依赖库都已安装,特别是CPU版本的PyTorch:
# 激活conda环境
conda activate py310
# 安装CPU版本的PyTorch(如果尚未安装)
/opt/miniconda3/envs/py310/bin/pip install torch==2.9.1 --index-url https://download.pytorch.org/whl/cpu
# 安装其他必要依赖
/opt/miniconda3/envs/py310/bin/pip install \
git+https://github.com/huggingface/transformers.git \
gradio \
pillow \
numpy
3. 启动CPU模式服务
3.1 首次启动与模型加载
使用修改后的脚本启动CPU模式服务:
# 进入项目目录
cd /root/GLM-OCR
# 启动CPU模式服务
./start_vllm.sh
首次启动注意事项:
- 加载时间会比GPU模式长,大约需要3-5分钟
- 控制台会显示加载进度和日志信息
- 看到"Running on local URL: http://0.0.0.0:7860"表示启动成功
3.2 验证CPU模式运行
可以通过以下方式确认服务正在CPU模式下运行:
# 查看进程信息
ps aux | grep serve_gradio
# 检查日志确认设备类型
tail -f /root/GLM-OCR/logs/glm_ocr_*.log
在日志中应该能看到类似这样的信息,表明正在使用CPU:
Using device: cpu
Loading model to CPU...
4. Web界面使用指南
4.1 访问服务界面
在浏览器中打开服务地址:
http://你的服务器IP:7860
如果是在本地服务器运行,可以直接访问:
http://localhost:7860
4.2 支持的功能类型
GLM-OCR在CPU模式下支持以下功能:
| 功能类型 | 提示词 | 适用场景 |
|---|---|---|
| 文本识别 | Text Recognition: | 普通文档、书籍、海报文字提取 |
| 表格识别 | Table Recognition: | 数据表格、统计表格结构识别 |
| 公式识别 | Formula Recognition: | 数学公式、化学方程式识别 |
4.3 操作步骤详解
- 上传图片:点击上传按钮,选择PNG、JPG或WEBP格式的图片
- 选择任务类型:根据图片内容选择合适的提示词
- 开始识别:点击"开始识别"按钮
- 查看结果:等待处理完成,查看识别结果
CPU模式下的处理时间:
- 简单文本图片:10-30秒
- 复杂表格或公式:30-60秒
- 高分辨率图片:可能需要更长时间
5. Python API调用示例
5.1 基础调用代码
即使在CPU模式下,也可以通过Python代码调用GLM-OCR服务:
from gradio_client import Client
import time
# 连接服务
client = Client("http://localhost:7860")
def recognize_text(image_path):
"""文本识别函数"""
try:
# CPU模式下需要更长的超时时间
result = client.predict(
image_path=image_path,
prompt="Text Recognition:",
api_name="/predict",
request_timeout=120 # 2分钟超时
)
return result
except Exception as e:
print(f"识别失败: {e}")
return None
# 使用示例
image_path = "/path/to/your/image.png"
result = recognize_text(image_path)
if result:
print("识别结果:", result)
5.2 批量处理建议
在CPU模式下进行批量处理时,建议:
import os
from concurrent.futures import ThreadPoolExecutor
def batch_process_images(image_folder, output_file):
"""批量处理图片"""
image_files = [f for f in os.listdir(image_folder)
if f.lower().endswith(('.png', '.jpg', '.jpeg', '.webp'))]
results = []
# 使用线程池控制并发数(CPU模式下建议1-2个并发)
with ThreadPoolExecutor(max_workers=2) as executor:
for image_file in image_files:
image_path = os.path.join(image_folder, image_file)
future = executor.submit(recognize_text, image_path)
result = future.result()
if result:
results.append(f"{image_file}: {result}")
# 保存结果
with open(output_file, 'w', encoding='utf-8') as f:
f.write('\n'.join(results))
return len(results)
# 使用示例
processed_count = batch_process_images("/path/to/images", "results.txt")
print(f"成功处理 {processed_count} 张图片")
6. 性能优化建议
6.1 CPU模式性能调优
虽然CPU模式速度较慢,但可以通过以下方式优化:
调整图片预处理参数:
# 在调用前调整图片大小
from PIL import Image
def optimize_image(image_path, max_size=1024):
"""优化图片大小以提高处理速度"""
img = Image.open(image_path)
if max(img.size) > max_size:
img.thumbnail((max_size, max_size), Image.Resampling.LANCZOS)
optimized_path = f"{image_path}_optimized.jpg"
img.save(optimized_path, "JPEG", quality=85)
return optimized_path
return image_path
调整服务参数(在serve_gradio.py中):
# 可以调整的参数
batch_size = 1 # CPU模式下保持为1
max_length = 1024 # 减少生成长度以加快速度
6.2 内存使用优化
CPU模式下内存使用较高,可以通过以下方式优化:
# 监控内存使用
watch -n 5 free -h
# 清理内存缓存(如果需要)
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
7. 常见问题解决
7.1 启动问题排查
端口被占用:
# 检查7860端口占用
lsof -i :7860
# 停止占用进程
kill -9 <进程ID>
# 或者使用其他端口
# 在启动脚本中修改 --port 参数
内存不足:
# 查看内存使用情况
free -h
# 停止不必要的服务释放内存
sudo systemctl stop apache2 nginx mysql # 根据实际情况调整
7.2 运行问题解决
处理时间过长:
- 减少图片尺寸
- 使用较低的分辨率
- 避免同时处理多个任务
识别精度问题:
- 确保图片清晰度足够
- 尝试不同的提示词
- 调整图片对比度和亮度
7.3 日志查看与分析
# 查看实时日志
tail -f /root/GLM-OCR/logs/glm_ocr_*.log
# 查找错误信息
grep -i error /root/GLM-OCR/logs/glm_ocr_*.log
# 查看性能信息
grep -i "time\|memory" /root/GLM-OCR/logs/glm_ocr_*.log
8. 总结
通过本教程,你已经学会了如何在CPU模式下部署和运行GLM-OCR模型。虽然CPU模式的处理速度比GPU模式慢,但它为没有GPU硬件的用户提供了一个可行的解决方案。
关键要点回顾:
- 通过添加
--device cpu参数启用CPU模式 - CPU模式下需要更长的加载和处理时间
- 可以通过优化图片大小和调整参数来改善性能
- 建议在CPU模式下使用较低的并发数
适用场景:
- 开发和测试环境
- 小批量的文档处理任务
- 没有GPU硬件的生产环境
- 对处理速度要求不高的应用
虽然CPU模式的性能有限,但它确保了GLM-OCR模型在各种硬件环境下都能运行,为更多用户提供了使用先进OCR技术的机会。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)