摘要

本周主要对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,文本预处理

  • 将连续空格替换为多个【&nbsp】,避免 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. 文本转图像

对于该功能的实现,需要新建一个文件,

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镜像本地部署全流程

2,Glyph视觉推理快速上手:3步部署,轻松处理超长文档


总结

通过本周项目的复现,对模型的部署有了全新的认识,后面需要继续多补充,学习各种情况的解决办法。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐