小语言模型(SLM)对AI产生了重大影响。它们提供出色的性能,同时有效且具有成本效益。一个杰出的例子是Llama 3.2 3b。它在检索型生成(RAG)任务中表现出色,降低计算成本和内存使用情况,同时保持高精度。本文探讨了如何微调Llama 3.2 3B模型。了解较小的模型如何在抹布任务中表现出色,并突破紧凑的AI解决方案可以实现的边界。
由Meta开发的Llama 3.2 3B模型是一个多语言SLM,具有30亿个参数,专为问题回答,摘要和对话系统等任务而设计。它的表现优于行业基准的许多开源模型,并支持各种语言。 Llama 3.2有各种尺寸可用,提供有效的计算性能,并包括在移动和边缘环境中更快,存储效率部署的量化版本。
另请阅读:前13个小语言模型(SLM)
微调对于将SLM或LLMS调整为特定领域或任务(例如医疗,法律或抹布应用程序)至关重要。虽然预培训使语言模型能够生成跨不同主题的文本,但通过微调对特定于域或特定任务的数据进行微调重新培训,以提高相关性和性能。为了解决微调所有参数的高计算成本,诸如参数有效微调(PEFT)之类的技术专注于训练模型参数的一个子集,在维持性能的同时优化资源使用情况。
一种这样的PEFT方法是低级适应(LORA)。
在洛拉(Lora),将SLM或LLM中的重量基质分解为两个低级矩阵的产物。
W = WA * WB
如果W具有M行和n列,则可以将其分解为M行和R列中的WA,以及带有R行和N列的WB。这里的r远小于m或n。因此,我们只能训练r*(mn)值,而不是训练m*n值。 r称为等级,这是我们可以选择的超参数。
def lora_linear(x):<br> h = x @ w#常规线性<br> h =比例 *(x @ w_a @ w_b)#低率更新<br> 返回h
结帐:大型语言模型与洛拉和Qlora的高效微调
让我们在Llama 3.2 3B型号上实现Lora。
安装上述懒惰版本还将安装兼容的Pytorch,变形金刚和NVIDIA GPU库。我们可以使用Google Colab访问GPU。
让我们现在看一下实施!
来自Unsploth Import fastlanguageModel,is_bfloat16_supported,train_on_responses_only 从数据集import load_dataset,数据集 来自TRL导入SFTTrainer,apply_chat_template 从变形金刚导入培训量,datacollatorforseq2seq,textstreamer 导入火炬
max_seq_length = 2048 dtype =无#无用于自动检测。 load_in_4bit = true#使用4bit量化来减少内存使用量。可以是错误的。 型号,tokenizer = fastlanguagemodel.from_pretaining( model_name =“ unsploth/llama-3.2-3b-instruct”, max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, #token =“ hf _...”,#如果使用诸如meta-llama/llama-3.2-11b之类的封闭模型 )
对于由Unsploth支持的其他模型,我们可以参考此文档。
model = fastlanguagemodel.get_peft_model( 模型, r = 16, target_modules = [“ q_proj”,“ k_proj”,“ v_proj”,“ o_proj”, “ gate_proj”,“ up_proj”,“ down_proj”,], lora_alpha = 16, lora_dropout = 0, bias =“无”, use_gradient_checkpointing =“ unsploth”, Random_State = 42, use_rslora = false, loftq_config = none, )
我们将使用抹布数据来列出。从HuggingFace下载数据。
dataset = load_dataset(“ neural-bridge/rag-dataset-1200”,split =“ train”)
该数据集的三个键如下:
数据集({功能:['context','问题','答案'],num_rows:960})
数据需要根据语言模型为特定格式。在此处阅读更多详细信息。
因此,让我们将数据转换为所需的格式:
def convert_dataset_to_dict(数据集): dataset_dict = { “迅速的”: [], “完成”:[] } 对于数据集中的行: user_content = f“ context:{row ['context']} \ n question:{row ['Question']}” Assistion_Content =行['答案'] dataset_dict [“提示”]。附录([[ {“角色”:“用户”,“ content”:user_content} ))) dataset_dict [“完成”]。附录([[ {“角色”:“助手”,“ content”:Assistion_Content} ))) 返回dataset_dict converted_data = convert_dataset_to_dict(数据集) dataset = dataset.from_dict(converted_data) dataset = dataset.map(apply_chat_template,fn_kwargs = {“ tokenizer”:tokenizer})
数据集消息将如下:
我们可以初始化培训师以填充SLM:
培训师= sfttrainer( 模型=模型, tokenizer = tokenizer, train_dataset =数据集, max_seq_length = max_seq_length, data_collator = datacollatorforseq2seq(tokenizer = tokenizer), dataset_num_proc = 2, 包装= false,#可以使短序列更快地训练5倍。 args = trainingarguments( per_device_train_batch_size = 2, gradient_accumulation_steps = 4, 热身_Steps = 5, #num_train_epochs = 1,#设置此设置为1个完整的训练运行。 max_steps = 6,#使用少量进行测试 Learning_rate = 2e-4, fp16 = not is_bfloat16_supported(), bf16 = is_bfloat16_supported(), logging_steps = 1, optim =“ adamw_8bit”, weight_decay = 0.01, lr_scheduler_type =“线性”, 种子= 3407, output_dir =“输出”, report_to =“无”,#将其用于wandb等 ), )
某些参数的描述:
仅通过指定响应模板才能对响应进行模型训练:
培训师= train_on_responses_only( 教练, consition_part =“ user \ n \ n”, response_part =“ 助手 \ n \ n”, )
Trainer_stats = Trainer.Train()
这是培训统计数据:
让我们使用模型进行推理:
fastlanguagemodel.for_inference(模型) 消息= [ {“角色”:“用户”,“ content”:“上下文:白天通常清晰的天空。问题:水是什么颜色?”}, 这是给出的 inputs = tokenizer.apply_chat_template( 消息, tokenize = true, add_generation_prompt = true, return_tensors =“ pt”, ).to(“ cuda”) text_streamer = textstreamer(tokenizer,skip_prompt = true) _ = model.generate(input_ids = inputs,artermer = text_streamer,max_new_tokens = 128, use_cache = true,温度= 1.5,min_p = 0.1)
为了节省训练的训练,包括洛拉重量,请使用以下代码
model.save_pretratained_merged(“模型”,Tokenizer,save_method =“ merged_16bit”)
结帐:微调大语言模型指南
用于抹布任务的微调骆驼3.2 3b展示了较小模型在降低计算成本下提供高性能的效率。诸如Lora之类的技术在保持准确性的同时优化了资源使用。这种方法赋予了特定于领域的应用程序,使高级AI更容易访问,可扩展性和具有成本效益,并在检索效果的一代中推动了创新,并使AI民主化了现实世界中的挑战。
另请阅读:开始使用Meta Llama 3.2
A. RAG将检索系统与生成模型相结合,以通过将其扎根于外部知识来增强回答,从而使其非常适合诸如问答答案和摘要之类的任务。
Q2。为什么选择Llama 3.2 3B进行微调?A. Llama 3.2 3b提供了性能,效率和可扩展性的平衡,使其适合于抹布任务,同时减少计算和内存需求。
Q3。洛拉是什么,如何改善微调?答:低秩适应(LORA)通过仅训练低级矩阵而不是所有模型参数来最大程度地减少资源使用情况,从而在约束硬件上有效地进行微调。
Q4。在本文中,哪些数据集用于微调?答:拥抱面提供包含上下文,问题和答案的抹布数据集,以微调Llama 3.2 3B模型,以提供更好的任务性能。
Q5。可以将微调模型部署在边缘设备上吗?答:是的,Llama 3.2 3b,尤其是以其量化形式的形式,已针对边缘和移动环境的内存有效部署进行了优化。
以上是微调美洲驼3.2 3b用于抹布 - 分析vidhya的详细内容。更多信息请关注PHP中文网其他相关文章!