🚀 完全微調整によるカスタム大規模言語モデル
このプロジェクトは、Meta-Llama-3.1-8Bアーキテクチャに基づくカスタム学習言語モデルを実装しています。以前のバージョンが高ランクアダプタを使用していたのとは異なり、このモデルは様々なタスクでの学習能力を高めるために完全微調整を採用しています。
🚀 クイックスタート
セットアップ
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
学習コマンド
python sft_14.py \
--run_name="llama3.1-8b-continued2" \
--model_name_or_path="meta-llama/Meta-Llama-3.1-8B" \
--dataset_name="mlfoundations/dclm-baseline-1.0-parquet,mlabonne/FineTome-100k" \
--report_to="wandb" \
--optim="adamw_bnb_8bit" \
--lr_scheduler_type="cosine" \
--max_steps=100000 \
--max_seq_length=64000 \
--learning_rate=0.00001 \
--attn_implementation="flash_attention_2" \
--save_strategy="steps" \
--save_steps 50 \
--save_total_limit=10 \
--per_device_train_batch_size=1 \
--per_device_eval_batch_size=1 \
--gradient_accumulation_steps=8 \
--logging_steps=1 \
--num_train_epochs=1 \
--push_to_hub \
--hub_model_id="ericflo/Llama-3.1-8B-ContinuedTraining2-FFT" \
--hub_strategy="all_checkpoints" \
--gradient_checkpointing \
--use_liger=true \
--packing=true \
--torch_dtype="bfloat16" \
--output_dir="continuedtraining2_output"
✨ 主な機能
- 完全微調整:すべてのモデルパラメータを更新し、包括的な学習を可能にします。
- 8ビットAdamWオプティマイザ:
adamw_bnb_8bit
を使用して、メモリ効率の良い学習を実現します。
- Flash Attention 2:
flash_attention_2
を実装し、高速な学習を可能にします。
- 勾配チェックポイント:限られたGPUメモリでの学習を可能にします。
- Ligerとパッキング:
use_liger=true
とpacking=true
を利用して、効率的なデータ処理を行います。
- BFloat16精度:
bfloat16
を使用して、精度とパフォーマンスのバランスを取ります。
📦 インストール
このモデルを使用するには、以下のコマンドを実行して必要なライブラリをインストールします。
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
💻 使用例
基本的な使用法
このモデルを使用するための基本的な手順は、学習コマンドを実行することです。
python sft_14.py \
--run_name="llama3.1-8b-continued2" \
--model_name_or_path="meta-llama/Meta-Llama-3.1-8B" \
--dataset_name="mlfoundations/dclm-baseline-1.0-parquet,mlabonne/FineTome-100k" \
--report_to="wandb" \
--optim="adamw_bnb_8bit" \
--lr_scheduler_type="cosine" \
--max_steps=100000 \
--max_seq_length=64000 \
--learning_rate=0.00001 \
--attn_implementation="flash_attention_2" \
--save_strategy="steps" \
--save_steps 50 \
--save_total_limit=10 \
--per_device_train_batch_size=1 \
--per_device_eval_batch_size=1 \
--gradient_accumulation_steps=8 \
--logging_steps=1 \
--num_train_epochs=1 \
--push_to_hub \
--hub_model_id="ericflo/Llama-3.1-8B-ContinuedTraining2-FFT" \
--hub_strategy="all_checkpoints" \
--gradient_checkpointing \
--use_liger=true \
--packing=true \
--torch_dtype="bfloat16" \
--output_dir="continuedtraining2_output"
高度な使用法
Fill-in-the-Middle (FIM) 機能の使用
FIM機能を使用するには、特殊トークンを使用して入力を構造化します。
<|fim_start|>{prefix}<|fim_marker|>{suffix}<|fim_gen|>
モデルは<|fim_gen|>
を置き換える内容を生成し、プレフィックスとサフィックスの間を埋めます。
逆予測と命令逆翻訳
この手法は、会話やテキストの前の部分を予測するようにモデルを学習させることで、モデルの文脈理解能力を向上させます。
- モデルに会話やテキストの断片が与えられます。
- その後、この断片の前に何があったかを予測するように求められます。
- このプロセスにより、モデルは文脈、会話の流れ、およびアイデアの論理的な進行を理解するのに役立ちます。
Meta-FIMの使用
Meta-FIMは、Fill-in-the-Middle手法を会話やドキュメント全体などの大きなテキストチャンクに適用します。
<|fim_start|>Human: What's the weather like today?
Assistant: I'm sorry, but I don't have access to real-time weather information. Could you please provide your location?<|fim_marker|>Human: Thank you for the information about Paris. Can you recommend some popular tourist attractions there?<|fim_gen|>Human: I'm in Paris, France.
Assistant: Ah, Paris! While I can't provide real-time weather information, I can tell you that Paris generally has a temperate climate. May I suggest checking a local weather website or app for the most up-to-date information?
Human: That's a good idea, thanks. While we're on the topic of Paris, can you tell me about some famous landmarks?
Assistant: Certainly! Paris is known for its iconic landmarks. Here are a few famous ones:
1. Eiffel Tower
2. Louvre Museum
3. Notre-Dame Cathedral
4. Arc de Triomphe
5. Sacré-Cœur Basilica<|fim_end|>
この例では、モデルは与えられた開始点と終了点の間に適合する一貫した会話を理解して生成する必要があります。
📚 ドキュメント
モデル概要
- 開発者:Eric Florenzano
- モデルタイプ:大規模言語モデル (LLM)
- 言語:英語、コード関連のタスクではPythonに重点を置いています。
- ライセンス:Apache-2.0
- ベースモデル:meta-llama/Meta-Llama-3.1-8B
独自の学習アプローチ
このモデルは、一般的なテキストとコード補完タスク、および命令追従のための高品質データセットの混合物で直接学習されています。主な特徴は以下の通りです。
- 完全微調整:以前のLoRAアプローチとは異なり、このバージョンはすべてのモデルパラメータを更新するために完全微調整を使用します。
- 多様なデータセットの混合:事前学習データセットと命令データセットを組み合わせて、包括的な言語理解を実現します。
- 多形式命令微調整:ChatMLとLlama Chatテンプレートを交互に使用して、柔軟な命令追従を可能にします。
- 文脈データの接頭辞付け:学習中のデータ不均衡を解消するために、ソース情報を使用します。
- Fill-in-the-Middle (FIM) 学習:文脈理解を強化するためにFIMタスクを組み込んでいます。
学習データ
このモデルは、高品質なデータソースの混合物で学習されています。
- FineTome-100k:一般的な言語タスクのための高品質命令微調整データ。
- dclm-baseline-1.0-parquet:テキスト補完/予測のためのAppleの事前学習コーパス。
- 英語、スペイン語、フランス語のウィキペディア:幅広い言語理解のため。
- Starcoder:コード補完タスクのための高品質Python中心のコードデータセット。
評価
タスク |
バージョン |
フィルタ |
n-shot |
メトリック |
値 |
標準誤差 |
tinyBenchmarks |
N/A |
|
|
|
|
|
- tinyArc |
0 |
none |
25 |
acc_norm |
0.5821 |
N/A |
- tinyGSM8k |
0 |
flexible-extract |
5 |
exact_match |
0.4989 |
N/A |
|
|
strict-match |
5 |
exact_match |
0.4867 |
N/A |
- tinyHellaswag |
0 |
none |
10 |
acc_norm |
0.8307 |
N/A |
- tinyMMLU |
0 |
none |
0 |
acc_norm |
0.6651 |
N/A |
- tinyTruthfulQA |
0 |
none |
0 |
acc |
0.4991 |
N/A |
- tinyWinogrande |
0 |
none |
5 |
acc_norm |
0.7558 |
N/A |
意図された用途
このモデルは以下の用途を想定して設計されています。
- テキスト補完と生成
- コード補完 (特にPython)
- 命令追従
- 一般的な言語理解
- 文脈認識テキスト埋め込み (FIMを使用)
制限事項とバイアス
- モデルは学習データに存在するバイアスを示す可能性があります。
- 学習データを超えたリアルタイムの知識を持っていません。
- 人間の監視なしで重要な決定を下すために使用してはいけません。
技術仕様
- ベースモデル:meta-llama/Meta-Llama-3.1-8B
- 学習アプローチ:完全微調整
- ライブラリ:Hugging Face TransformersとTRL
🔧 技術詳細
Fill-in-the-Middle (FIM) 機能
FIMにより、モデルはプレフィックスとサフィックスの両方が与えられた場合にテキストを補完することができ、コード補完、テキスト埋め込み、および文脈認識生成などのタスクに特に有用です。
逆予測と命令逆翻訳
この手法は、会話やテキストの前の部分を予測するようにモデルを学習させることで、モデルの文脈理解能力を向上させます。
Meta-FIM
Meta-FIMは、Fill-in-the-Middle手法を会話やドキュメント全体などの大きなテキストチャンクに適用します。これにより、モデルが複雑な入れ子構造の文脈を処理する能力が向上します。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。
お問い合わせ
このモデルに関する問い合わせは、モデルリポジトリ を通じてEric Florenzanoにお問い合わせください。