モデル概要
モデル特徴
モデル能力
使用事例
🚀 LongLoRAとLongAlpacaによる長文対応大規模言語モデル
LongLoRAとLongAlpacaは、長文コンテキストに対応した大規模言語モデルの効率的な微調整を可能にする手法とデータセットです。これにより、長文の指示にも柔軟に対応できるモデルを構築できます。
詳細な使用方法とコードについては、Githubプロジェクトをご覧ください。
🚀 クイックスタート
このセクションでは、LongLoRAとLongAlpacaを使ったモデルの使用方法を説明します。まずは、必要なライブラリをインストールし、モデルをダウンロードして、簡単なチャットテストを行いましょう。
✨ 主な機能
- LongLoRAアプローチで提案されたシフト短縮注意機構は、実装が容易で、Flash-Attentionと互換性があり、推論時には不要です。
- 7Bから70Bまでのモデル、8kから100kまでのコンテキスト長を持つモデルを公開しています。
- 長文コンテキストの指示に対応するデータセットLongAlpaca-12kを構築し、対応するモデルを公開しています。これは、オープンソースの長文対応70Bモデルとしては初めてのものです。
📦 インストール
アプリケーションをインストールして実行するには、以下の手順を実行します。
- このリポジトリをフォークします。
- ローカルマシンにリポジトリをクローンします。
git clone [このプロジェクトのURL]
- 以下のコードを実行します。
pip install -r requirements.txt
pip install flash-attn --no-build-isolation
💻 使用例
基本的な使用法
torchrun --nproc_per_node=8 fine-tune.py \
--model_name_or_path path_to/Llama-2-7b-hf \
--bf16 True \
--output_dir path_to_saving_checkpoints \
--cache_dir path_to_cache \
--model_max_length 8192 \
--use_flash_attn True \
--low_rank_training False \
--num_train_epochs 1 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 2 \
--learning_rate 2e-5 \
--weight_decay 0.0 \
--warmup_steps 20 \
--lr_scheduler_type "constant_with_warmup" \
--logging_steps 1 \
--deepspeed "ds_configs/stage2.json" \
--tf32 True \
--max_steps 1000
path_to/Llama-2-7b-hf
、path_to_saving_checkpoints
、path_to_cache
を自分のディレクトリに変更してください。model_max_length
を他の値に変更できます。- 必要に応じて、
ds_configs/stage2.json
をds_configs/stage3.json
に変更できます。 - V100マシンを使用する場合やFlash Attentionをインストールしていない場合は、
use_flash_attn
をFalse
に設定してください。 - 完全な微調整を行う場合は、
low_rank_training
をFalse
に設定できます。これにより、GPUメモリの使用量が増え、速度が低下しますが、性能は少し向上します。 - トレーニングが終了したら、以下のコマンドで完全なモデルの重みを取得します。
cd path_to_saving_checkpoints && python zero_to_fp32.py . pytorch_model.bin
高度な使用法
torchrun --nproc_per_node=8 supervised-fine-tune.py \
--model_name_or_path path_to_Llama2_chat_models \
--bf16 True \
--output_dir path_to_saving_checkpoints \
--model_max_length 32768 \
--use_flash_attn True \
--data_path LongAlpaca-12k.json \
--low_rank_training True \
--num_train_epochs 3 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 1 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 2 \
--learning_rate 2e-5 \
--weight_decay 0.0 \
--warmup_steps 20 \
--lr_scheduler_type "constant_with_warmup" \
--logging_steps 1 \
--deepspeed "ds_configs/stage2.json" \
--tf32 True
- 微調整済みのコンテキスト拡張モデルに対して教師付き微調整を行う必要はありません。LongAlpaca-12kのデータ量が十分であるため、Llama2-chatモデルなどのベースモデルを直接使用することができます。
- 長文指示に対応するデータは、LongAlpaca-12k.jsonで確認できます。
📚 ドキュメント
LongAlpacaデータ
LongAlpaca-12kは、収集した9kの長文QAデータと、元のAlpacaデータからサンプリングした3kの短文QAデータを含んでいます。これは、モデルが短文指示に対する性能を低下させるのを防ぐためです。収集したデータは、以下の図のように、様々なタイプと量を含んでいます。
データ | 短文QA | 長文QA | 合計 | ダウンロード |
---|---|---|---|---|
LongAlpaca-12k | 3k | 9k | 12k | リンク |
元のAlpaca形式に従い、長文QAデータは以下のプロンプトを使用して微調整します。
instruction
:str
、モデルが実行すべきタスクを説明します。例えば、本のセクションや論文を読んだ後の質問に答えるなどです。指示を多様化するために、内容と質問を変えています。output
:str
、指示に対する回答です。
簡単のため、Alpaca形式のinput
フォーマットは使用していません。
モデル
教師付き微調整済みモデル
モデル | サイズ | コンテキスト | トレーニング | リンク |
---|---|---|---|---|
LongAlpaca-7B | 7B | 32768 | 完全微調整 | モデル |
LongAlpaca-13B | 13B | 32768 | 完全微調整 | モデル |
LongAlpaca-70B | 70B | 32768 | LoRA+ | モデル (LoRA重み) |
完全微調整によるコンテキスト拡張モデル
モデル | サイズ | コンテキスト | トレーニング | リンク |
---|---|---|---|---|
Llama-2-7b-longlora-8k-ft | 7B | 8192 | 完全微調整 | モデル |
Llama-2-7b-longlora-16k-ft | 7B | 16384 | 完全微調整 | モデル |
Llama-2-7b-longlora-32k-ft | 7B | 32768 | 完全微調整 | モデル |
Llama-2-7b-longlora-100k-ft | 7B | 100000 | 完全微調整 | モデル |
Llama-2-13b-longlora-8k-ft | 13B | 8192 | 完全微調整 | モデル |
Llama-2-13b-longlora-16k-ft | 13B | 16384 | 完全微調整 | モデル |
Llama-2-13b-longlora-32k-ft | 13B | 32768 | 完全微調整 | モデル |
改良LoRA微調整によるコンテキスト拡張モデル
モデル | サイズ | コンテキスト | トレーニング | リンク |
---|---|---|---|---|
Llama-2-7b-longlora-8k | 7B | 8192 | LoRA+ | LoRA重み |
Llama-2-7b-longlora-16k | 7B | 16384 | LoRA+ | LoRA重み |
Llama-2-7b-longlora-32k | 7B | 32768 | LoRA+ | LoRA重み |
Llama-2-13b-longlora-8k | 13B | 8192 | LoRA+ | LoRA重み |
Llama-2-13b-longlora-16k | 13B | 16384 | LoRA+ | LoRA重み |
Llama-2-13b-longlora-32k | 13B | 32768 | LoRA+ | LoRA重み |
Llama-2-13b-longlora-64k | 13B | 65536 | LoRA+ | LoRA重み |
Llama-2-70b-longlora-32k | 70B | 32768 | LoRA+ | LoRA重み |
Llama-2-70b-chat-longlora-32k | 70B | 32768 | LoRA+ | LoRA重み |
トレーニング
事前学習済み重み
事前学習済み重みとしてLLaMA2モデルを使用し、長文コンテキストウィンドウサイズに微調整します。必要に応じてダウンロードしてください。
事前学習済み重み |
---|
Llama-2-7b-hf |
Llama-2-13b-hf |
Llama-2-70b-hf |
Llama-2-7b-chat-hf |
Llama-2-13b-chat-hf |
Llama-2-70b-chat-hf |
このプロジェクトは、ベースモデルのアーキテクチャとしてGPTNeoXモデルもサポートしています。候補となる事前学習済み重みには、GPT-NeoX-20B、Polyglot-ko-12.8Bなどがあります。
低ランクトレーニングでの学習可能な重みの取得
低ランクトレーニングでは、埋め込み層と正規化層を学習可能に設定しています。以下のコマンドを使用して、pytorch_model.bin
から学習可能な重みtrainable_params.bin
を抽出してください。
python3 get_trainable_weights.py --checkpoint_path path_to_saving_checkpoints --trainable_params "embed,norm"
LoRA重みのマージ
pytorch_model.bin
のLoRA重みと学習可能なパラメータtrainable_params.bin
をマージし、結果のモデルをHugging Face形式で希望のパスに保存します。
🔧 技術詳細
LongLoRAのシフト短縮注意機構は、長文コンテキストに対する効率的な注意機構を提供します。これにより、長文のコンテキストを処理する際の計算量を削減し、モデルの性能を向上させます。また、Flash-Attentionとの互換性により、高速な計算が可能です。
📄 ライセンス
- コードライセンス: Apache 2.0
- データライセンス: CC By NC 4.0
- 重みライセンス: CC By NC 4.0
その他
ニュース
- [x] [2023.10.8] 長文指示に対応するデータセットLongAlpaca-12kと対応するモデルLongAlpaca-7B、LongAlpaca-13B、LongAlpaca-70Bを公開しました。
- (以前のSFTモデルLlama-2-13b-chat-longlora-32k-sftとLlama-2-70b-chat-longlora-32k-sftは廃止されました。)
- [x] [2023.10.3] GPTNeoXモデルのサポートを追加しました。使用方法については、このPRを参照してください。@naubull2の貢献に感謝します。
- [x] [2023.9.22] 微調整したすべてのモデルを公開しました。これには、70B-32kモデルLLaMA2-LongLoRA-70B-32k、LLaMA2-LongLoRA-7B-100kが含まれます。是非確認してみてください!
- [x] [2023.9.22] 論文とこのGitHubリポジトリを公開しました。これには、トレーニングと評価のコードが含まれています。
LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models [論文]
Yukang Chen,
Shengju Qian,
Haotian Tang,
Xin Lai,
Zhijian Liu,
Song Han,
Jiaya Jia
貢献方法
- gitがインストールされていることを確認してください。
- このプロジェクトをフォークします。
- ローカルマシンにリポジトリをクローンします。
git clone [このプロジェクトのURL]
- 以下の
使用要件
とインストールとクイックガイド
のセクションを読んでください。 - 変更をコミットしてプッシュします。
- プロジェクトの修正が完了したら、プルリクエストを作成します。
使用要件
事前学習済み重みをダウンロードして使用するには、以下が必要です。
- 有効なメールアドレスを持つHugging Face (HF)アカウント。HFで使用するメールアドレスは、ライセンス契約にも使用する必要があります。
- Metaのライセンスと使用許諾ポリシーに同意する必要があります。
デモ
デモについては、こちらを参照してください。
PDFからテキストへのデータ生成
PDFからテキストへのデータ生成については、こちらを参照してください。
引用
@article{your_paper_citation,
title = {LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models},
author = {Yukang Chen, Shengju Qian, Haotian Tang, Xin Lai, Zhijian Liu, Song Han, Jiaya Jia},
journal = {ArXiv},
year = {2023},
volume = {arXiv:2309.12307}
}
謝辞
このプロジェクトに貢献してくれた皆様に感謝します。また、関連する研究やオープンソースプロジェクトに感謝します。



