kazuHF's picture
Update README.md
0855753 verified
|
raw
history blame
8.5 kB
metadata
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 and Huggingface's TRL library.

■ 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で事後学習を行った。
  1. 事後学習の詳細
  • 事後学習用データにichikara-instruction-003-001-1.jsonを必要な申請を行って利用した。
  • Epoch数 1, バッチサイズ 2, 学習率 2e-4
  • Google Colaboratory Pro上のL4/A100で学習
  1. モデルの入出力
  • 学習における入力のkeyは “text”、出力のkeyは “output”
  • 推論による出力のkeyは “task_id”, “input”, “output”
  1. 推論方法
  • 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して出力とする。
  1. ライセンス
  • ベースモデル: 国立情報学研究所 大規模言語モデル研究開発センターが公開しているllm-jp/llm-jp-3-13b。Apache 2.0 のライセンスを継承する。
  • 事後学習に用いたデータ: 理化学研究所 革新知能統合研究センター 言語情報アクセス技術チームが公開している ichikara-instruction-003-001-1.json 。CC-BY-NC-SAのライセンスを継承する。
  1. 問題点や改善点
  • promptに対して適切に答える場合もあるが、回答が短かったり、答えられない場合も散見されるため、更なる学習データの蓄積と事後学習を要する。
  1. 謝辞
  • 東京大学 松尾・岩澤研究室主催の大規模言語モデルDeep Learning応用講座 2024|Fall を受講することで本モデルが作製できた。同講座に関係する方々並びに同講座を受講された方々に心より深謝する。

■ 推論方法の詳細

◆ Google Colaboratory上のGPUで推論する場合

  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)

◇ 推論

  1. FastLanguageModel, PeftModelなどのインポート。(22sec)
  2. ベースモデルと作製したモデルのIDの貼り付け。
  3. 事後学習の際に使用したHugging FaceのTokenの指定。
  4. FastLanguageModelのインスタンス化。下のモデルとTokenizerを読み込む。  途中で、Grant accessをクックする。(3min)
  5. 元のモデルにQLoRAのadaptorを統合。tokenにHugging FaceのTokenを指定する。(8sec)
  6. elyza-tasks-100-TV_0.jsonlを読み込む。
  7. adaptorをつけたモデルでタスクの推論を行う。(6min)
  8. 推論結果を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上のGPUでの事後学習

  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をクリックして保存する。