文章目录
- 摘要
- Abstract
- 一、Glyph项目说明
-
- [1. 文本到图像的处理](#1. 文本到图像的处理)
-
- [1.1 文本到图像的批量转换过程](#1.1 文本到图像的批量转换过程)
- [1.2 将输入的文本内容转换为图像工作流程:](#1.2 将输入的文本内容转换为图像工作流程:)
- [1.3 单条目处理器](#1.3 单条目处理器)
- [1.4 批量处理入口](#1.4 批量处理入口)
- [2. VLM模型推理](#2. VLM模型推理)
- 二、Glyph复现过程以及问题记录
-
- [1. 文本转图像](#1. 文本转图像)
- [2. VLLM包的下载](#2. VLLM包的下载)
- [3. Glyph模型的下载](#3. Glyph模型的下载)
- 总结
摘要
本周主要对Glyph模型内容进行学习,解读项目代码中文本到图像的处理过程,视觉语言模型的推理过程以及配置设置等。同时尝试复现,目前还没有实现复现,主要记录过程中遇到的问题。
Abstract
This week, I mainly studied the content of the Glyph model, interpreting the text-to-image processing process, the inference process of the vision-language model, and the configuration settings in the project code. Meanwhile, I attempted to reproduce the Glyph model. Although I haven't successfully achieved the reproduction yet, I have documented the problems encountered during the process.
一、Glyph项目说明
Glyph 是一个通过视觉-文本压缩来扩展上下文窗口的框架。它将长文本序列渲染为图像,然后使用视觉-语言模型(VLM)进行处理,从而在保持语义信息的同时大幅降低计算和内存成本。
项目的工作流程为:
输入文本
↓
文本渲染 (word2png_function.py)
↓
PDF生成 → 图像转换
↓
图像序列
↓
VLM推理 (vlm_inference.py)
↓
输出结果
1. 文本到图像的处理
1.1 文本到图像的批量转换过程
1,配置加载与预处理
2,文本转图像列表
3,单条目处理器
4,批量处理
1.2 将输入的文本内容转换为图像工作流程:
1,加载并与处理配置
2,生成唯一标识符
从 item 中提取 unique_id
3,提取并验证配置参数
从配置中获取参数,定义整体布局:文档页面尺寸,边距
4,注册自定义字体
将指定的字体注册到 reportlab 中,供 PDF 渲染使用
5,创建PDF文档模板
初始化内存缓冲区,并设置页面大小和四周间距
6,创建段落样式
7,文本预处理
- 将连续空格替换为多个【 】,避免 PDF 中空格被压缩
- 移除特殊字符
- 对特殊字符进行转义
- 按行分割
8,分块创建段落
控制处理的数据量,避免过多。一次将30行合并为一段。
9,构建 PDF 并添加背景色
10,将PDF转为图像
- 分批次将PDF页面转为PIL图像对象,每批最多20页,避免一次性加载过多页导致内存溢出。
- 图像后处理
水平缩放:使图片保持同一比例
自适应剪裁 - 保存PNG文件
11,清理与返回
释放内存,返回所有图像路径列表
1.3 单条目处理器
1,从 item 中获取 unique_id 和 context(文本)。
2,恢复模式检查:若 recover=True 且输出目录已存在,则跳过处理,仅返回空列表。
3,配置合并:将 全局配置 与 条目自身配置 合并,并对条目配置中的颜色、对齐、页面尺寸进行转换。
4,调用 text_to_images 生成图像,将结果写入 item['image_paths']。
5,返回更新后的 item。
1.4 批量处理入口
并行处理整个 JSON 文件中的条目:
1,初始化全局变量
2,准备输出目录:若非恢复模式,清空输出目录和 JSONL 结果文件。
3,读取输入 JSON:加载所有待处理数据(每个条目应包含 unique_id、context 和可选的 config)。
4,恢复模式过滤:如果已有 JSONL 文件,读取已处理的 unique_id,过滤掉已完成的条目。
5,多进程池:使用 multiprocessing.Pool 并行调用 process_one,通过 tqdm 显示进度。
6,批量写入结果:每收集到 batch_size 个结果,追加写入到 JSONL 文件(每行一个 JSON 对象),避免频繁 I/O。
7,完成后输出统计信息。
2. VLM模型推理
负责与视觉-语言模型交互:
- 图像编码 :将图像转换为RGB格式,并按格式缩放保证像素不超过max_pixels ,再将图像编码为base64格式,以.png格式存储,避免请求体过大
- vlm_inference函数 :向VLM模型发送图像和问题,获取回答
①进行参数说明:需要输入用户问题,图像路径,api端点地址和密钥...
②输入清洗:对输入的文本去除首尾 - 构建消息格式 :按照 OpenAI 兼容的格式构造消息,包含图像和文本问题。
对图像进行处理,例如检查路径,对图像编码;
添加文本:将问题作为文本类型追加到列表中
-响应处理:对JSON的解析结果,验证响应结构等做出响应 - 错误处理 :处理各种可能的错误情况,最终返回模型生成的文本内容。
二、Glyph复现过程以及问题记录
1. 文本转图像
对于该功能的实现,需要新建一个文件,
python
from word2png_function import text_to_images
CONFIG_EN_PATH = '../config/config_en.json'
OUTPUT_DIR = './output_images'
INPUT_FILE = './input.txt'
# Read text from file
with open(INPUT_FILE, 'r', encoding='utf-8') as f:
text = f.read()
# Convert text to images
images = text_to_images(
text=text,
output_dir=OUTPUT_DIR,
config_path=CONFIG_EN_PATH,
unique_id='test_001'
)
print(f"\nGenerated {len(images)} image(s):")
for img_path in images:
print(f" {img_path}")
2. VLLM包的下载
关于VLLM库无法下载问题的解决
在项目终端直接下载VLLM包无法下载成功,搜索后得知VLLM 被设计为在 Linux 环境下运行,尤其是在支持 NVIDIA GPU 的系统上,它不直接支持 Windows。因此如果一定要在windows下使用VLLM则需要WSL。
- WSL是一个允许在 Windows 上运行 Linux 环境的工具,是为开发人员提供一个 本地的 Linux 环境,可以在一定程度上解决依赖性问题并提供更接近 Linux 的运行环境。
- Docker也可以解决相关问题,Docker 运行在 Windows 上时,其容器还是依赖于 Linux 内核。Docker Desktop 会使用一个 轻量的虚拟机 来提供一个 Linux 环境。在 Docker 中,你会得到一个完整的、隔离的 Linux 环境来运行 VLLM。
1,下载WSL
以管理员身份运行,输入
wsl --install
后面要求输入用户名和密码,需要注意密码需要盲打,终端不显示,还会再次输入确认密码。接着会自动下载Ubuntu,下载完成后会启动,此时输入
sudo apt update && sudo apt upgrade -y
以更新软件源并升级已安装的包,注:输入密码时不会显示字符,正常输入后回车即可。
注:多次尝试下载WSL失败的原因是没有使用管理员身份运行终端,导致下载wsl失败,打开wsl一直闪退。
2,安装必备的构建工具和 Python 环境
输入:
sudo apt install -y build-essential python3-dev python3-pip
3,验证 GPU 是否可用
运行以下命令检查Windows 已安装 NVIDIA 显卡驱动,且驱动版本支持 WSL 2,在 Ubuntu 中可以直接使用 GPU:
nvidia-smi
- 如果显示 GPU 信息,说明驱动已正确传递到 WSL。
- 如果提示 command not found,说明未安装 NVIDIA 驱动或驱动未正确配置。需要从 NVIDIA 官网下载适用于 Windows 的驱动(支持 WSL 2 的驱动会自动将 CUDA 能力映射到 WSL)。
4,创建 Python 虚拟环境
为了避免依赖冲突,建议使用虚拟环境,输入
# 安装 venv(如果尚未安装)
sudo apt install -y python3-venv
# 创建虚拟环境(例如名为 vllm-env)
python3 -m venv vllm-env
# 激活虚拟环境
source vllm-env/bin/activate
5,安装VLLM
输入
pip install --upgrade pip
pip install vllm
6,验证是否安装成功
输入
python -c "from vllm import LLM; print('vLLM imported successfully')"
运行具体项目文件
1,进入具体文件
方法一:在ubuntu终端进入运行项目文件夹
指令如下
cd /mnt/d/具体项目地址
方法二:直接在windows终端输入wsl可以进入ubuntu终端
2,创建虚拟环境
进入项目后需要创建、激活环境
# 创建虚拟环境(例如名为 vllm-env)
python3 -m venv vllm-env
# 激活虚拟环境
source vllm-env/bin/activate
3. Glyph模型的下载
当下一直没有解决模型的下载问题,使用以前的解决办法也没有解决问题。经过搜索,下列博文提供可能解决的办法,后续会根据博文中的步骤进行尝试:
1,超详细图文教程:Glyph镜像本地部署全流程
总结
通过本周项目的复现,对模型的部署有了全新的认识,后面需要继续多补充,学习各种情况的解决办法。