ホームページ >テクノロジー周辺機器 >AI >ラグ用の微調整llama 3.2 3b -Analytics Vidhya

ラグ用の微調整llama 3.2 3b -Analytics Vidhya

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-03-13 09:46:23335ブラウズ

小言語モデル(SLM)がAIに大きな影響を与えています。彼らは効率的で費用対効果が高い一方で、強力なパフォーマンスを提供します。傑出した例の1つは、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モデルは、質問応答、要約、ダイアログシステムなどのタスク向けに設計された30億パラメーターを備えた多言語SLMです。業界のベンチマーク上の多くのオープンソースモデルよりも優れており、多様な言語をサポートしています。さまざまなサイズで利用可能なLlama 3.2は、効率的な計算パフォーマンスを提供し、モバイルおよびエッジ環境でのより速く、メモリ効率の高い展開を実現するための量子化されたバージョンが含まれています。

ラグ用の微調整llama 3.2 3b -Analytics Vidhya

また読む:トップ13の小言語モデル(SLM)

Finetuning llama 3.2 3b

微調整は、SLMまたはLLMを医療、法律、またはRAGアプリケーションなどの特定のドメインまたはタスクに適応させるために不可欠です。トレーニング前に言語モデルが多様なトピック全体でテキストを生成できるようにしますが、微調整はドメイン固有またはタスク固有のデータのモデルを再トレーニングして、関連性とパフォーマンスを改善します。すべてのパラメーターの微調整の高い計算コストに対処するために、パラメーターのような技術効率的な微調整(PEFT)などの手法は、モデルのパラメーターのサブセットのみをトレーニングし、パフォーマンスを維持しながらリソースの使用を最適化することに焦点を当てています。

ロラ

そのようなPEFTメソッドの1つは、低ランク適応(LORA)です。

LORAでは、SLMまたはLLMの重量マトリックスが2つの低ランクマトリックスの積に分解されます。

 w = wa * wb

wにm rowsとn列がある場合、m行とr列でWAに分解し、rowsとn列のあるwbに分解できます。ここでは、rはmまたはnよりはるかに少ないです。したがって、m*nの値をトレーニングするのではなく、r*(mn)値のみをトレーニングできます。 Rは、選択できるハイパーパラメーターであるランクと呼ばれます。

 def lora_linear(x):<br> h = x @ w#レギュラーリニア<br> h = scale *(x @ w_a @ w_b)#低ランクアップデート<br> hを返します

チェックアウト:ロラとQloraを使用した大規模な言語モデルのパラメーター効率の高い微調整

Llama 3.2 3bモデルにLoraを実装しましょう。

ライブラリが必要です

  • Unsloth - 2024.12.9
  • データセット - 3.1.0

上記のSLOTHバージョンをインストールすると、互換性のあるPytorch、Transformers、およびNvidia GPUライブラリもインストールされます。 Google Colabを使用してGPUにアクセスできます。

今すぐ実装を見てみましょう!

ライブラリをインポートします

Unsloth Import FastLanguageModelから、IS_BFLOAT16_SUPPORTED、TRAIN_ON_RESPONSES_ONLYから

データセットからload_dataset、データセットをインポートします

TRLインポートSFTTrainerから、Apply_Chat_Templateから

Transformers Import TrainingArguments、DataCollat​​orForSeq2Seq、TextStreamerから

トーチをインポートします

モデルとトークンザーを初期化します

max_seq_length = 2048 
dtype = none#none auto-retectionの場合。
load_in_4bit = true#4bit量子化を使用して、メモリの使用量を削減します。偽である可能性があります。

モデル、tokenizer = fastlanguagemodel.from_pretrained(
	model_name = "unsloth/llama-3.2-3b-instruct"、
	max_seq_length = max_seq_length、
	dtype = dtype、
	load_in_4bit = load_in_4bit、
	#token = "hf _..."、#メタラマ/llama-3.2-11bなどのゲートモデルを使用している場合は使用します
))

Unslothによってサポートされている他のモデルについては、このドキュメントを参照できます。

PEFTのモデルを初期化します

モデル= 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 = "none"、
	use_gradient_checkpointing = "unsloth"、
	random_state = 42、
	use_rslora = false、 
	loftq_config = none、
))

各パラメーターの説明

  • R :ロラのランク。値が高いほど精度が向上しますが、より多くのメモリを使用します(提案:8–128)。
  • Target_Modules :微調整するモジュール。より良い結果を得るためにすべてを含めてください
  • lora_alpha :スケーリングファクター。通常、ランクrに等しく、または2倍になります。
  • lora_dropout :ドロップアウト率。最適化された高速トレーニングのために0に設定します。
  • バイアス:バイアスタイプ。 「なし」は、速度と最小限の過剰適合のために最適化されています。
  • use_gradient_checkpointing :長いコンテキストトレーニングのメモリを削減します。 「Unsloth」を強くお勧めします。
  • RANDAM_STATE :決定論的な実行のシード、再現性のある結果が確保されます(例:42)。
  • use_rslora :アルファ選択を自動化します。ランク安定化されたロラに役立ちます。
  • loftq_config :メモリが集中しているものの、より良い精度を得るために、トップr singularベクターでLORAを初期化します。

データ処理

RAGデータを使用してFinetuneにします。 Huggingfaceからデータをダウンロードします。

 dataset = load_dataset( "Neural-Bridge/Rag-Dataset-1200"、split = "Train"))

データセットには次のように3つのキーがあります。

データセット({feature:['context'、 'question'、 'answer']、num_rows:960})

データは、言語モデルに応じて特定の形式である必要があります。詳細については、こちらをご覧ください。

それでは、データを必要な形式に変換しましょう。

 def convert_dataset_to_dict(dataset):
    dataset_dict = {
        "プロンプト": []、
        "完了": []
    }

    データセットの行の場合:
        user_content = f "context:{row ['context']} \ nquestion:{row ['question']}"
        Assistant_content = row ['answer']

        dataset_dict ["prompt"]。
            {「役割」:「user "、" content ":user_content}
        ]))
        dataset_dict ["complete"]。
            {「役割」:「アシスタント」、「コンテンツ」:Assistant_Content}
        ]))
    dataset_dictを返します
    
    
converted_data = convert_dataset_to_dict(dataset)
dataset = dataset.from_dict(converted_data)
dataset = dataset.map(apply_chat_template、fn_kwargs = {"tokenizer":tokenizer})

データセットメッセージは次のとおりです。

ラグ用の微調整llama 3.2 3b -Analytics Vidhya

トレーナーパラメーターの設定

SLMを微調整するためにトレーナーを初期化できます。

トレーナー= sfttrainer(
	モデル=モデル、
	トークンザー=トークネザー、
	train_dataset = 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、
    	warmup_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、
    	optime = "adamw_8bit"、
    	weight_decay = 0.01、
    	lr_scheduler_type = "linear"
    	シード= 3407、
    	output_dir = "outputs"、
    	report_to = "none"、#これをwandbなどに使用します
	)、、
))

いくつかのパラメーターの説明:

  • per_device_train_batch_size:デバイスごとのバッチサイズ。より多くのGPUメモリを利用するために増加しますが、パディングの非効率性に注意してください(提案:2)。
  • Gradient_Accumulation_Steps:追加のメモリ使用なしで大きなバッチサイズをシミュレートします。より滑らかな損失曲線の増加(提案:4)。
  • MAX_STEPS:総トレーニングステップ。より速い実行(例えば、60)に設定するか、完全なデータセットパス(例えば、1〜3)に `num_train_epochs`を使用します。
  • Learning_rate:トレーニング速度と収束を制御します。より低いレート(例、2E-4)は精度を改善しますが、トレーニングが遅くなります。

応答テンプレートを指定することによってのみ、応答のモデルトレーニングを作成します。

トレーナー= train_on_responses_only(
	トレーナー、
	instruction_part = " user  \ n \ n"、
	Response_Part = " Assistant  \ n \ n"、
))

モデルの微調整

trainer_stats = trainer.train()

これがトレーニングの統計です:

ラグ用の微調整llama 3.2 3b -Analytics Vidhya

モデルをテストして保存します

推論にモデルを使用しましょう。

 fastlanguageModel.for_inference(モデル)

メッセージ= [
	{「役割」:「ユーザー」、「コンテンツ」:「コンテキスト:空は日中は一般的に透明です。質問:水は何色ですか?}、
]
入力= 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、streamer = text_streamer、max_new_tokens = 128、
               	use_cache = true、温度= 1.5、min_p = 0.1)

LORAウェイトを含むトレーニングを受けたものを保存するには、以下のコードを使用します

model.save_pretrained_merged( "model"、tokenizer、save_method = "merged_16bit")

チェックアウト:大規模な言語モデルを微調整するガイド

結論

ラグタスク用の微調整llama 3.2 3bは、計算コストを削減して高性能を提供する小さなモデルの効率を示しています。 LORAなどの手法は、精度を維持しながらリソースの使用を最適化します。このアプローチは、ドメイン固有のアプリケーションを強化し、高度なAIをよりアクセスしやすく、スケーラブルで、費用対効果の高い、検索された生成における革新を促進し、現実世界の課題に対するAIを民主化するようにします。

また読む:メタラマ3.2を始めましょう

よくある質問

Q1。ラグとは何ですか?

A. RAGは、検索システムと生成モデルを組み合わせて、外部の知識に接地することで応答を強化し、質問の回答や要約などのタスクに理想的にします。

Q2。なぜ微調整するためにllama 3.2 3bを選ぶのですか?

A. llama 3.2 3bは、パフォーマンス、効率、およびスケーラビリティのバランスを提供するため、計算およびメモリの要件を削減しながら、ラグタスクに適しています。

Q3。ロラとは何ですか、そしてそれはどのように微調整を改善しますか?

A.低ランク適応(LORA)は、すべてのモデルパラメーターではなく低ランクマトリックスのみをトレーニングすることにより、リソースの使用を最小限に抑え、制約付きハードウェアで効率的な微調整を可能にします。

Q4。この記事では、どのデータセットが微調整されていますか?

A.ハギングフェイスは、コンテキスト、質問、回答を含むRAGデータセットを提供し、ラマ3.2 3Bモデルを微調整して、タスクのパフォーマンスを向上させます。

Q5。微調整されたモデルはエッジデバイスに展開できますか?

A.はい、Llama 3.2 3bは、特にその量子化された形式で、エッジ環境とモバイル環境でのメモリ効率の高い展開に最適化されています。

以上がラグ用の微調整llama 3.2 3b -Analytics Vidhyaの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。