低成本、高效率、不依赖更大显存——这或许是你一直在等的长上下文新思路。
当前大语言模型(LLM)在处理超长文本(如整本小说、长代码库、法律文书)时面临一个核心瓶颈:计算与显存成本爆炸式增长。
- 扩展到 128K、1M token?训练和推理动辄需要数十张 H100。
- 即便使用稀疏注意力、位置插值等技巧,token 数量没变,总开销依然巨大。
- 检索增强(RAG)虽能缩短输入,但可能漏掉关键信息。
有没有一种方法,既不增加模型上下文长度,又能“塞进”更多原始文本?
清华 CoAI 实验室 & 智谱 AI 给出了一个意想不到的答案:把文字变成图片,让视觉语言模型(VLM)来“读”!
01用“视觉压缩”替代“token 扩展”
论文提出 Glyph —— 一个通过视觉-文本压缩实现长上下文建模的新范式。
核心思想很简单:
将超长文本渲染为紧凑图像,用 VLM 直接处理图像,每个视觉 token 承载多个文本 token 的语义。
比如:
- 一本 24 万 token 的《简·爱》,传统 LLM 无法完整输入(128K 上下文不够)。
- Glyph 将其渲染为约 8 万视觉 token 的图像,轻松塞进 128K 上下文的 VLM 中,压缩比达 3×!
02Glyph 三阶段训练流程
1、持续预训练(Continual Pre-Training)
将海量长文本用多种样式(网页、代码、文档、暗色模式等)渲染成图像。
训练 VLM 理解这些“文字图片”,任务包括:
- OCR(还原图像中的文字)
- 跨模态语言建模(图文混合输入)
- 生成缺失段落
2、LLM 驱动的渲染配置搜索
- 渲染效果(字体、DPI、行距、颜色等)直接影响压缩率与可读性。
- 团队设计了一个基于遗传算法的自动搜索流程,由 LLM 担任“评委”,迭代优化渲染参数,在压缩率与准确率之间找最佳平衡。
3、后训练(SFT + 强化学习 + OCR 对齐)
- 在最优渲染配置下,进行监督微调(SFT)和强化学习(GRPO)。
- 额外加入 OCR 辅助任务,确保模型能精准“看清”文字细节。
03实验结果:性能不输,速度翻倍!
Glyph 基于 GLM-4.1V-9B 视觉语言模型构建,与 Qwen3-8B、LLaMA-3.1-8B 等主流 LLM 对比:
| 指标 | Glyph 表现 |
| 压缩比 | 3–4×(部分任务达 5×) |
| LongBench 平均分 | 50.56,与 Qwen3-8B(47.46)相当 |
| MRCR multi Needle召回 | 4 Needle/8 Needle任务排名第一或第二 |
| 推理速度 | Prefill 快 4.8×,解码快 4.4× |
| SFT 训练速度 | 快约 2× |
| 极端压缩 | 8× 压缩下仍可处理 1M token 级任务 |
💡 更关键的是:显存占用直接下降约 2/3(KV Cache 与 token 数成正比)。
04额外惊喜:提升多模态任务表现!
虽然 Glyph 主要用于“文本变图像”,但它在真实多模态场景(如 PDF 文档理解)中也表现优异:
- 在 MMLongBench-Doc(130 份长 PDF + 多样布局)上,
- Glyph 相比基线 VLM,整体准确率提升 13%!
这意味着:视觉压缩不仅没损害能力,反而增强了模型对图文混合内容的理解。
05意义:低成本实现长上下文
如果你:
- 使用家用级显卡(如 4090、3090)
- 倾向开源工具链
- 追求高性价比推理
那么 Glyph 提供了一条极具吸引力的路径:
无需训练超大上下文模型,只需一个强大的 VLM + 合理的文本渲染策略,就能低成本处理百万 token 级任务。
项目已开源 👉:https://github.com/thu-coai/Glyph
模型已开源 👉:https://modelscope.cn/models/ZhipuAI/Glyph
06异同之间:两种路径,一个目标
前不久DeepSeek 推出了 DeepSeek OCR,虽然目标一致,但 Glyph 和 DeepSeek OCR 的侧重点有所不同:
- 目标场景:Glyph 是一个通用的长上下文建模框架,旨在让任何长文本任务都能受益于视觉压缩;而 DeepSeek OCR 更像是一个强大的文档处理模型,专注于将非结构化文档图片高效转化为结构化数据。
- 压缩率与精度:DeepSeek OCR 追求极致的压缩效率(最高可达 20 倍),而 Glyph 则在 3-4 倍的压缩率下,更强调与顶尖 LLM 的性能对齐 。
- 技术细节:Glyph 创新性地引入了 LLM 驱动的自动配置搜索,以适配不同下游任务;DeepSeek OCR 则在多语言支持(约 100 种)和复杂版面还原上展现了强大能力 。
07模型推理
from modelscope import AutoProcessor, AutoModelForImageTextToText import torch messages = [ { "role": "user", "content": [ { "type": "image", "url": "https://raw.githubusercontent.com/thu-coai/Glyph/main/assets/Little_Red_Riding_Hood.png" }, { "type": "text", "text": "Who pretended to be Little Red Riding Hood's grandmother" } ], } ] processor = AutoProcessor.from_pretrained("ZhipuAI/Glyph") model = AutoModelForImageTextToText.from_pretrained( pretrained_model_name_or_path="ZhipuAI/Glyph", torch_dtype=torch.bfloat16, device_map="auto", ) inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pt" ).to(model.device) generated_ids = model.generate(**inputs, max_new_tokens=8192) output_text = processor.decode(generated_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False) print(output_text)
显存占用:
08模型微调
ms-swift支持了对Glyph的微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型训练部署框架。ms-swift开源地址:https://github.com/modelscope/ms-swift
在开始微调之前,请确保您的环境已准备妥当。
pip install "transformers>=4.57" # pip install git+https://github.com/modelscope/ms-swift.git git clone https://github.com/modelscope/ms-swift.git cd ms-swift pip install -e .
如果您需要自定义数据集微调模型,你可以将数据准备成以下格式,并在命令行中设置`--dataset train.jsonl --val_dataset val.jsonl`,验证集为可选。
{"messages": [{"role": "user", "content": "<image>Who pretended to be Little Red Riding Hood's grandmother"}, {"role": "assistant", "content": "<think>Got it, let's see. The question is who pretended to be Little Red Riding Hood's grandmother. From the story, the wolf dressed up like the grandmother. Let me check again: \"The wolf put on grandma's dress and hat, and slid into the bed.\" Oh right, so the wolf is the one pretending.</think>The wolf"}], "images": ["https://raw.githubusercontent.com/thu-coai/Glyph/main/assets/Little_Red_Riding_Hood.png"]}
以下提供对ZhipuAI/Glyph模型的微调脚本,显存占用22GiB:
# 22GiB # 你可以将数据集替换为`AI-ModelScope/LaTeX_OCR:human_handwrite#5000`跑通训练 PYTORCH_CUDA_ALLOC_CONF='expandable_segments:True' \ CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model ZhipuAI/Glyph \ --dataset '<train.jsonl>' \ --load_from_cache_file true \ --split_dataset_ratio 0.01 \ --train_type lora \ --torch_dtype bfloat16 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --freeze_vit true \ --freeze_aligner true \ --gradient_checkpointing true \ --vit_gradient_checkpointing false \ --gradient_accumulation_steps 16 \ --eval_steps 100 \ --save_steps 100 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --warmup_ratio 0.05 \ --dataset_num_proc 4 \ --dataloader_num_workers 4
训练结束后,我们使用以下脚本对验证集进行推理:
PYTORCH_CUDA_ALLOC_CONF='expandable_segments:True' \ CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/vx-xxx/checkpoint-xxx \ --stream true \ --max_new_tokens 2048 \ --load_data_args true
推送模型到ModelScope:
swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id '<your-model-id>' \ --hub_token '<your-sdk-token>'
点击即可跳转模型:https://modelscope.cn/models/ZhipuAI/Glyph