01.引言
6月底,Google正式开源发布了全新端侧多模态大模型 Gemma 3n!相较此前的预览版,最新的 Gemma 3n 完整版进一步提升性能表现,支持在 2GB 内存的硬件上本地运行,重点提升了编码和推理方面的能力。
Gemma是来自Google的一系列轻量级、最先进的开放模型, 它们基于创建Gemini模型所用的相同研究和技术构建。 Gemma 3n模型专为在资源有限的设备上高效执行而设计。 它们能够处理多模态输入,包括文本、图像、视频和音频 输入,并生成文本输出,提供了预训练和指令调优变体的开放权重。这些模型使用了超过140种口语语言的数据进行训练。
Gemma 3n模型采用动态参数激活技术降低硬件负载,本次开源版本提供5B(E2B)与8B(E4B)两种规格。通过针对设备端的专属架构创新,可分别以传统2B、4B参数规模模型相当的内存运行,其实际运算量显著低于标称参数总量。有关Gemma 3n高效参数管理技术的更多信息,请参阅 Gemma 3n(https://ai.google.dev/gemma/docs/gemma-3n?hl=zh-cn#parameters) 页面。
模型链接:
- gemma-3n-E4B
https://www.modelscope.cn/models/google/gemma-3n-E4B
- gemma-3n-E4B-it
https://www.modelscope.cn/models/google/gemma-3n-E4B-it
- gemma-3n-E2B
https://www.modelscope.cn/models/google/gemma-3n-E2B
- gemma-3n-E2B-it
https://www.modelscope.cn/models/google/gemma-3n-E2B-it
02.模型数据
用于模型训练的数据以及数据处理方式
训练数据集
这些模型在一个包含多种来源的大约11万亿个token的数据集上进行了训练。训练数据的知识截止日期为2024年6月。以下是主要组成部分:
网页文档:多样化的网页文本确保模型接触到广泛的语言风格、主题和词汇。训练数据集包括超过140种语言的内容。
代码:让模型接触代码有助于学习编程语言的语法和模式,从而提高其生成代码和理解与代码相关问题的能力。
数学:通过数学文本进行训练有助于模型学习逻辑推理、符号表示,并解决数学查询。
图像:广泛的图像使模型能够执行图像分析和视觉数据提取任务。
音频:多样的声音样本使模型能够识别语音、从录音中转录文本并识别音频数据中的信息。
这些多样化数据源的结合对于训练一个强大的多模态模型至关重要,该模型能够处理各种不同的任务和数据格式。
数据预处理
以下是应用于训练数据的关键数据清理和过滤方法:
CSAM 过滤:在数据准备过程的多个阶段应用了严格的 CSAM(儿童性虐待材料)过滤,以确保排除有害和非法内容。
敏感数据过滤:为了使 Gemma 预训练模型安全可靠,使用了自动化技术从训练集中过滤出某些个人信息和其他敏感数据。
其他方法:根据我们的政策对内容质量和安全性进行过滤。
(chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://ai.google/static/documents/ai-responsibility-update-published-february-2025.pdf)
03.输入和输出
输入:
- 文本字符串:例如问题、提示或待总结的文档
- 图像:归一化为256x256、512x512或768x768分辨率,并编码为每个256个token
- 音频数据:从单声道编码为每秒6.25个token
- 总输入上下文为32K个token
输出:
- 生成对输入的响应文本,例如对问题的回答、图像内容分析或文档摘要
- 总输出长度可达32K个token,减去请求输入的token数
04.评估
模型评估指标和结果如下:
基准测试结果
这些模型在全精度(float32)下针对大量不同的数据集和指标进行了评估,以覆盖内容生成的不同方面。标记为 IT 的评估结果是针对指令调优模型的。标记为 PT 的评估结果是针对预训练模型的。
推理与事实性
Benchmark |
Metric |
n-shot |
E2B PT |
E4B PT |
HellaSwag |
Accuracy |
10-shot |
72.2 |
78.6 |
BoolQ |
Accuracy |
0-shot |
76.4 |
81.6 |
PIQA |
Accuracy |
0-shot |
78.9 |
81.0 |
SocialIQA |
Accuracy |
0-shot |
48.8 |
50.0 |
TriviaQA |
Accuracy |
5-shot |
60.8 |
70.2 |
Natural Questions |
Accuracy |
5-shot |
15.5 |
20.9 |
ARC-c |
Accuracy |
25-shot |
51.7 |
61.6 |
ARC-e |
Accuracy |
0-shot |
75.8 |
81.6 |
WinoGrande |
Accuracy |
5-shot |
66.8 |
71.7 |
BIG-Bench Hard |
Accuracy |
few-shot |
44.3 |
52.9 |
DROP |
Token F1 score |
1-shot |
53.9 |
60.8 |
多语言
Benchmark |
Metric |
n-shot |
E2B IT |
E4B IT |
MGSM: |
Accuracy |
0-shot |
53.1 |
60.7 |
WMT24++ (ChrF) |
Character-level F-score |
0-shot |
42.7 |
50.1 |
Include |
Accuracy |
0-shot |
38.6 |
57.2 |
MMLU (ProX) |
Accuracy |
0-shot |
8.1 |
19.9 |
OpenAI MMLU |
Accuracy |
0-shot |
22.3 |
35.6 |
Global-MMLU |
Accuracy |
0-shot |
55.1 |
60.3 |
ECLeKTic |
ECLeKTic score |
0-shot |
2.5 |
1.9 |
STEM and 代码
Benchmark |
Metric |
n-shot |
E2B IT |
E4B IT |
GPQA Diamond |
RelaxedAccuracy/accuracy |
0-shot |
24.8 |
23.7 |
LiveCodeBench v5 |
pass@1 |
0-shot |
18.6 |
25.7 |
Codegolf v2.2 |
pass@1 |
0-shot |
11.0 |
16.8 |
AIME 2025 |
Accuracy |
0-shot |
6.7 |
11.6 |
其他benchmarks
Benchmark |
Metric |
n-shot |
E2B IT |
E4B IT |
MMLU |
Accuracy |
0-shot |
60.1 |
64.9 |
MBPP |
pass@1 |
3-shot |
56.6 |
63.6 |
HumanEval |
pass@1 |
0-shot |
66.5 |
75.0 |
LiveCodeBench |
pass@1 |
0-shot |
13.2 |
13.2 |
HiddenMath |
Accuracy |
0-shot |
27.7 |
37.7 |
Global-MMLU-Lite |
Accuracy |
0-shot |
59.0 |
64.5 |
MMLU (Pro) |
Accuracy |
0-shot |
40.5 |
50.6 |
在哪些场景可以用
Gemma-3n-E4B-it在各行各业和各个领域都有广泛的应用。以下潜在用途列表并不全面。该列表的目的是提供关于模型创建者在模型训练和开发过程中考虑的可能用例的背景信息。
内容创作与沟通
- 文本生成:生成创意文本格式,如诗歌、剧本、代码、营销文案和电子邮件草稿。
- 聊天机器人和对话式AI:为客服、虚拟助手或交互式应用程序提供对话界面支持。
- 文本摘要:生成文本语料库、研究论文或报告的简洁摘要。
- 图像数据提取:为文本通信提取、解释并总结视觉数据。
- 音频数据提取:将口语转录成文字,在其他语言中进行语音到文本的翻译,并分析基于声音的数据。
研究与教育
- 自然语言处理(NLP)和生成模型研究:这些模型可以作为研究人员实验生成模型和NLP技术的基础,开发算法,并推动该领域的发展。
- 语言学习工具:支持互动的语言学习体验,帮助纠正语法或提供写作练习。
- 知识探索:通过生成摘要或回答特定主题的问题来帮助研究人员探索大量数据。
05.使用方法
以下是一些快速开始运行模型的代码片段。首先,安装Transformers库。Gemma 3n从transformers 4.53.0版本开始支持。
$ pip install -U transformers
from modelscope import AutoProcessor, Gemma3nForConditionalGeneration from PIL import Image import requests import torch model_id = "google/gemma-3n-e4b-it" model = Gemma3nForConditionalGeneration.from_pretrained(model_id, device_map="auto", torch_dtype=torch.bfloat16,).eval() processor = AutoProcessor.from_pretrained(model_id) messages = [ { "role": "system", "content": [{"type": "text", "text": "You are a helpful assistant."}] }, { "role": "user", "content": [ {"type": "image", "image": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/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) input_len = inputs["input_ids"].shape[-1] with torch.inference_mode(): generation = model.generate(**inputs, max_new_tokens=100, do_sample=False) generation = generation[0][input_len:] 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.
在GPU上运行模型
显存占用
编辑
06.模型微调
ms-swift已经支持了gemma-3n系列模型的微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型训练部署框架。
ms-swift开源地址:
https://github.com/modelscope/ms-swift
我们将展示可运行的微调demo,并给出自定义数据集的格式。
在开始微调之前,请确保您的环境已准备妥当。
# 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 .
以google/gemma-3n-E4B-it模型为例,图像OCR微调脚本如下。更多任务,包括音频微调、grounding任务微调,可以参考这里:https://github.com/modelscope/ms-swift/tree/main/examples/train/multimodal
CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model google/gemma-3n-E4B-it \ --dataset AI-ModelScope/LaTeX_OCR:human_handwrite#20000 \ --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 \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 5 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --warmup_ratio 0.05 \ --dataloader_num_workers 4
训练显存占用:
编辑
自定义数据集格式如下(system字段可选),只需要指定`--dataset <dataset_path>`即可:
{"messages": [{"role": "user", "content": "浙江的省会在哪?"}, {"role": "assistant", "content": "浙江的省会在杭州。"}]} {"messages": [{"role": "user", "content": "<image><image>两张图片有什么区别"}, {"role": "assistant", "content": "前一张是小猫,后一张是小狗"}], "images": ["/xxx/x.jpg", "/xxx/x.png"]} {"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<audio>猜测一下演讲者的年龄和性别"}, {"role": "assistant", "content": "20岁左右的女性"}], "videos": ["/xxx/x.wav"]}
训练完成后,使用以下命令对训练时的验证集进行推理:
CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/vx-xxx/checkpoint-xxx \ --stream false \ --max_batch_size 1 \ --load_data_args true \ --max_new_tokens 2048
推送模型到ModelScope:
CUDA_VISIBLE_DEVICES=0 \ swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id '<your-model-id>' \ --hub_token '<your-sdk-token>'
点击阅读原文,即可跳转模型合集~