小語言模型(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中文網其他相關文章!