00.引言

在当今快速发展的 AI 领域,多模态模型正逐渐成为推动技术革新的重要力量。Google 最新推出的 Gemma 3 模型,凭借其轻量级、多模态的特性,为文本生成和图像理解任务带来了全新的可能性。它不仅支持文本和图像输入,还具备强大的语言处理能力,覆盖超过 140 种语言,并且能够在资源有限的设备上高效运行。从问答到摘要,从推理到图像分析,Gemma 3 正在重新定义 AI 模型的边界,为开发者和研究人员提供了一个极具潜力的工具。

01.描述

Gemma 是来自 Google 的一系列轻量级、最先进的开源模型,基于用于创建 Gemini 模型的相同研究和技术构建。Gemma 3 模型是多模态的,处理文本和图像输入并生成文本输出,包括预训练变体和指令调优变体的开放权重。Gemma 3 具有大的 128K 上下文窗口,支持超过 140 种语言,并且比前代版本提供更多的尺寸选择。Gemma 3 模型非常适合各种文本生成和图像理解任务,包括问答、摘要和推理。它们相对较小的体积使得可以在资源有限的环境中部署,如笔记本电脑、台式机或您自己的云基础设施,从而普及了对最先进 AI 模型的访问,并帮助每个人促进创新。

02.输入和输出

  • 输入:

  • 文本字符串,例如问题、提示或需要总结的文档

  • 图像,归一化为 896 x 896 分辨率,并编码为每个 256 个令牌

  • 对于 4B、12B 和 27B 尺寸,总输入上下文为 128K 令牌;对于 1B 尺寸,总输入上下文为 32K 令牌

  • 输出:

  • 根据输入生成的文本,例如对问题的回答、图像内容分析或文档摘要

  • 总输出上下文为 8192 令牌

使用方法

模型推理

环境安装

!pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3

推理代码

from transformers import AutoTokenizer, BitsAndBytesConfig, Gemma3ForCausalLM
import torch
from modelscope import snapshot_download

model_id = snapshot_download("LLM-Research/gemma-3-1b-it")

#quantization_config = BitsAndBytesConfig(load_in_8bit=True)

model = Gemma3ForCausalLM.from_pretrained(
    model_id
).eval()

tokenizer = AutoTokenizer.from_pretrained(model_id)

messages = [
    [
        {
            "role": "system",
            "content": [{"type": "text", "text": "You are a helpful assistant."},]
        },
        {
            "role": "user",
            "content": [{"type": "text", "text": "Write a poem on Hugging Face, the company"},]
        },
    ],
]
inputs = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)


with torch.inference_mode():
    outputs = model.generate(**inputs, max_new_tokens=64)

outputs = tokenizer.batch_decode(outputs)

模型微调

ms-swift已经支持了gemma3系列模型的微调。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 .

使用文本数据集训练gemma3-1b-it模型

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model LLM-Research/gemma-3-1b-it \
    --train_type lora \
    --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#5000' \
              'AI-ModelScope/alpaca-gpt4-data-en#5000' \    
    --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 \
    --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

训练显存占用:

使用OCR图像数据集训练gemma3-4b-it模型

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model LLM-Research/gemma-3-4b-it \
    --dataset 'AI-ModelScope/LaTeX_OCR:human_handwrite#20000' \
    --train_type dummy \
    --torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --eval_steps 200 \
    --save_steps 200 \
    --save_total_limit 5 \
    --logging_steps 5 \
    --max_length 2048 \
    --output_dir output \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4

训练显存占用:

 

 

添加图片注释,不超过 140 字(可选)

如果要使用自定义数据集进行训练,你可以参考以下格式,并指定`--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"]}

训练完成后,使用以下命令对训练后的权重进行推理,这里的`--adapters`需要替换成训练生成的last checkpoint文件夹。

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>'

点击链接跳转

google/gemma-3-1b-it

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐