首頁 >科技週邊 >人工智慧 >微調美洲駝3.2 3b用於抹布 - 分析vidhya

微調美洲駝3.2 3b用於抹布 - 分析vidhya

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-03-13 09:46:23328瀏覽

小語言模型(SLM)對AI產生了重大影響。它們提供出色的性能,同時有效且具有成本效益。一個傑出的例子是Llama 3.2 3b。它在檢索型生成(RAG)任務中表現出色,降低計算成本和內存使用情況,同時保持高精度。本文探討瞭如何微調Llama 3.2 3B模型。了解較小的模型如何在抹布任務中表現出色,並突破緊湊的AI解決方案可以實現的邊界。

目錄

  • 什麼是Llama 3.2 3b?
  • Finetuning Llama 3.2 3b
  • 洛拉
  • 需要庫
  • 導入庫
  • 初始化模型和標記器
  • 初始化PEFT的模型
  • 數據處理
  • 設置教練參數
  • 微調模型
  • 測試並保存模型
  • 結論
  • 常見問題

什麼是Llama 3.2 3b?

由Meta開發的Llama 3.2 3B模型是一個多語言SLM,具有30億個參數,專為問題回答,摘要和對話系統等任務而設計。它的表現優於行業基準的許多開源模型,並支持各種語言。 Llama 3.2有各種尺寸可用,提供有效的計算性能,並包括在移動和邊緣環境中更快,存儲效率部署的量化版本。

微調美洲駝3.2 3b用於抹布 - 分析vidhya

另請閱讀:前13個小語言模型(SLM)

Finetuning Llama 3.2 3b

微調對於將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。

需要庫

  • 不塞 - 2024.12.9
  • 數據集 - 3.1.0

安裝上述懶惰版本還將安裝兼容的Pytorch,變形金剛和NVIDIA GPU庫。我們可以使用Google Colab訪問GPU。

讓我們現在看一下實施!

導入庫

來自Unsploth Import fastlanguageModel,is_bfloat16_supported,train_on_responses_only

從數據集import load_dataset,數據集

來自TRL導入SFTTrainer,apply_chat_template

從變形金剛導入培訓量,datacollat​​orforseq2seq,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支持的其他模型,我們可以參考此文檔。

初始化PEFT的模型

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,
)

每個參數的描述

  • R :洛拉等級;更高的值提高了精度,但使用更多的內存(建議:8-128)。
  • target_modules :微調模塊;包括全部以獲得更好的結果
  • lora_alpha :縮放係數;通常等於或兩倍的等級r。
  • lora_dropout :輟學率;設置為0進行優化和更快的培訓。
  • 偏見:偏見類型; “無”用於速度和最小擬合的優化。
  • USE_GRADIENT_CHECKPOINT :減少內存的內存培訓;強烈建議“不塞”。
  • Random_State :確定性運行的種子,確保可重複的結果(例如,42)。
  • use_rslora :自動選擇alpha選擇;對穩定的洛拉有用。
  • LoftQ_Config :用頂部R單數向量初始化Lora,以提高準確性,儘管記憶力很強。

數據處理

我們將使用抹布數據來列出。從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})

數據集消息將如下:

微調美洲駝3.2 3b用於抹布 - 分析vidhya

設置教練參數

我們可以初始化培訓師以填充SLM:

培訓師= sfttrainer(
	模型=模型,
	tokenizer = tokenizer,
	train_dataset =數據集,
	max_seq_length = max_seq_length,
	data_collat​​or = datacollat​​orforseq2seq(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等
	),
)

某些參數的描述:

  • per_device_train_batch_size:每個設備的批量尺寸;增加以利用更多的GPU內存,但請注意填充效率低下(建議:2)。
  • gradient_accumulation_steps:模擬較大的批量大小而無需額外的內存使用;增加更順暢的損耗曲線(建議:4)。
  • MAX_STEPS:總培訓步驟;設置為更快的運行速度(例如60),或使用`num_train_epochs`用於完整數據集通過(例如,1-3)。
  • Learning_rate:控制訓練速度和融合;較低的速率(例如2E-4)提高了準確性,但訓練緩慢。

僅通過指定響應模板才能對響應進行模型訓練:

培訓師= train_on_responses_only(
	教練,
	consition_part =“  user  \ n \ n”,
	response_part =“ 助手 \ n \ n”,
)

微調模型

Trainer_stats = Trainer.Train()

這是培訓統計數據:

微調美洲駝3.2 3b用於抹布 - 分析vidhya

測試並保存模型

讓我們使用模型進行推理:

 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

常見問題

Q1。什麼是抹布?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn