【第三十八周】论文复现记录01

文章目录

  • 摘要
  • 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,文本预处理

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

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

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

2,Glyph部署常见问题,一次性说清


总结

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

相关推荐
woodykissme2 小时前
揭秘表面粗糙度的16%规则:为什么允许16%的超差?
学习·制造·机械·粗糙度·工艺知识
秋刀鱼不做梦3 小时前
网络编程和Socket套接字(UDP+TCP)(如果想知道Java中有关网络编程和Socket套接字的知识,那么只看这一篇就足够了!)
网络·网络协议·学习·tcp/ip·udp
AI成长日志3 小时前
【笔面试算法学习专栏】链表操作专题:反转、环形检测与合并
学习·算法·面试
徐某人..3 小时前
基于i.MX6ULL开发板与OV5640摄像头实现QT相机应用开发
qt·学习·arm
是翔仔呐3 小时前
第10章 串口通信USART全解:轮询/中断/DMA三种收发模式与上位机通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
洛阳吕工3 小时前
AI 工程师学习路径详解:从入门到实践
人工智能·学习
计算机安禾4 小时前
【数据结构与算法】第12篇:栈(二):链式栈与括号匹配问题
c语言·数据结构·c++·学习·算法·visual studio code·visual studio
亓才孓4 小时前
【SQLAlchemy】个人快速学习笔记
笔记·学习