当前位置:   article > 正文

LLM | Gemma的初体验_gemma-7b和gemma-7b-it

gemma-7b和gemma-7b-it

一起来体验一下吧~

技术报告书:jgoogle/gemma-7b-it · Hugging Facegemma-report.pdf (storage.googleapis.com)

代码1  :google-deepmind/gemma: Open weights LLM from Google DeepMind. (github.com)

代码2 :https://github.com/google/gemma_pytorch

代码3 :

技术报告书:jgoogle/gemma-7b-it · Hugging Face

1.论文详解

谷歌介绍的Gemma的主要特点如下。

  • 新车型将提供两种变体:Gemma 2B 和 Gemma 7B。这两种类型分别带有预训练和指令调整的变体。
  • 新的负责任的生成式 AI 工具包提供指导和基本工具,帮助您使用 Gemma 构建更安全的 AI 应用程序。
  • Native Keras 3.0 在 JAX、PyTorch 和 TensorFlow 等领先框架中提供了用于监督微调 (SFT) 的工具链。
  • 它配备了即用型 Colab 和 Kaggle 笔记本电脑,以及 Hugging FaceMaxText 和 NVIDIA NeMo 等通用工具,使 Gemma 易于用户使用。
  • 预先训练和指令调整的 Gemma 模型可在笔记本电脑、工作计算机甚至 Google Cloud 上使用,并且使用 Vertex AI 和 Google Kubernetes Engine (GKE) 轻松安装。
  • Gemma 针对各种 AI 硬件平台进行了优化,确保了行业领先的性能,包括 NVIDIA GPU 和 Google Cloud TPU。
  • 条款和条件允许负责任的商业用途和分发给各种规模的企业。

Gemma 是由 Google 推出的一系列轻量级、先进的开源模型,基于 Google Gemini 模型的研究和技术而构建。它们是一系列text generation,decoder-only的大型语言模型,对英文的支持较好,具有模型权重开源、并提供预训练版本(base模型)和指令微调版本(chat模型)。

本次 Gemma 开源提供了四个大型语言模型,提供了 2B 和 7B 两种参数规模的版本,每种都包含了预训练版本(base模型)和指令微调版本(chat模型)。

官方除了提供 pytorch 版本之外,也提供了GGUF版本,可在各类消费级硬件上运行,无需数据量化处理,并拥有高达 8K tokens 的处理能力,Gemma 7B模型的预训练数据高达6万亿Token,也证明了通过大量的高质量数据训练,可以大力出奇迹,小模型也可以持续提升取得好的效果。


1.1.模型构造

采用transformer的解码器

下图是针对不同任务/数据集的结果对比,取得了一个很好的结果。

微调

  • 使用 QLoRA 对 UltraChat 数据集执行监督微调 (SFT) 的脚本
  • 在 TPU 设备上使用 FSDP 执行 SFT 的脚本
  • 可以在免费套餐 Google Colab 实例上运行的笔记本,用于对英语报价数据集执行 SFT

2.实战 

对于 Gemma 型号的 7B 指令版本。还可以选择 2B 基本模型7B 基本模型和 2B 指导模型的模型卡。

2.0环境设置

  1. pip install -U transformers
  2. pip install packaging
  3. pip install accelerate
  4. pip install -U scikit-learn scipy matplotlib

更多请参考A1 

  1. git clone https://huggingface.co/google/gemma-7b-it/
  2. cd gemma-7b-it

 

2.1.在CPU上运行,这里省略

  1. from transformers import AutoTokenizer, AutoModelForCausalLM
  2. tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
  3. model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-it")
  4. input_text = "Write me a poem about Machine Learning."
  5. input_ids = tokenizer(input_text, return_tensors="pt")
  6. outputs = model.generate(**input_ids)
  7. print(tokenizer.decode(outputs[0]))

2.2.在单个/多个 GPU 上运行模型

本文RAM24G,2张TITAN卡

  1. # pip install accelerate
  2. from transformers import AutoTokenizer, AutoModelForCausalLM
  3. tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
  4. model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-it", device_map="auto")
  5. input_text = "Write me a poem about Machine Learning."
  6. input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
  7. outputs = model.generate(**input_ids)
  8. print(tokenizer.decode(outputs[0]))

运行后

默认 max_length` =20

可能会出现如下情况,

修改输出outputs = model.generate(**input_ids,max_length=64)就好啦~

2.3.模型微调

本文使用代码数据集MBPP进行微调

  1. import torch
  2. from datasets import load_dataset
  3. from peft import LoraConfig, PeftModel, prepare_model_for_kbit_training
  4. from transformers import (
  5. AutoModelForCausalLM,
  6. AutoTokenizer,
  7. BitsAndBytesConfig,
  8. AutoTokenizer,
  9. TrainingArguments,
  10. )
  11. from trl import SFTTrainer
  12. model_name = "google/gemma-7b-it"
  13. #Tokenizer
  14. tokenizer = AutoTokenizer.from_pretrained(model_name, add_eos_token=True, use_fast=True)
  15. tokenizer.pad_token = tokenizer.eos_token
  16. tokenizer.pad_token_id = tokenizer.eos_token_id
  17. tokenizer.padding_side = 'left'
  18. #ds = load_dataset("timdettmers/openassistant-guanaco")
  19. ds = load_dataset("mbpp")
  20. #ds = load_dataset("Muennighoff/mbpp") # 974 rows test only
  21. compute_dtype = getattr(torch, "float16")
  22. bnb_config = BitsAndBytesConfig(
  23. load_in_4bit=True,
  24. bnb_4bit_quant_type="nf4",
  25. bnb_4bit_compute_dtype=compute_dtype,
  26. bnb_4bit_use_double_quant=True,
  27. )
  28. model = AutoModelForCausalLM.from_pretrained(
  29. model_name, quantization_config=bnb_config, device_map={"": 0}
  30. )
  31. model = prepare_model_for_kbit_training(model)
  32. #Configure the pad token in the model
  33. model.config.pad_token_id = tokenizer.pad_token_id
  34. model.config.use_cache = False # Gradient checkpointing is used by default but not compatible with caching
  35. peft_config = LoraConfig(
  36. lora_alpha=16,
  37. lora_dropout=0.05,
  38. r=16,
  39. bias="none",
  40. task_type="CAUSAL_LM",
  41. target_modules= ['k_proj', 'q_proj', 'v_proj', 'o_proj', "gate_proj", "down_proj", "up_proj"]
  42. )
  43. training_arguments = TrainingArguments(
  44. output_dir="./results_qlora",
  45. evaluation_strategy="steps",
  46. do_eval=True,
  47. optim="paged_adamw_8bit",
  48. per_device_train_batch_size=2,
  49. per_device_eval_batch_size=2,
  50. log_level="debug",
  51. save_steps=50,
  52. logging_steps=50,
  53. learning_rate=2e-5,
  54. eval_steps=50,
  55. max_steps=300,
  56. warmup_steps=30,
  57. lr_scheduler_type="linear",
  58. )
  59. trainer = SFTTrainer(
  60. model=model,
  61. train_dataset=ds['train'],
  62. eval_dataset=ds['test'],
  63. peft_config=peft_config,
  64. dataset_text_field="text",
  65. max_seq_length=512,
  66. tokenizer=tokenizer,
  67. args=training_arguments,
  68. )
  69. trainer.train()

仅仅测试训练,所以设置4 个,但是训练相对来说蛮快的,4个epoch30分钟左右。

 

过程中遇到的问题及解决【PS】

【PS1】 Traceback (most recent call last):
  File "/root/anaconda3/envs/sam/lib/python3.8/site-packages/huggingface_hub/utils/_errors.py", line 304, in hf_raise_for_status
    response.raise_for_status()
  File "/root/anaconda3/envs/sam/lib/python3.8/site-packages/requests/models.py", line 1021, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://huggingface.co/google/gemma-7b-it/resolve/main/config.json

  1. from huggingface_hub import login
  2. login()

在自己的huggingface账号上创建一个token

点击自己账号->Access Tokens->New token -> 输入名称->选择可写入->Generate a token 

生成token后,复制到服务器里~

登录

【PS2】ImportError: cannot import name 'ClusterInfo' from 'triton._C.libtriton.triton' (unknown location)

 尝试

  1. # 怀疑是triton版本问题
  2. pip install -U --index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/ triton-nightly
  3. #或者
  4. pip install Triton==2.1.0
  5. #之前的版本是2.0.0
  6. 输入
  7. python -m bitsandbytes

 

 然后就可以啦~

扩展

A1

  1. accelerate==0.27.2
  2. bitsandbytes==0.42.0
  3. huggingface-hub==0.21.3
  4. peft==0.9.0

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/361418
推荐阅读
相关标签
  

闽ICP备14008679号