|
--- |
|
base_model: llm-jp/llm-jp-3-13b |
|
tags: |
|
- text-generation-inference |
|
- transformers |
|
- unsloth |
|
- llama |
|
- trl |
|
license: apache-2.0 |
|
language: |
|
- en |
|
--- |
|
|
|
# Uploaded model |
|
|
|
- **Developed by:** kazuHF |
|
- **License:** apache-2.0 |
|
- **Finetuned from model :** llm-jp/llm-jp-3-13b |
|
|
|
This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library. |
|
|
|
[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth) |
|
|
|
|
|
# kazuHF/llm-jp-3-13b-it2_loraの概要 |
|
|
|
1. モデル概要 |
|
- ベースモデル: llm-jp/llm-jp-3-13b (https://huggingface.co/llm-jp/llm-jp-3-13b) |
|
- 用途: 日本語によるQ&A形式の文章生成 |
|
- アーキテクチャ: FrameworkやLibraryとしてはPyTorch、Transformers、Unsloth、trl、LoRA、xformers、Flash Attentionなどを利用。UnslothはFine TuningやInferenceを高速化しメモリも削減する。llm-jp/llm-jp-3-13bを4bitで量子化するLoRAでロードし、SFTで事後学習を行った。 |
|
|
|
2. 事後学習の詳細 |
|
- 事後学習用データにichikara-instruction-003-001-1.jsonを必要な申請を行って利用した。 |
|
- Epoch数 1, バッチサイズ 2, 学習率 2e-4 |
|
- Google Colaboratory Pro上のL4/A100で学習 |
|
|
|
3. モデルの入出力 |
|
- 学習における入力のkeyは “text”、出力のkeyは “output” |
|
- 推論による出力のkeyは “task_id”, “input”, “output” |
|
|
|
4. 推論方法 |
|
- Hugging FaceのIDとして、 |
|
model_id = "llm-jp/llm-jp-3-13b”, adapter_id = "kazuHF/llm-jp-3-13b-it2_lora" |
|
と指定し、 |
|
FastLanguageModel.from_pretrained( … model_id … ) |
|
で元のモデルをロードする。そして |
|
model = PeftModel.from_pretrained( … adaptor_id … ) |
|
によって元のモデルとLoRAのアダプターを結合し、そのモデルのモードを |
|
FastLanguageModel.for_inference(model) |
|
によって推論モードに変更する。 |
|
入力を”””###\n 指示 入力 \n### 回答\n”””の形式にしてトークン化し、 |
|
model.generate( “input_ids”: …, “attention_mask”: …, …) |
|
によってpredictionを行い、それをdecodeして出力とする。 |
|
|
|
5. ライセンス |
|
- ベースモデル: 国立情報学研究所 大規模言語モデル研究開発センターが公開しているllm-jp/llm-jp-3-13b。Apache 2.0 のライセンスを継承する。 |
|
- 事後学習に用いたデータ: 理化学研究所 革新知能統合研究センター 言語情報アクセス技術チームが公開している ichikara-instruction-003-001-1.json 。CC-BY-NC-SAのライセンスを継承する。 |
|
|
|
6. 問題点や改善点 |
|
- promptに対して適切に答える場合もあるが、回答が短かったり、答えられない場合も散見されるため、更なる学習データの蓄積と事後学習を要する。 |
|
|
|
7. 謝辞 |
|
- 東京大学 松尾・岩澤研究室主催の大規模言語モデルDeep Learning応用講座 2024|Fall を受講することで本モデルが作製できた。同講座に関係する方々並びに同講座を受講された方々に深謝する。 |
|
|
|
|
|
# 推論方法の詳細 |
|
|
|
◆ Google Colaboratory上のL4での推論 |
|
|
|
1. Google Colaboratory上で、サンプルコードの |
|
Model_Inference_Template_20241127.jpynb |
|
を開く。 |
|
|
|
◇ 環境設定 |
|
|
|
1. Runtimeで、Hardware acceleratorをL4 GPUにする。 |
|
2. ノートブックをGoogle driveに保存するため、Google driveにマウントする。 |
|
3. CodeのセルでGenerateをクリックして「ドライブに接続」というPromptをGeminiに入れると、マウントに必要なセルを書いてくれるのでそれを評価する。 |
|
4. 「接続しているGPUの表示」とGeminiに聞いて、23GBのL4に接続していることを確認する。 |
|
5. /contentに、次のファイルをupload. |
|
elyza-tasks-100-TV_0.json |
|
6. 提供されたコードでunsloth, torch, peftをインストール。(37sec) |
|
|
|
◇ 推論 |
|
|
|
7. FastLanguageModel, PeftModelなどのインポート。(22sec) |
|
8. ベースモデルと作製したモデルのIDの貼り付け。 |
|
9. 事後学習の際に使用したHugging FaceのTokenの指定。 |
|
10. FastLanguageModelのインスタンス化。下のモデルとTokenizerを読み込む。 |
|
途中で、Grant accessをクックする。(3min) |
|
11. 元のモデルにQLoRAのadaptorを統合。tokenにHugging FaceのTokenを指定する。(8sec) |
|
12. elyza-tasks-100-TV_0.jsonlを読み込む。 |
|
13. adaptorをつけたモデルでタスクの推論を行う。(6min) |
|
14. 推論結果をjsonlで保存。 |
|
|
|
|
|
# ◆ 事後学習の詳細 |
|
|
|
◆ Hugging Faceでwrite権限のあるtokenの取得 |
|
|
|
1. 自身のHugging Faceにlog inし、自身のProfileのSettingに入り、Access Tokenに入る。 |
|
2. Create New Tokenをクリックし、Token type からWriteを選択し、Token nameを設定してから、Create tokenをクリックする。tokenを保存しておく。 |
|
|
|
◆ 事後学習のためのデータの入手 |
|
|
|
1. LLMのための日本語インストラクションデータ公開ページに入る。( https://liat-aip.sakura.ne.jp/wp/llm%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/llm%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%87%e3%83%bc%e3%82%bf-%e5%85%ac%e9%96%8b/ ) |
|
2. ダウンロードのための必要事項記入フォームに記入。(https://docs.google.com/forms/d/1CeYoFrMJnCFbH71RGxOaAIDGDBofUSAEdEcmiLR-Uko/viewform?edit_requested=true) |
|
3. LLMのためのインストラクションデータのダウンロードのURLを入手 |
|
https://drive.google.com/file/d/1U_GQ43hc2EYTKO-gvswooR0UY12alB0z/view?usp=drive_link |
|
4. このリンクから、Distribution20241221_allというフォルダの中にある |
|
ichikara-instruction-003-001-1.json |
|
などのjsonファイルのデータが入手できる。これをモデルの事後学習であるSFTやRLHFのための学習データとして利用する。 |
|
|
|
◆ Google Colaboratory上のL4での事後学習 |
|
|
|
1. Google Colaboratory上で、サンプルコードの |
|
LoRA_template_unsloth_20241127.jpynb |
|
を開く。 |
|
|
|
◇ 環境設定 |
|
|
|
1. Runtimeで、Hardware acceleratorをL4 GPUにする。 |
|
2. ノートブックをGoogle driveに保存するため、Google driveにマウントする。 |
|
3. CodeのセルでGenerateをクリックして「ドライブに接続」というPromptをGeminiに入れると、マウントに必要なセルを書いてくれるのでそれを評価する。 |
|
4. 「接続しているGPUの表示」とGeminiに聞いて、23GBのL4に接続していることを確認する。 |
|
5. /contentに、次の二つのファイルをupload. |
|
elyza-tasks-100-TV_0.json |
|
ichikara-instruction-003-001-1.json |
|
6. 既に書かれているcodeによってuslothをインストールする。(25sec) |
|
7. torchとxformersのupgrade (7sec) |
|
(ipwidgetsのupgradeはskip) |
|
8. Flash-attentionのinstall (20sec) |
|
|
|
◇ 事前学習モデルのロード |
|
|
|
1. Write権限のあるTokenをHF_TOKENのところに入力して評価する。 |
|
2. llm-jp/llm-jp-3-13bというモデルを4bit量子化したLoRAでloadする。(2min) |
|
3. Notebook does not have secret accessというwindowが出たらGrant accessをクリック |
|
4. 事後学習用のデータであるichikara-instruction-003-001-1.jsonをloadする。(0sec) |
|
5. 学習時のプロンプトのフォーマットの定義 (0sec) |
|
6. データの確認 (0sec) ###指示 と ###回答 とからなる。 |
|
|
|
◇ モデルの事後学習 |
|
|
|
1. SFTの設定 (1sec) |
|
2. GPUのメモリの確認: GPU NVIDIA L4 Max memory 22.168GB, 8.709GBを使用中 |
|
3. 学習の実行 (23min) Training lossは、2.22から1.90まで低下した。 |
|
|
|
◇ モデルによる推論 |
|
|
|
1. 課題であるelyza-tasks-100-TV_0.jsonを読み込む。(0sec) |
|
2. 事後学習したモデルで、タスクを一つ一つ推論する。(6min) |
|
3. 推論結果をjsonで保存する。 |
|
4. LoRAのアダプタをHugging Faceにuploadする。(22sec) |
|
5. Hugging FaceのProfileにuploadされているモデルをクリックする。 |
|
6. Files and versionsをクリックし、README.mdを開き、editをクリックして編集する。 |
|
7. Comment changes to mainをクリックして保存する。 |