首页 > 编程语言 >Python中Keras微调Google Gemma:定制化指令增强大型语言模型LLM

Python中Keras微调Google Gemma:定制化指令增强大型语言模型LLM

时间:2024-03-26 22:33:40浏览次数:43  
标签:Google Keras Python 模型 分词器 model Gemma 加载

全文链接:https://tecdat.cn/?p=35476

原文出处:拓端数据部落公众号

像谷歌、Meta和Twitter这样的大公司正大力推动其大型语言模型(LLM)的开源。最近,谷歌DeepMind团队推出了Gemma——一个由与创建谷歌Gemini模型相同的研究和技术构建的轻量级、开源LLM系列。

本文,我们将帮助客户了解Gemma模型,如何使用云GPU和TPU访问它们,以及如何在角色扮演数据集上训练最新的Gemma 7b-it模型。

了解谷歌的Gemma

Gemma(拉丁语中的“宝石”)是谷歌不同团队开发的一系列文本到文本、仅解码器的开源模型,尤其是谷歌DeepMind。它受到Gemini模型的启发,设计轻量级且兼容所有主流框架。

谷歌已经发布了两种Gemma模型权重,即Gemma 2B和Gemma 7B,它们提供预训练和指令调整后的变体,如Gemma 2B-it和Gemma 7B-it。

众所周知,Gemma与Gemini具有相似的技术组件,在与其他开源模型(如Meta的Llama-2模型)相比时,其尺寸达到了同类最佳性能。它在所有LLM基准测试中均优于Llama-2。

如何访问谷歌的Gemma模型

在TPU上运行Gemma推理

您可以前往Keras/Gemma,向下滚动,选择“gemma_instruct_2b_en”模型变体,然后点击“新建笔记本”按钮。这将启动一个包含Gemma模型的输入目录的云笔记本。

在右侧面板中向下滚动,选择“TPU VM v3-8”作为加速器。

确保您已经安装并更新了所有必要的Python库。

   
bash复制代码
	!pip install -q tensorflow-cpu  

	!pip install -q -U keras-nlp tensorflow-hub  

	!pip install -q -U keras>=3  

	!pip install -q -U tensorflow-text

要检查可用的TPU数量,您可以使用jax库和device函数来显示TPU设备。我们有权访问8个TPU。

image.png

我们现在将通过将jax设置为Keras后端来启用Keras 3的TPU。

完成初始设置后,访问Gemma模型并生成响应就变得相当简单。我们将使用keras_nlp库从Kaggle加载模型,然后将提示传递给generate函数。

   


	  

	gemma_lm.generate(prompt, max_length=100)

在GPU上运行Gemma推理

现在,我们将使用GPU和转换器框架(而不是Keras)来生成响应。

在新的笔记本中,首先更改标题,然后将加速器更改为GPT T4 x2。

安装并更新所有必要的Python包。

由于Kaggle GPU的VRAM有限,我们无法加载完整的Gemma 7b-it模型。为了解决这个问题,我们将使用BitsAndBytes库以NF4类型配置进行4位量化来加载模型。同时,加载分词器。

   

	  

	model = AutoModelForCausalLM.from_pretrained(  

	    modelName,  

	    device_map="auto",  

	    quantization_config=bnbConfig  

创建一个简单的提示模板,包括系统、用户和AI。我们要求模型生成Python代码来显示星号模式。

在新的笔记本中,我们首先修改标题,然后将加速器更改为GPT T4 x2。接下来,我们将按照步骤安装并更新所需的Python包,加载数据集、模型和分词器,并执行监督微调(SFT)和推理。

   


	# 导入所需的库  

	import torch  



	  



	  

	# 加载模型和分词器  

	config = AutoConfig.from_pretrained(modelName)  

	tokenizer = AutoTokenizer.from_pretrained(modelName)  

	  

	# 初始化模型  

	model = AutoModelForCausalLM.from_pretrained(modelName, config=config)  

	  

	# 由于Kaggle GPU的VRAM有限,我们将使用BitsAndBytes进行4位量化  

	bnbConfig = AutoConfig.from_pretrained(modelName)  

	
        
	  

	# 加载量化后的模型  

	quantized_model = AutoModelForCausalLM.from_pretrained(modelName, config=bnbConfig)  

	  

	# 定义训练参数  

	training_args = TrainingArguments(  

	    output_dir='./results',          # 输出目录  

	    num_train_epochs=1,              # 训练周期数  


	# 初始化训练器  

	trainer = Trainer(  

	    model=quantized_model,                         # 模型  

	    args=training_args,                            # 训练参数  


	# 开始训练  

	trainer.train()  

	  

	# 保存微调后的模型  

	trainer.save_model("./finetuned_gemma_model")  

另外,微调大型模型可能需要大量的时间和计算资源。在Kaggle上,由于资源限制,您可能无法完成整个微调过程。如果您需要更强大的计算能力来微调大型模型,建议考虑使用云服务或本地高性能计算资源。

最后,请确保您已经正确地安装了所有必要的Python包,并且已经正确配置了Kaggle笔记本以使用GPU加速器。

为基准模型、数据集以及微调后的模型定义名称,我们稍后会将这些内容上传到Hugging Face Hub。

这些变量将在各个阶段中使用,例如加载数据集和模型、分词、训练和保存模型。

登录到Hugging Face CLI

我们将从Kaggle的秘钥(环境变量)中加载Hugging Face的API密钥。

使用API密钥登录到Hugging Face CLI。这将允许我们访问模型并将其保存到Hugging Face Hub。

初始化W&B工作区

使用W&B API密钥初始化weights and biases(W&B)工作区。我们将使用这个工作区来跟踪模型训练。

   


	# 监控LLM  

	wandb.login(key = secret_wandb)  

加载数据集

   
复制代码
	# 加载数据集  



	dataset["text"][100]

我们的数据集由用户与助理之间基于名人风格的连续对话组成,这是一种角色扮演。

加载模型和分词器

为了避免内存问题,我们将使用BitsAndBytesConfig以4位精度加载我们的模型。这可以直接从Kaggle加载模型。

   
复制代码
	# 加载基准模型(Gemma 7B-it)  

	bnbConfig = BitsAndBytesConfig(  

	    load_in_4bit = True,  

加载分词器,并配置填充标记以修复fp16的问题。

   
复制代码
	# 加载分词器  

	tokenizer = AutoTokenizer.from_pretrained(base_model)  

	
        

添加适配层

通过在我们的模型中添加适配层,我们可以更高效地对其进行微调。这样,我们无需训练整个模型,而只需更新适配层的参数,这将加速训练过程。

我们的目标模块将是'o_proj'、'q_proj'、'up_proj'、'v_proj'、'k_proj'、'down_proj'和'gate_proj'。

   
model = prepare_model_for_kbit_training(model)
peft_config = LoraConfig(
    lora_alpha=16,
    lora_dropout=0.1,

训练模型

为了开始训练,我们需要指定超参数。这些参数是基础性的,可以通过调整它们来优化训练过程并提高模型的性能。

   
	training_arguments = TrainingArguments(  

	    output_dir="./gemma-7b-v2-role-play",  

	    num_train_epochs=1,  

	
        

为了设置监督微调(SFT)训练器,我们需要向它提供模型、数据集、Lora配置、分词器和训练参数作为参数。

   
	trainer = SFTTrainer(  

	    model=model,  

	    train_dataset=dataset,  

	    peft_config=peft_config,  

	 

接下来,我们将使用.train函数运行训练过程。微调过程大约花费了1小时1分钟的时间。训练损失逐渐减小,并且你可以通过增加epoch的数量来进一步减少这个损失。

   
python复制代码
	trainer.train()

完成Weights & Biases(W&B)会话,并为推断配置模型。

   
wandb.finish()
model.config.use_cache = True

w&b run history

我们在两种类型的GPU加速器上训练了模型。看起来P100的速度是T4 2X的两倍。

image.png

保存模型

接下来,我们将把模型适配器保存在本地,然后上传到Hugging Face hub。push_to_hub命令将创建仓库并将适配器配置和适配器权重推送到hub。

模型推断

为了使用我们微调后的模型生成响应,我们需要遵循几个步骤。

首先,我们将按照角色扮演数据集格式创建一个提示。然后,我们将提示传递给分词器,再传递给模型以生成预测。

为了将预测的输出转换为可读的文本,我们将使用分词器对其进行解码。

   


text = tokenizer.decode(outputs[0], skip_special_tokens=True)

print(text)

它还会提出相关的后续问题。

用一个新的角色再试一次:Michel Jordan。

   
python复制代码
	prompt = '''<|system|>Michael Jordan an NBA legend known for his competitive drive six championship wins with the Chicago Bulls.  


	text = tokenizer.decode(outputs[0], skip_special_tokens=True)  

	  

	print(text)

使用角色扮演适配器的Gemma 7B推断

要生成响应,我们不能简单地加载保存的适配器。我们需要将微调后的适配器与基础模型(Gemma 7b-it)合并。

  1. 安装所有必要的Python库。

  2. 从Kaggle secrets加载API密钥并登录到Hugging Face CLI。

   
!huggingface-cli login --token $secret_hf
  1. 提供基础模型和适配器的位置。
   



	new_model = "kingabzpro/gemma-7b-it-v2-role-play"
  1. 加载基础模型。
   



	base_model_reload = AutoModelForCausalLM.from_pretrained(  

	    base_model,  

	
        
  1. 加载适配器并将其与基础模型合并。

  1. 加载分词器。
   

	tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True
        
  1. 将提示通过分词器传递给模型进行响应生成。
   


	text = tokenizer.decode(outputs[0], skip_special_tokens=True)  

	  

	print(text)

解释了“自我”的含义。


QQ截图20240326140651.png 最受欢迎的见解

1.在python中使用lstm和pytorch进行时间序列预测

2.python中利用长短期记忆模型lstm进行时间序列预测分析

3.Python用RNN循环神经网络:LSTM长期记忆、GRU门循环单元、回归和ARIMA对COVID-19新冠疫情新增人数时间序列

4.Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准确性

5.r语言copulas和金融时间序列案例

6.R 语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

7.Matlab创建向量自回归(VAR)模型分析消费者价格指数 (CPI) 和失业率时间序列

8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

9.R语言结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

标签:Google,Keras,Python,模型,分词器,model,Gemma,加载
From: https://www.cnblogs.com/tecdat/p/18097793

相关文章

  • 【python】服务端和客户端 RESTful 接口上传 E
    哈喽,大家好,我是木头左,物联网搬砖工一名,致力于为大家淘出更多好用的AI工具!服务端代码1.安装Flask和Flask-RESTful需要安装Flask和Flask-RESTful这两个库。Flask是一个轻量级的Web框架,而Flask-RESTful则是一个为Flask添加了RESTfulAPI支持的扩展。pipinstall......
  • 使用python读取Excel文件
    在VBA里使用SAPGUIScripts执行批量操作很方便,如果不熟悉VBA,写起VBA代码感觉挺不方便的。下面是Python代码用来读取Excel文件里的内容,代码挺简单的。importopenpyxl#指定Excel文件路径excel_file='D:\data\11.xlsx'#打开Excel文件workbook=openpyxl.load_workbo......
  • 「Go开源包」snappy:google开源的快速、无损压缩包
    大家好,我是渔夫子。今天给大家推荐的是一个google开源的快速、无损的压缩包:snappy。snappy算法是google开源的。该包是google使用go语言来实现的。项目地址如下:项目地址:https://github.com/golang/snappy星标:1.4k使用者:97.7k简介该包的目标并不是最大化的压缩比例,也不是和......
  • python理论知识及python解释器和pycharm安装
    【一】编程和编程语言是什么【1】什么是编程编程就是将人类语言转换为计算机能够识别的语言【2】什么是编程语言编程语言就是人与计算机之间的语言【3】为什么要出现编程语言?最根本的原因就是计算机无法识别人类语言【4】为什么要编程?编程就是为了让计算机能够理解......
  • python安装过程
    【一】python安装过程【1】安装路径https://www.python.org/[2]选择win系统【3】搜索指定版本win系统快捷键【ctrl+f】macos系统快捷键【command+f】(1)打开Python解释器官网(2)点击Downloads选择macOS(3)下载安装程序【5】安装解释器(win)(1)双击安装好的程序......
  • 计算机基础以及python,pycharm安装
    计算机基础以及python|pycharm安装1编程和编程语言了解1.1什么是编程编程就是将人类语言转换成计算机识别的语言。1.2什么是编程语言人和人之间都会进行交流,人和人之间交流的媒介就是语言,所以编程语言就是人和计算机之间交流的语言。1.3为什么要出现编程语言最根本的原......
  • 【蓝桥杯省赛真题33】python单词排序 中小学青少年组蓝桥杯比赛 算法思维python编程省
     目录python单词排序一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、 推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python单词排序第十三届蓝桥杯青少年组python比赛省赛真题一、题目要求(注:input......
  • 趣味算法,猴子算法。python如何实现猴子算法
    给一只猴子一台打印机,虽然这只猴子根本不识字,但会乱按,经过一段时间后,在它乱按出来的单词里总能找到一些至少看起来是有意义的部分,比如一两个简短的单词,由此可以推出:只要给它足够长的时间,猴子甚至能完整地写出一本莎士比亚全集。这是不是听起来很有意思趣味算法,猴子算法。......
  • 05-python函数进阶和文件
    函数函数的多返回值变量间逗号隔开,可以多种类型defhello():return1,True,"hello"x,y,z=hello()函数的传参方式位置参数,根据位置传参defcan1(x,y,z):print(x,y,z)can1(2,4,8)关键字参数,根据k=v传参,可以和位置参数混用,位置参数需要在前defcan2......
  • 如何用Python绘制3D图形
        python绘制3D图形,包括了3D坐标系、曲面图、直方图、等高线图、热力图、散点图、文字标签七种样式,具体如下:一、绘制3D坐标系具体代码如下:importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#创建图形和坐标轴fig=plt.figure()ax=......