RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Google Gemma 2模型的部署和Fine-Tune演示

谷歌開發(fā)者 ? 來源:谷歌云服務(wù) ? 2024-08-09 17:04 ? 次閱讀

以下文章來源于谷歌云服務(wù),作者 Google Cloud

作者 / 曹治政,Google Cloud 解決方案架構(gòu)師

Google 近期發(fā)布了最新開放模型 Gemma 2,目前與同等規(guī)模的開放模型相比,取得了明顯的優(yōu)勢,同時在安全可控性上得到了顯著的增強。

Gemma 2 提供了 9B 以及 27B 兩種參數(shù)規(guī)模的選擇,同時分別提供了預(yù)訓(xùn)練模型 (Gemma 2-9B/Gemma 2-27B) 與指令微調(diào)模型 (Gemma 2-9B-it/Gemma 2-27B-it),優(yōu)異的性能表現(xiàn)原自 Gemma 2 在訓(xùn)練階段的各項技術(shù)創(chuàng)新。

Gemma 2 支持 8192 tokens 的上下文長度,同時使用了旋轉(zhuǎn)位置編碼 (RoPE)。Gemma 2-9B 在 Google TPUv4 上訓(xùn)練而成,Gemma 2-27B 在 Google TPUv5p 上訓(xùn)練而成。

作為開放模型,用戶目前可以在 Hugging Face 以及 Kaggle 上免費獲取模型權(quán)重。

1用戶可以選擇先把模型下載到本地或者云端共享存儲,然后將模型部署至推理框架上。

2也可以選擇在部署模型的過程中從 Hugging Face 上下載模型。

我們通常建議使用第一種方案,這種方式可以避免每次部署模型都從公網(wǎng)下載,提升模型加載以及擴展效率。

Gemma 2 生態(tài)廣泛,支持通過多種主流框架進(jìn)行模型的部署,這些框架包括但不限于:

● Hugging Face Transformers

●Keras NLP

●Pytorch

●Gemma C++

●GGUF

Tensorflow Lite

TensorRT-LLM

●MaxText

●Pax

●Flax

●vLLM

●oLLama

此外,用戶也可以根據(jù)實際需求選擇靈活的方式部署 Gemma 2 模型,這些部署方案通常包括:

1本地或 colab 部署:個人用途,體驗?zāi)P凸δ芑蛘邩?gòu)建個人助理。

2GKE 或第三方 Kubernetes 平臺部署:生產(chǎn)用途,用于將模型和生產(chǎn)業(yè)務(wù)系統(tǒng)集成,同時充分借助 Kubernetes 平臺資源調(diào)度和擴展的優(yōu)勢。

3Vertex AI 部署:生產(chǎn)用途,用于將模型和生產(chǎn)業(yè)務(wù)系統(tǒng)集成,同時借助 Google AI PaaS 平臺全托管的優(yōu)勢。

Google Cloud 為用戶提供了方便的操作服務(wù),用戶可以在 Vertex AI Model Garden 上將 Gemma 2 一鍵部署 GKE 集群或者 Vertex AI endpoint 上,并通過可視化界面對性能和日志進(jìn)行實時查看,同時也根據(jù)請求的流量對推理實例動態(tài)的擴縮容。

Gemma 2 支持模型的 fine-tuning,用戶可以利用私有數(shù)據(jù)或者領(lǐng)域內(nèi)的特定數(shù)據(jù)對模型進(jìn)行 fine-tune,對齊領(lǐng)域內(nèi)的風(fēng)格和標(biāo)準(zhǔn)、從而更好地支撐業(yè)務(wù)場景。

大模型的 fine-tuning 通常包括以下幾種方式:

●Full Parameter fine-tuning

Lora fine-tuning

●QLora fine-tuning

其中 Full Parameter fine-tuning 需要對模型的全部參數(shù)進(jìn)行重新訓(xùn)練,Lora fine-tuning 通過訓(xùn)練少量的低秩矩陣參數(shù)提升模型訓(xùn)練的效率,QLora fine-tuning 在 Lora 的基礎(chǔ)上對模型精度進(jìn)行了 4bit 或者 8bit 的量化處理來近一步優(yōu)化模型的存儲占用。

Lora 和 QLora 在一些特定的場景下可以用很低的成本取得非常好的效果,但是對于一些復(fù)雜的場景、或者領(lǐng)域數(shù)據(jù)更加豐富的場景,還是需要通過全量參數(shù)的方式進(jìn)行繼續(xù)訓(xùn)練。

本次演示我們會通過全量參數(shù)訓(xùn)練的方式對模型進(jìn)行 fine-tuning,同時結(jié)合 Deepspeed 框架來實現(xiàn)模型的分布式訓(xùn)練。

Fine-Tune 演示

a. 微調(diào)數(shù)據(jù)集

本次模型微調(diào),我們會對 Gemma 2-27B 的預(yù)訓(xùn)練基礎(chǔ)模型利用對話數(shù)據(jù)進(jìn)行微調(diào)。Gemma 2-27B 是預(yù)訓(xùn)練模型,不具備對話能力,通過對比 fine-tune 前后的模型,可以觀察模型訓(xùn)練的效果。

訓(xùn)練數(shù)據(jù)集使用了 Hugging Face 上的開放數(shù)據(jù)集 "smangrul/ultrachat-10k-chatml",它一共由 10k 行訓(xùn)練數(shù)據(jù)集以及 2k 行測試數(shù)據(jù)集組成。數(shù)據(jù)格式如圖所示,每一條數(shù)據(jù)的 message 列都由一個多輪對話組成。

08032110-49a2-11ef-b8af-92fbcf53809c.png

b. 訓(xùn)練環(huán)境

創(chuàng)建 Vertex AI Workbench,Vertex AI Workbench 是由 Google Cloud 托管的企業(yè)級 Jupyter Notebook 服務(wù),它支持多種硬件加速設(shè)備,同時預(yù)制了依賴包,用戶完成 Workbench 實例的創(chuàng)建后可以通過瀏覽器訪問 Jupyter Notebook 界面,之后快速開啟模型體驗之旅。

08273046-49a2-11ef-b8af-92fbcf53809c.png

△Vertex AI Workbench 實例創(chuàng)建界面

083d4976-49a2-11ef-b8af-92fbcf53809c.png

△Vertex AI Workbench 用戶界面

c. 微調(diào)步驟

1. 進(jìn)入 Vertex AI Workbench 界面,創(chuàng)建新文件,運行下面代碼,加載 Gemma 2-27B 基礎(chǔ)模型,并測試模型針對 prompt 的輸出,此步驟目的是為和訓(xùn)練后的輸出進(jìn)行訓(xùn)練效果對比。

from transformers import AutoTokenizer, AutoModelForCausalLM

import transformers

import torch

#加載模型

model_id = "google/gemma-2-27b"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,
)

#準(zhǔn)備prompt(對話格式)

prompt = """### Human: I can't cancel the subscription to your corporate newsletter### Assistant: """

#將prompt轉(zhuǎn)換成token id并輸入model生成內(nèi)容

inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=100)

#解碼token id,打印輸出

print(tokenizer.decode(outputs[0]))

084a6d40-49a2-11ef-b8af-92fbcf53809c.png

可以看到模型對話風(fēng)格生硬,自然對話的效果差。

2. 克隆 peft github 代碼,并切換至模型訓(xùn)練腳本界面。

!git clone https://github.com/huggingface/peft.git

!cd examples/sft/

Notes

Gemma 2 與開源的 Hugging Face 的 Transformer library 完全兼容,因此用于訓(xùn)練其它模型的腳本在更改模型名稱后,便可以開始訓(xùn)練 Gemma 模型。但是需要注意的是,不同模型多輪對話支持的特殊 token 可能不一樣,因此與之相對應(yīng)的 tokenzier 里面 chat 模板需要提前進(jìn)行處理。本次我們使用 chatml 格式的模板,只需要在示例腳本上設(shè)置對應(yīng)參數(shù),代碼對會自動對 tokenizer 進(jìn)行處理。

3. 配置 Hugging Face (用于模型下載) 以及 wandb (用于可視化展示訓(xùn)練監(jiān)控指標(biāo)) 的 token 環(huán)境變量。

!echo 'export HUGGINGFACE_TOKEN=YOUR_HF_API_TOKEN' >> ~/.bashrc

!echo 'export WANDB_API_KEY=YOUR_WANDB_API_KEY' >> ~/.bashrc

!source ~/.bashrc

4. 安裝依賴包

!pip install accelerate==0.32.1

!pip install deepspeed==0.14.4

!pip install transformers==4.42.4

!pip install peft==0.11.1

!pip install trl==0.9.6

!pip install bitsandbytes==0.43.1

!pip install wandb==0.17.4

5. 啟動訓(xùn)練任務(wù),命令會通過 accelerate 啟動一個單機八卡的訓(xùn)練任務(wù),分布式框架由 deepspeed 實現(xiàn)。訓(xùn)練任務(wù)由 Hugging Face SFTTrainer 實現(xiàn),它會下載 Hugging Face上的 "smangrul/ultrachat-10k-chatml" 數(shù)據(jù)集,并讀取 content 字段。

訓(xùn)練任務(wù)采用 bf16 混合精度,由于全量參數(shù)微調(diào)占用顯存很大,因此每個 GPU device 的 batch size 設(shè)置為 1 (激活值非常消耗內(nèi)存,若大于 1 會導(dǎo)致 OOM),通過將梯度累加設(shè)置將單個設(shè)備的有效 batch size 提升為 4,同時開啟 gradient_checkpointing 節(jié)省激活值對內(nèi)存的占用。

任務(wù)在訓(xùn)練過程中,指標(biāo)數(shù)據(jù)會實時傳送至 wandb,整個訓(xùn)練周期為 1 個 epoch,訓(xùn)練任務(wù)結(jié)束后,模型會自動存放至 gemma2-27b-sft-deepspeed路徑下。

# 任務(wù)訓(xùn)練任務(wù)啟動命令

!accelerate launch --config_file "configs/deepspeed_config.yaml" train.py
--seed 100
--model_name_or_path "google/gemma-2-27b"
--dataset_name "smangrul/ultrachat-10k-chatml"
--chat_template_format "chatml"
--add_special_tokens False
--append_concat_token False
--splits "train,test"
--max_seq_len 2048
--num_train_epochs 1
--logging_steps 5
--log_level "info"
--logging_strategy "steps"
--evaluation_strategy "epoch"
--save_strategy "epoch"
--bf16 True
--learning_rate 1e-4
--lr_scheduler_type "cosine"
--weight_decay 1e-4
--warmup_ratio 0.0
--max_grad_norm 1.0
--output_dir "gemma2-27b-sft-deepspeed"
--per_device_train_batch_size 1
--per_device_eval_batch_size 1
--gradient_accumulation_steps 4
--gradient_checkpointing True
--use_reentrant False
--dataset_text_field "content"

# Deespeed配置腳本

compute_environment: LOCAL_MACHINE
debug: false
deepspeed_config:
deepspeed_multinode_launcher: standard
gradient_accumulation_steps: 4
offload_optimizer_device: none
offload_param_device: none
zero3_init_flag: true
zero3_save_16bit_model: true
zero_stage: 3
distributed_type: DEEPSPEED
downcast_bf16: 'no'
machine_rank: 0
main_training_function: main
mixed_precision: bf16
num_machines: 1
num_processes: 8
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false

6. 觀察任務(wù)訓(xùn)練指標(biāo),等待任務(wù)訓(xùn)練結(jié)束。本次訓(xùn)練,測試數(shù)據(jù)由 10k 行組成,由于我們采用了 8 張卡訓(xùn)練,單個卡的 batch size 設(shè)置為 1,梯度累積設(shè)置為 4,因此 global batch size 為 1*4*8=32,單個 epoch 訓(xùn)練 step 數(shù)量為: 10000/32= 312 steps。從損失值圖表中可以看到,當(dāng)訓(xùn)練任務(wù)至 20 步左右時,損失值開始快速下降,之后平穩(wěn)收斂直到訓(xùn)練任務(wù)結(jié)束。

086c2386-49a2-11ef-b8af-92fbcf53809c.png

大約 41 分鐘,訓(xùn)練任務(wù)結(jié)束。

0890e48c-49a2-11ef-b8af-92fbcf53809c.png

7. 重新加載訓(xùn)練后的模型,并驗證訓(xùn)練效果。從內(nèi)容輸出中可以看到,模型很好地學(xué)習(xí)到了數(shù)據(jù)集生成對話的形式和總結(jié)風(fēng)格,能夠以更加流暢、自然的方式進(jìn)行對話。

from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch

model_id = "./gemma2-27b-sft-deepspeed"
dtype = torch.bfloat16

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,
)

prompt = """### Human: I can't cancel the subscription to your corporate newsletter### Assistant: """

inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=100)
print(tokenizer.decode(outputs[0]))

089427aa-49a2-11ef-b8af-92fbcf53809c.png

以上介紹了 Gemma-2-27B fine-tune 的一個簡單的實驗演示,通過實驗可以看出 Gemma 2 與主流的訓(xùn)練框架完全兼容,對于已經(jīng)了解如何 fine-tune 其它模型的開發(fā)人員可以快速切換至 Gemma 2 完成模型訓(xùn)練。

Google Cloud 還提供了更多高級的解決方案,可以幫助用戶通過 Vertex AI Pipeline 或者 Ray On GKE 等方式大規(guī)模、自動化地訓(xùn)練開放模型, 感興趣的讀者可以聯(lián)系 Google Cloud 的工作人員獲得更近一步的了解。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1762

    瀏覽量

    57504
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    30728

    瀏覽量

    268880
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3226

    瀏覽量

    48806

原文標(biāo)題:玩轉(zhuǎn) Gemma 2,模型的部署與 Fine-Tuning

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    了解BERT原理、技術(shù)、實踐,只需3分鐘

    它基于谷歌2017年發(fā)布的Transformer架構(gòu),通常的Transformer使用一組編碼器和解碼器網(wǎng)絡(luò),而BERT只需要一個額外的輸出層,對預(yù)訓(xùn)練進(jìn)行fine-tune,就可以滿足各種任務(wù),根本沒有必要針對特定任務(wù)對模型進(jìn)行修改。
    的頭像 發(fā)表于 03-01 08:58 ?8434次閱讀

    AI領(lǐng)域頂會EMNLP 2020落下帷幕

    自18年谷歌BERT橫空出世以來,預(yù)訓(xùn)練語言模型一躍成為自然語言處理領(lǐng)域的研究熱點,“Pre-training + Fine-tune”也成為NLP任務(wù)的新范式,將自然語言處理由原來的手工調(diào)參、依靠機器學(xué)習(xí)專家的階段,進(jìn)入到可以大規(guī)模、可復(fù)制的大工業(yè)施展的階段。
    的頭像 發(fā)表于 12-15 18:12 ?1889次閱讀

    當(dāng)“大”模型遇上“小”數(shù)據(jù)

    時,往往直接Fine-tuning會存在過擬合現(xiàn)象,進(jìn)一步會影響Fine-tune完后模型的Generalization能力。
    的頭像 發(fā)表于 11-09 15:49 ?1838次閱讀
    當(dāng)“大”<b class='flag-5'>模型</b>遇上“小”數(shù)據(jù)

    如何使用BERT模型進(jìn)行抽取式摘要

      最近在梳理文本摘要相關(guān)內(nèi)容,翻到一篇19年關(guān)于基于BERT模型進(jìn)行抽取式摘要的老文「BertSum」,在這里分享給大家。該論文一開始掛在arXiv時,為《Fine-tune BERT
    的頭像 發(fā)表于 03-12 16:41 ?4814次閱讀
    如何使用BERT<b class='flag-5'>模型</b>進(jìn)行抽取式摘要

    Transformer的細(xì)節(jié)和效果如何

    在文本理解任務(wù)(Natural Language Understanding)上,預(yù)訓(xùn)練模型已經(jīng)取得了質(zhì)的飛躍,語言模型預(yù)訓(xùn)練+下游任務(wù)fine-tune基本上已經(jīng)成為標(biāo)配。
    的頭像 發(fā)表于 08-30 10:12 ?993次閱讀

    如何部署ML模型Google云平臺

    實踐中的機器學(xué)習(xí):在 Google 云平臺上部署 ML 模型
    的頭像 發(fā)表于 07-05 16:30 ?664次閱讀
    如何<b class='flag-5'>部署</b>ML<b class='flag-5'>模型</b>到<b class='flag-5'>Google</b>云平臺

    自動駕駛中道路異常檢測的方法解析

    最近的辦法主要是通過Outlier Exposure (OE) 將一個不相干的OoD數(shù)據(jù)集加入到ID數(shù)據(jù)集, 然后fine-tune已經(jīng)訓(xùn)練好的close-set segmentation模型。在這
    發(fā)表于 08-15 10:43 ?1007次閱讀
    自動駕駛中道路異常檢測的方法解析

    如何本地部署模型

    近期,openEuler A-Tune SIG在openEuler 23.09版本引入llama.cpp&chatglm-cpp兩款應(yīng)用,以支持用戶在本地部署和使用免費的開源大語言模型,無需聯(lián)網(wǎng)也能使用!
    的頭像 發(fā)表于 10-18 11:48 ?2519次閱讀
    如何本地<b class='flag-5'>部署</b>大<b class='flag-5'>模型</b>

    谷歌發(fā)布全球最強開源大模型Gemma

    谷歌近日宣布,其全新開源大模型Gemma正式亮相。Gemma被譽為全球性能最強大、同時也是最輕量級的模型系列,分為2B(20億參數(shù))和7B(
    的頭像 發(fā)表于 02-22 14:51 ?792次閱讀

    谷歌宣布Gemma模型全球開放使用

    谷歌公司近日宣布,其先進(jìn)的AI大模型Gemma即日起在全球范圍內(nèi)開放使用。這一新模型由谷歌DeepMind和其他團隊合作開發(fā),并與其最大的AI模型Gemini共享技術(shù)和基礎(chǔ)架構(gòu)。
    的頭像 發(fā)表于 02-23 10:41 ?769次閱讀

    Google Gemma優(yōu)化后可在NVIDIA GPU上運行

    2024 年 2 月 21 日,NVIDIA 攜手 Google 在所有 NVIDIA AI 平臺上發(fā)布面向 Gemma 的優(yōu)化功能,Gemma
    的頭像 發(fā)表于 02-25 11:01 ?458次閱讀

    谷歌發(fā)布開源AI大模型Gemma

    近日,谷歌發(fā)布了全新AI大模型Gemma,這款模型為各種規(guī)模的組織提供了前所未有的機會,以負(fù)責(zé)任的方式在商業(yè)應(yīng)用中進(jìn)行分發(fā)。
    的頭像 發(fā)表于 02-28 17:38 ?838次閱讀

    谷歌AI大模型Gemma全球開放使用

    谷歌公司近日宣布,其全新的AI大模型Gemma現(xiàn)已在全球范圍內(nèi)開放使用。這一重要舉措不僅彰顯了谷歌在AI領(lǐng)域的領(lǐng)先地位,還為其在全球范圍內(nèi)的競爭力增添了新
    的頭像 發(fā)表于 02-28 18:12 ?1136次閱讀

    谷歌發(fā)布新型大語言模型Gemma 2

    在人工智能領(lǐng)域,大語言模型一直是研究的熱點。近日,全球科技巨頭谷歌宣布,面向全球研究人員和開發(fā)人員,正式發(fā)布了其最新研發(fā)的大語言模型——Gemma 2。這款
    的頭像 發(fā)表于 06-29 09:48 ?433次閱讀

    谷歌Gemma 2大語言模型升級發(fā)布,性能與安全性雙重飛躍

    近日,谷歌面向全球科研界與開發(fā)者群體隆重推出了全新升級的Gemma 2大語言模型,標(biāo)志著人工智能技術(shù)在語言處理領(lǐng)域的又一次重大進(jìn)步。此次發(fā)布的Gemma
    的頭像 發(fā)表于 07-02 10:20 ?490次閱讀
    RM新时代网站-首页