当前位置: 首页 > article >正文

读 Gemma 3 二分

读 Gemma 3 二分

flyfish

1. 引言

Gemma 3 是 Google DeepMind 开发的轻量级开源多模态模型,参数规模从 10 亿到 270 亿不等。作为 Gemini 家族的新成员,它在 Gemma 2 的基础上引入了视觉理解能力、多语言支持和超长上下文窗口(最高 128K tokens),并通过架构优化降低了长上下文推理的内存消耗。通过知识蒸馏和新型后训练方法,Gemma 3 在数学、对话、指令遵循等任务上表现显著提升,部分模型性能已接近 Gemini-1.5-Pro。所有模型均向社区开源,推动普惠化 AI 创新。


2. 模型架构

2.1 基础架构

Gemma 3 延续了前两代的解码器-only Transformer 架构,采用 Grouped-Query Attention (GQA) 和 QK-norm 技术,替代了 Gemma 2 的 soft-capping 机制,提升了训练稳定性。具体改进包括:

  • 局部/全局注意力层交错:采用 5:1 的局部与全局注意力层交替模式(5 层局部 + 1 层全局),局部层使用 1024 tokens 的滑动窗口处理近期上下文,全局层处理长距离依赖,显著减少 KV 缓存内存占用。
  • 位置编码扩展:通过调整 RoPE 基频(全局层 1M,局部层 10K)和位置插值技术,将预训练时的 32K 上下文扩展至 128K(1B 模型为 32K)。

2.2 多模态整合

2.2.1 视觉编码器
  • SigLIP 视觉编码器:集成 400M 参数的 SigLIP 编码器,将图像统一编码为 256 个软 token。编码器输入为 896×896 分辨率图像,通过平均池化适配不同尺寸图像。
  • Pan & Scan 算法:对非正方形或高分辨率图像进行分块处理(每块 896×896),每块生成 256 个 token,确保复杂图像的完整信息提取。
    SigLIP是一种基于CLIP框架改进的视觉编码器,由Zhai等人在2023年提出,主要通过使用sigmoid二分类损失替代传统的softmax交叉熵损失来简化训练流程,并支持更大批量的训练。此外,SigLIP还采用了锁定图像编码器权重的方法,仅微调文本编码器以降低计算成本。Gemma 3集成了一个400M参数的SigLIP轻量版本,图像被统一调整为896×896分辨率并通过卷积或Vision Transformer提取特征,然后使用平均池化将这些高维特征压缩为256个软token以确保与文本token维度一致。软token是连续的向量表示,用于将图像信息转换为语言模型可处理的格式,与硬token相比,它们提供了一种动态适应不同图像内容的方式,避免了离散化带来的信息损失。在Gemma 3中,对于896×896分辨率的图像,假设特征图尺寸为224×224,通过4×4平均池化将每个区域压缩为1个token,最终得到3136个特征,进一步压缩为256个软token。当输入图像尺寸变化时,通过动态调整池化窗口大小确保输出token数固定为256。Pan & Scan算法则针对非正方形或超高分辨率图像进行处理,将其分割为多个非重叠的896×896子块,每个子块独立编码为256个软token,这种方法特别适用于复杂图像如文档扫描件和全景图的信息提取,提升了视觉问答准确率。多模态输入整合通过软token将图像信息与文本token统一为序列输入,结合局部/全局注意力机制交互,同时固定数量的软token有助于减少内存波动并降低长上下文推理的成本。
2.2.2 多模态输入处理
  • 文本与图像 token 共享上下文窗口:输入容量为 128K tokens(4B/12B/27B 版本)或 32K tokens(1B 版本),单张图像固定为 256 tokens。

2.3 参数规模与硬件适配

  • 模型参数:提供 1B、4B、12B、27B 四种参数规模,其中 27B 模型包含 25600M 非嵌入参数。
  • 训练基础设施:使用 TPUv5e、TPUv4 等硬件,通过数据分片(Data/Seq./Replica)和 ZeRO-3 优化器状态分片技术实现高效分布式训练。

3. 输入与输出处理

3.1 输入形式

  • 文本输入:通过 SentencePiece 分词器转换为 token 序列,支持多语言(如中文、阿拉伯语)。
  • 图像输入:通过 SigLIP 编码器转换为 256 个 token,支持 896×896 分辨率,非正方形图像通过 Pan & Scan 算法分块处理。
  • 混合输入容量:文本与图像 token 总和受限于上下文窗口(如 128K tokens)。

3.2 输出形式

  • 文本响应:最大生成长度为 8192 tokens,IT 模型以 <end_of_turn> 结尾,PT 模型以 <eos> 结尾。
  • 格式控制:输入需显式添加 [BOS][EOS] token,多轮对话通过 <start_of_turn><end_of_turn> 标记区分用户与模型轮次。

4. 训练方法

4.1 预训练

  • 数据与 token 预算:预训练数据包括文本和图像,token 预算较 Gemma 2 增加(如 27B 模型为 14T tokens),并增加多语言数据比例。
  • 知识蒸馏:从大型教师模型(如 Gemini 系列)进行蒸馏,采样 256 个 logits/ token,通过交叉熵损失学习教师分布。
  • 数据过滤与质量控制:使用 Sachdeva et al. (2024) 的质量重加权方法,减少低质量数据,并过滤敏感信息。

4.2 指令微调 (IT)

  • 后训练技术:结合改进的知识蒸馏(Agarwal et al., 2024)和强化学习微调(RLHF),使用 BOND、WARM、WARP 等方法优化奖励函数,提升数学、编码、对话等能力。
  • 数据优化:过滤包含个人信息、有毒内容的示例,引入子集鼓励上下文归因和拒绝回答,减少幻觉。

4.3 量化与部署

  • 量化感知训练 (QAT):通过 5,000 步微调生成量化版本(int4、FP8),降低内存占用。例如,27B 模型量化后内存从 72.7GB 降至 32.8GB(int4)。
  • 硬件适配:支持从手机、笔记本到高端 GPU 的多样化部署,量化模型适配边缘设备。

token

1. 文本token

  • 定义:通过SentencePiece分词器将输入文本分割成的子词单元(subword units),用于表示语言模型的核心输入。
  • 生成方式
    • 使用Gemini 2.0的SentencePiece分词器,支持多语言(如中文、阿拉伯语等)。
    • 采用split digits、保留空格和字节级编码,词汇表大小为262k。
  • 作用
    • 作为语言模型的输入,参与上下文理解和生成。
    • 支持多语言任务,如翻译、问答等。
  • 容量限制
    • 4B/12B/27B模型:上下文窗口最大128K tokens。
    • 1B模型:上下文窗口最大32K tokens。
  • 文档依据
    • :“Tokenizer. We use the same tokenizer as Gemini 2.0: a SentencePiece tokenizer…”
    • :“Gemma 3 models support context length of 128K tokens, with the exception of the 1B model that has 32K.”

2. 图像token

  • 定义:通过SigLIP视觉编码器将图像转换为的固定长度(256个)软token序列,用于多模态输入。
  • 生成方式
    • 图像通过SigLIP视觉编码器(400M参数)处理为256个软token。
    • 输入图像统一调整为896×896分辨率,通过平均池化压缩为256个token。
    • 非正方形或高分辨率图像通过Pan & Scan算法分块处理,每块生成256个token。
  • 作用
    • 将视觉信息转化为语言模型可处理的序列形式。
    • 支持图文联合推理,如视觉问答、图像描述等。
  • 容量限制
    • 每张图像固定为256 tokens,与文本token共享上下文窗口。
  • 文档依据
    • :“images as a sequence of soft tokens encoded by SigLIP”
    • :“condensing the vision embeddings into a fixed size of 256 vectors”
    • :“Pan & Scan (P&S) algorithm segments images into non-overlapping crops of equal size…”

3. 量化token

  • 定义:通过量化感知训练(QAT)生成的低比特率token表示,用于内存优化和边缘设备部署。
  • 生成方式
    • 对预训练模型进行5,000步微调,使用非量化模型的概率分布作为目标。
    • 支持三种格式:per-channel int4、per-block int4、switched FP8。
  • 作用
    • 减少模型内存占用,例如27B模型量化后内存从72.7GB降至32.8GB(int4)。
    • 适配消费级硬件(如手机、笔记本)。
  • 文档依据
    • :“Quantization Aware Training (QAT) (Jacob et al., 2018)”
    • :“memory footprints (in GB) comparison between raw (bfloat16) and quantized checkpoints”

4. 控制token

  • 定义:用于格式控制和对话管理的特殊token,确保模型输入输出的结构化。
  • 类型与作用
    • [BOS]:起始token,需显式添加到输入文本开头。
    • [EOS]:结束token,PT模型生成文本后自动添加。
    • <start_of_turn>/<end_of_turn>:标记对话轮次,区分用户与模型输入。
  • 文档依据
    • :“text starts with a [BOS] token”
    • :“IT models output a <end_of_turn> at the end of the generation”
    • :“Formatting for Gemma IT models. Explicitly add the [BOS] token…”

5. 混合输入token

  • 定义:文本token与图像token的组合,共同构成模型的输入序列。
  • 容量限制
    • 总输入token数 = 文本token数 + 图像token数(每张256) ≤ 上下文窗口容量(128K/32K)。
  • 文档依据
    • :“increase in context size to 128K tokens”
    • :“Vision encoder takes as input square images…”

关键关系总结

类型生成方式容量限制作用
文本tokenSentencePiece分词器128K(4B/12B/27B)/32K(1B)语言理解与生成
图像tokenSigLIP视觉编码器(256 tokens/图)与文本token共享上下文窗口图像信息编码与多模态交互
量化token量化感知训练(int4/FP8)内存占用减少50%-70%部署优化与边缘设备支持
控制token预定义特殊符号固定长度(如[BOS]占1 token)格式控制与对话管理
混合输入token文本+图像token序列128K/32K tokens多模态联合处理

输入 token 数:受限于上下文窗口(128K/32K),由文本和图像 token 共同占用。
输出 token 数:独立限制为 8,192 tokens,与输入无关。

快速上手指南

一、环境准备
  1. 安装适配Gemma Transformers库
pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3

二、使用pipeline API进行推理
  1. 初始化模型与处理器
from modelscope import pipeline
import torch

# 初始化多模态文本生成pipeline
pipe = pipeline(
    "image-text-to-text",
    model="LLM-Research/gemma-3-12b-it",
    device="cuda",
    torch_dtype=torch.bfloat16
)
  1. 构造多模态输入
messages = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "You are a helpful assistant."}]
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://example.com/image.jpg"},  # 图像URL
            {"type": "text", "text": "What animal is on the candy?"}  # 文本提问
        ]
    }
]
  1. 执行推理
output = pipe(text=messages, max_new_tokens=200)
print(output[0][0]["generated_text"][-1]["content"])

示例输出

Okay, let's take a look! 
Based on the image, the animal on the candy is a **turtle**. 
You can see the shell shape and the head and legs.

三、多GPU部署(单/多卡通用)
  1. 安装加速库
pip install accelerate
  1. 加载模型与处理器
from modelscope import AutoProcessor, Gemma3ForConditionalGeneration
from PIL import Image
import torch

model_id = "LLM-Research/gemma-3-12b-it"

# 自动分配设备(支持多GPU)
model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id, device_map="auto"
).eval()

processor = AutoProcessor.from_pretrained(model_id)
  1. 多模态输入处理
messages = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "You are a helpful assistant."}]
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "https://example.com/bee.jpg"},  # 直接传入图像
            {"type": "text", "text": "Describe this image in detail."}
        ]
    }
]

# 生成模型输入
inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True, tokenize=True,
    return_dict=True, return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)
  1. 执行生成
with torch.inference_mode():
    generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
    generation = generation[0][inputs["input_ids"].shape[-1]:]  # 裁剪输入部分

# 解码输出
decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)

示例输出

**Overall Impression:** The image is a close-up shot of a vibrant garden scene, 
focusing on a cluster of pink cosmos flowers and a busy bumblebee. 
It has a slightly soft, natural feel, likely captured in daylight.


http://www.kler.cn/a/586859.html

相关文章:

  • 《Python全栈开发》第10课:数据库入门 - SQLite与SQLAlchemy
  • 利用 OpenCV 库进行实时目标物体检测
  • 大数据-spark3.5安装部署之standalone模式
  • uniapp报毒
  • lanqiaoOJ 1180:斐波那契数列 ← 矩阵快速幂
  • 找工作、创业的思考和出路
  • JVM之工具篇
  • 华为手机助手输入连接码时光标乱跳
  • 数据结构(C\C++)——算法复杂度
  • Django 分页操作详解
  • 【CodeMirror】系列(一)官网文档学习(二)核心扩展列表
  • Jetson Nano NX 重装系统
  • CSS3学习教程,从入门到精通, CSS3入门介绍的语法知识点及案例(1)
  • ssh通过22端口无法连接服务器问题处理
  • Python----数据可视化(Pyecharts三:绘图二:涟漪散点图,K线图,漏斗图,雷达图,词云图,地图,柱状图折线图组合,时间线轮廓图)
  • Java方法继承、方法重载、方法覆盖总结
  • Hive SQL 精进系列: IF 函数的强大功能与高级应用
  • Qlik Sense New Install with Restore
  • 【PlatformIO】基于Arduino的ESP8266 锂电池电压、电量测试
  • 射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用