ホームページ >テクノロジー周辺機器 >AI >ラグ用の微調整llama 3.2 3b -Analytics Vidhya
小言語モデル(SLM)がAIに大きな影響を与えています。彼らは効率的で費用対効果が高い一方で、強力なパフォーマンスを提供します。傑出した例の1つは、Llama 3.2 3bです。検索された生成(RAG)タスクで非常にうまく機能し、高い精度を維持しながら、計算コストとメモリの使用量を削減します。この記事では、Llama 3.2 3Bモデルを微調整する方法について説明します。小規模なモデルがぼろきれタスクでどのように優れているかを学び、コンパクトなAIソリューションが達成できる境界を押し広げることができます。
Metaが開発したLlama 3.2 3Bモデルは、質問応答、要約、ダイアログシステムなどのタスク向けに設計された30億パラメーターを備えた多言語SLMです。業界のベンチマーク上の多くのオープンソースモデルよりも優れており、多様な言語をサポートしています。さまざまなサイズで利用可能なLlama 3.2は、効率的な計算パフォーマンスを提供し、モバイルおよびエッジ環境でのより速く、メモリ効率の高い展開を実現するための量子化されたバージョンが含まれています。
また読む:トップ13の小言語モデル(SLM)
微調整は、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を実装しましょう。
上記の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、DataCollatorForSeq2Seq、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によってサポートされている他のモデルについては、このドキュメントを参照できます。
モデル= 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、 ))
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})
データセットメッセージは次のとおりです。
SLMを微調整するためにトレーナーを初期化できます。
トレーナー= sfttrainer( モデル=モデル、 トークンザー=トークネザー、 train_dataset = 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、 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などに使用します )、、 ))
いくつかのパラメーターの説明:
応答テンプレートを指定することによってのみ、応答のモデルトレーニングを作成します。
トレーナー= train_on_responses_only( トレーナー、 instruction_part = " user \ n \ n"、 Response_Part = " Assistant \ n \ n"、 ))
trainer_stats = trainer.train()
これがトレーニングの統計です:
推論にモデルを使用しましょう。
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を始めましょう
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 サイトの他の関連記事を参照してください。