腾讯HunyuanOCR开源端到端OCR-1B:本地部署与测试

腾讯HunyuanOCR开源端到端OCR-1B:本地部署与测试

腾讯混元 HunyuanOCR Huggingface 开源:https://huggingface.co/tencent/HunyuanOCR , 同时modelscope (https://www.modelscope.cn/models/Tencent-Hunyuan/HunyuanOCR)也可以下载了。

github地址: https://github.com/Tencent-Hunyuan/HunyuanOCR/blob/main/README_zh.md

本次在本地部署进行测试,看看实际效果。

1.简介

HunyuanOCR 是由腾讯开发的轻量级端到端OCR专家视觉语言模型(VLM),基于Hunyuan的原生多模态架构。该模型仅包含1B参数,却在多个行业基准测试中达到了最先进的水平,适用于复杂多语言文档解析、文本定位、开放字段信息提取、视频字幕提取和照片翻译等任务。

2.部署环境

官方环境要求:

  • 🖥️ 操作系统:Linux
  • 🐍 Python版本:3.12+(推荐)
  • ⚡ CUDA版本:12.9
  • 🔥 PyTorch版本:2.7.1
  • 🎮 GPU:支持CUDA的NVIDIA显卡
  • 🧠 GPU显存:20GB (for vLLM)
  • 💾 磁盘空间:6GB

实际环境:

环境版本
ubuntu-24.04.3 Serverrelease 10.0
Cuda12.8
显卡 RTX 2080 Ti 22G驱动 NVIDIA-Linux-x86_64-580.105.08
uv0.9.13
内存32G

3.下载

这里选择从modelscope 进行下载

pip install modelscope modelscope download --model Tencent-Hunyuan/HunyuanOCR --cache_dir '/home/qy/models/'

4.uv环境

# 安装UVcurl -LsSf https://astral.sh/uv/install.sh |sh# 查看python版本 uv python list # 创建虚拟环境,并指定python版本 uv venv hunyuanocr --python 3.12cd hunyuanocr # 激活环境, 激活后,括号中显示 hunyuanocr 表示已经切了环境source hunyuanocr/bin/activate # 配置PyPI仓库为国内源vim ~/.config/uv/uv.toml [registries.pypi] index ="https://mirrors.aliyun.com/pypi/simple/" default =true

5.下载推理源码

git clone https://github.com/Tencent-Hunyuan/HunyuanOCR.git cd /home/qy/hunyuan/HunyuanOCR-main uv pip install -r requirements.txt 

6.安装vLLM

uv pip install -U "aiohttp<4" uv pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly 
如果按照官方文档: uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly执行,会报错:

安装报错:

这是因为 [email protected]在编译的时候,需要一个头文件,但是当前 conda环境中没有这个头文件。

longintrepr.hCPython 内部头文件,只存在于:

  • python-dev(Linux)
  • python3.X-devel(CentOS)

为什么pip 会出现这种编译行为?

因为使用了 nightly (--pre) 的 vllm:

uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly 

vLLM nightly 依赖: aiohttp==4.0.0a1 这是一个 alpha 版,没有发布 wheel,需要从源码编译,所以会触发 C 扩展构建 → 然后失败。

采用下面办法处理:

强制安装 aiohttp 3.9.x(稳定版,有 wheel), 不再加 --pre, 因为 --pre 会允许 pip 随便升级所有依赖(包括 aiohttp),从而又去编译 aiohttp 4。

uv pip install -U "aiohttp<4" uv pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly 

7.安装cuda-compat

提供向后兼容能力,允许基于较新 CUDA 版本开发的应用程序在仅安装旧版 CUDA 驱动的环境中运行

下载地址: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/

下载文件:cuda-compat-12-9_575.57.08-0ubuntu1_amd64.deb

sudo dpkg -i cuda-compat-12-9_575.57.08-0ubuntu1_amd64.deb echo'export LD_LIBRARY_PATH=/usr/local/cuda-12.9/compat:$LD_LIBRARY_PATH'>> ~/.bashrc source ~/.bashrc # verify cuda-compat-12-9ls /usr/local/cuda-12.9/compat 

8.检查环境

nvcc --version Build cuda_12.8.r12.8/compiler.35583870_0 python Python 3.12.3 >>>import torch >>> print(torch.version.cuda)12.8>>> print(torch.cuda.is_available()) /home/qy/hunyuanocr/lib/python3.12/site-packages/torch/cuda/__init__.py:182: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 803: system has unsupported display driver / cuda driver combination (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)return torch._C._cuda_getDeviceCount()>0 False 
如果是false,则说明 touch 不能使用 CUDA, 我们需要安装正确的touch
uv pip installtorch==2.9.0 torchvision==0.24.0 torchaudio==2.9.0 --index-url https://download.pytorch.org/whl/cu128 
再进行环境检查:print(torch.version) ==> 2.9.0+cu128 说明安装的就是 cuda 12.8 版本的 torchprint(torch.version.cuda)==> 12.8 说明cuda 版本也正确print(torch.cuda.is_available()) == False 还是 False

想到了,在先前的测试中,我安装了 cuda 12.9 版本,是不是环境变量有问题?echo $LD_LIBRARY_PATH ==> /usr/local/cuda-12.9/compat:/usr/local/cuda/lib64 果然是环境变量的问题

修改LD_LIBRARY_PATH 环境变量

一次检查几个文件:

  • ~/.bashrc
  • ~/.profile
  • /etc/profile

将错误的环境变量修改过来,我的配置在了 ~/.bashrc

vim ~/.bashrc ... exportLD_LIBRARY_PATH=/usr/local/cuda-12.8/compat:$LD_LIBRARY_PATH# 让环境变量生效source ~/.bashrc echo$LD_LIBRARY_PATH

9.启动vLLM服务

# export HF_ENDPOINT=https://hf-mirror.com vllm serve \ /home/qy/models/Tencent-Hunyuan/HunyuanOCR \ --served-model-name HunyuanOCR \ --host 0.0.0.0 \ --port 6688\ --no-enable-prefix-caching \ --mm-processor-cache-gb 0\ --gpu-memory-utilization 0.9
  • --no-enable-prefix-caching:禁用前缀缓存(提升OCR性能)
  • --mm-processor-cache-gb 0:关闭视觉处理器缓存
  • --max-num-batched-tokens:根据GPU显存调整批量处理大小
  • --gpu-memory-utilization显存使用,过小服务可能因为现存无法加载模型而无法启动
服务端启动后,会开启6688 端口,并提供兼容 OpenAI API服务。

10.客户端接入

因为服务端用 vLLM部署,它提供了兼容OpenAI API 服务,所以可以写代码接入,也可以用现成的客户端工具接入。

10.1 Cherry Studio 接入测试

官方推荐了提示词:

任务中文提示词英文提示词
文字检测识别检测并识别图片中的文字,将文本坐标格式化输出。Detect and recognize text in the image, and output the text coordinates in a formatted manner.
文档解析• 识别图片中的公式,用 LaTeX 格式表示。 • 把图中的表格解析为 HTML。 • 解析图中的图表,对于流程图使用 Mermaid 格式表示,其他图表使用 Markdown 格式表示。 • 提取文档图片中正文的所有信息用 markdown 格式表示,其中页眉、页脚部分忽略,表格用 html 格式表达,文档中公式用 latex 格式表示,按照阅读顺序组织进行解析。• Identify the formula in the image and represent it using LaTeX format. • Parse the table in the image into HTML. • Parse the chart in the image; use Mermaid format for flowcharts and Markdown for other charts. • Extract all information from the main body of the document image and represent it in markdown format, ignoring headers and footers. Tables should be expressed in HTML format, formulas in the document should be represented using LaTeX format, and the parsing should be organized according to the reading order.
通用文字提取• 提取图中的文字。• Extract the text in the image.
信息抽取• 输出 Key 的值。 • 提取图片中的: [‘key1’,‘key2’, …] 的字段内容,并按照 JSON 格式返回。 • 提取图片中的字幕。• Output the value of Key. • Extract the content of the fields: [‘key1’,‘key2’, …] from the image and return it in JSON format. • Extract the subtitles from the image.
翻译先提取文字,再将文字内容翻译为英文。若是文档,则其中页眉、页脚忽略。公式用latex格式表示,表格用html格式表示。First extract the text, then translate the text content into English. If it is a document, ignore the header and footer. Formulas should be represented in LaTeX format, and tables should be represented in HTML format.

10.2 python代码接入

前面使用 Cherrry Studio 接入,很多情况下会导致服务器崩溃,服务停止。所以最好使用代码来进行测试

github上提供了模板代码: https://github.com/Tencent-Hunyuan/HunyuanOCR , 可以下载代码自行测试。

其它语言只要按照兼容的 openAI API 规范接入即可使用。

Read more

C++分布式语音识别服务实践

C++分布式语音识别服务实践

基于 brpc+etcd + 百度 AI SDK 的分布式语音识别服务实践:从代码架构到踩坑复盘 一、项目背景与核心功能 最近基于 C++ 实现了一个分布式语音识别子服务,核心目标是提供高可用的 RPC 接口,支持客户端上传 PCM 音频文件并返回识别结果。技术栈选型如下: * RPC 框架:brpc(百度开源高性能 RPC 框架,支持多种协议); * 数据序列化:Protobuf(定义 RPC 接口和数据结构); * 服务注册与发现:etcd(分布式键值存储,实现服务上下线感知); * 语音识别能力:百度 AI 语音 SDK(提供成熟的 PCM 音频转文字能力); * 日志与配置:spdlog(高性能日志库)、gflags(命令行参数解析)。 项目分为服务端和客户端两部分:

By Ne0inhk
C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)

C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 纯虚函数与抽象类:强制接口规范的“契约” * 1.1 纯虚函数:没有实现的 “接口声明” * 1.2 抽象类:包含纯虚函数的 “不可实例化类” * 二. 多态的底层原理:虚表指针与虚函数表 * 2.1 虚表指针(vfptr):对象中的 “导航器” * 2.2 多态的实现原理 * 2.3 虚函数表(vtable):存储虚函数地址的 “数组” * 2.4 动态绑定与静态绑定 * 三. 关键问题辨析与总结

By Ne0inhk
《C++ 递归、搜索与回溯》第1题:汉诺塔问题

《C++ 递归、搜索与回溯》第1题:汉诺塔问题

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 前言: 聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力 目录 前言: 递归,搜索与回溯算法前置知识 1. 汉诺塔 算法原理(递归): 思路: 算法流程: 解法代码(C++): 博主手记(字体还请见谅哈): 结尾: 递归,搜索与回溯算法前置知识 1. 汉诺塔 题目链接: 面试题 08.

By Ne0inhk
【C++藏宝阁】C++入门:命名空间(namespace)详解

【C++藏宝阁】C++入门:命名空间(namespace)详解

🌈个人主页:聆风吟 🔥系列专栏:C++藏宝阁 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 * 📚专栏订阅推荐 * 📋前言:为什么需要命名空间? * 一、命名空间的定义 * 二、命名空间的使用 * 三、命名空间的特性 * 3.1 命名空间的嵌套定义 * 3.2 命名空间的定义可以不连续 * 四、命名空间的本质:独立的作用域 * 4.1 命名空间是C++的一种作用域类型 * 4.2 命名空间作用域的特点 * 4.3 域作用限定符 `::` 的作用 * 4.4 编译器的查找规则 * 五、命名空间的价值 * 5.1 解决命名冲突 * 5.2 模块化组织代码 * 5.3

By Ne0inhk