谷歌开源大模型Gemma初体验

谷歌发布了Gemma系列大型语言模型,提供了7B和2B参数版本,支持高效部署。文章介绍了如何在HuggingFace上配置环境、下载模型、微调过程,特别是使用PEFT和LoRA技术。通过实例展示了如何使用Gemma进行微调,并鼓励读者尝试HuggingFace的聊天演示进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

2024年2月21日,谷歌发布了一系列最新的开放式大型语言模型 —— Gemma!
Gemma 提供两种规模的模型:7B 参数模型,针对消费级 GPU 和 TPU 设计,确保高效部署和开发;2B 参数模型则适用于 CPU 和移动设备。每种规模的模型都包含基础版本和经过指令调优的版本。

  • Gemma发布博客:https://huggingface.co/blog/zh/gemma
  • Gemma文档:https://huggingface.co/docs/transformers/v4.38.0/en/model_doc/gemma
  • GPU colab教程:https://huggingface.co/google/gemma-7b/blob/main/examples/notebook_sft_peft.ipynb
  • TPU训练脚本示例:https://huggingface.co/google/gemma-7b/blob/main/examples/example_fsdp.py
  • 基于Hugging Face微调示例:https://huggingface.co/blog/zh/gemma-peft

以下内容参考huggingface博客

PEFT

对于中等大小的语言模型,常规的全参数训练也会非常占用内存和计算资源。对于依赖公共计算平台进行学习和实验的用户来说,如 Colab 或 Kaggle,成本可能过高。另一方面,对于企业用户来说,调整这些模型以适应不同领域的成本也是一个需要优化的重要指标。参数高效微调(PEFT)是一种以低成本实现这一目标的流行方法。

在 Hugging Face 的 transformers 中,Gemma 模型已针对 PyTorch 和 PyTorch/XLA 进行了优化,使得无论是 TPU 还是 GPU 用户都可以根据需要轻松地访问和试验 Gemma 模型。随着 Gemma 的发布,我们还改善了 PyTorch/XLA 在 Hugging Face 上的 FSDP 使用体验。这种 FSDP 通过 SPMD 的集成还让其他 Hugging Face 模型能够通过 PyTorch/XLA 利用 TPU 加速。本文将重点介绍 Gemma 模型的 PEFT 微调,特别是低秩适应(LoRA)。

想要深入了解 LoRA 技术,我们推荐阅读 Lialin 等人的

环境配置

pip install -q -U bitsandbytes==0.42.0
pip install -q -U peft==0.8.2
pip install -q -U trl==0.7.10
pip install -q -U accelerate==0.27.1
pip install -q -U datasets==2.17.0
pip install -q -U transformers==4.38.1

模型下载

要访问 Gemma 模型文件,用户需先填写 同意表格

现在,让我们开始实施。

假设您已提交同意表格,您可以从 Hugging Face Hub 获取模型文件。

除此之外,也可以从modelscope上面下载模型文件

modelscope模型卡链接:https://www.modelscope.cn/models/AI-ModelScope/gemma-7b-it/summary

下载代码示例:

#模型下载
from modelscope import snapshot_download
model_name = 'AI-ModelScope/gemma-7b-it'
cache_dir = 'models'
model_dir = snapshot_download(model_name,cache_dir=cache_dir)

微调示例

首先得有huggingface 账号,需要设置HF_TOKEN:

import os
os.environ['HF_TOKEN'] = "xxxxxxxxxxxx"

下载模型和分词器 (tokenizer),其中包含了一个 BitsAndBytesConfig 用于仅限权重的量化:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

# model_id = "google/gemma-2b"
model_path = "/workspace/models/AI-ModelScope/gemma-2b"
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

tokenizer = AutoTokenizer.from_pretrained(model_path, token=os.environ['HF_TOKEN'])
model = AutoModelForCausalLM.from_pretrained(model_path, quantization_config=bnb_config, device_map={"":0}, token=os.environ['HF_TOKEN'])

在开始微调前,我们先使用一个相当熟知的名言来测试一下 Gemma 模型:

text = "Quote: Imagination is more"
device = "cuda:0"
inputs = tokenizer(text, return_tensors="pt").to(device)

outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

数据集加载

选择一个英文“名人名言”数据集:

from datasets import load_dataset

# data = load_dataset("Abirate/english_quotes")
data = load_dataset("/workspace/datasets/Abirate/english_quotes")
data = data.map(lambda samples: tokenizer(samples["quote"]), batched=True)

注意,由于服务器不能链接外网,所以需要自己手动下载数据集,再上传,加载时只需指明数据集的路径即可,推荐使用github desktop下载,比较方便

微调Gemma

import transformers
from trl import SFTTrainer

def formatting_func(example):
    text = f"Quote: {example['quote'][0]}\nAuthor: {example['author'][0]}"
    return [text]

trainer = SFTTrainer(
    model=model,
    train_dataset=data["train"],
    args=transformers.TrainingArguments(
        per_device_train_batch_size=1,
        gradient_accumulation_steps=4,
        warmup_steps=2,
        max_steps=10,
        learning_rate=2e-4,
        fp16=True,
        logging_steps=1,
        output_dir="outputs",
        optim="paged_adamw_8bit"
    ),
    peft_config=lora_config,
    formatting_func=formatting_func,
)
trainer.train()

微调示例:
在这里插入图片描述
不知道为啥有个warning,但是不影响微调训练,测试一下结果:

text = "Quote: Imagination is"
device = "cuda:0"
inputs = tokenizer(text, return_tensors="pt").to(device)

outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

在这里插入图片描述

总结

大体流程就是这样的,另外推荐使用hugging face 的聊天演示做些测试:

  • https://huggingface.co/chat
    排行榜查看在这里:
  • https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard

更多内容请查看这里:

  • Gemma发布博客:https://huggingface.co/blog/zh/gemma
  • Gemma文档:https://huggingface.co/docs/transformers/v4.38.0/en/model_doc/gemma
  • GPU colab教程:https://huggingface.co/google/gemma-7b/blob/main/examples/notebook_sft_peft.ipynb
  • TPU训练脚本示例:https://huggingface.co/google/gemma-7b/blob/main/examples/example_fsdp.py
  • 基于Hugging Face微调示例:https://huggingface.co/blog/zh/gemma-peft
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值