MakiAi commited on
Commit
487159b
·
1 Parent(s): b1a8153

🚄 feat: Unslothを用いたLLM-JPモデルの高速推論実装ガイドを作成

Browse files

- Unslothライブラリのインストールと設定方法について解説しました。
- モデルのロード、応答生成関数の実装、そして実行例を示しました。
- 4ビット量子化による高速化とメモリ効率の改善について説明しました。
- 生成された応答を効果的に抽出する方法を具体的に示しました。
- プロンプトの設計と応答生成におけるパラメータ調整について説明しました。

Files changed (1) hide show
  1. sandbox/Unsloth_inference_llm_jp.md +120 -0
sandbox/Unsloth_inference_llm_jp.md ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🤖 UnslothによるLLM-JPモデルの高速推論実装ガイド(Google Colab📒ノートブック付)
2
+
3
+ ## 📦 必要なライブラリのインストール
4
+
5
+ ```python
6
+ %%capture
7
+ !pip install unsloth
8
+ # 最新のUnslothナイトリービルドを取得
9
+ !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
10
+ ```
11
+
12
+ **解説**:
13
+ このセルではUnslothライブラリをインストールしています。Unslothは大規模言語モデル(LLM)の推論を高速化するためのライブラリです。`%%capture`を使用することで、インストール時の出力を非表示にしています。
14
+
15
+ ## 🔧 必要なライブラリのインポートと基本設定
16
+
17
+ ```python
18
+ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
19
+ from unsloth import FastLanguageModel
20
+ import torch
21
+
22
+ # モデルの基本設定
23
+ max_seq_length = 512
24
+ dtype = None
25
+ load_in_4bit = True
26
+ model_id = "llm-jp/llm-jp-3-13b" # または自分でファインチューニングしたモデルID
27
+ ```
28
+
29
+ **解説**:
30
+ - `transformers`: Hugging Faceの変換器ライブラリ
31
+ - `unsloth`: 高速化ライブラリ
32
+ - `torch`: PyTorchフレームワーク
33
+ - モデルの設定では:
34
+ - 最大シーケンス長: 512トークン
35
+ - 4ビット量子化を有効化
36
+ - LLM-JP 13Bモデルを使用
37
+
38
+ ## 🚀 モデルとトークナイザーの初期化
39
+
40
+ ```python
41
+ # モデルとトークナイザーのロード
42
+ model, tokenizer = FastLanguageModel.from_pretrained(
43
+ model_name=model_id,
44
+ dtype=dtype,
45
+ load_in_4bit=load_in_4bit,
46
+ trust_remote_code=True,
47
+ )
48
+
49
+ # 推論モードに設定
50
+ FastLanguageModel.for_inference(model)
51
+ ```
52
+
53
+ **解説**:
54
+ このセルでは:
55
+ 1. モデルとトークナイザーを同時にロード
56
+ 2. 4ビット量子化を適用し、メモリ使用量を削減
57
+ 3. モデルを推論モードに設定して最適化
58
+
59
+ ## 💬 応答生成関数の実装
60
+
61
+ ```python
62
+ def generate_response(input_text):
63
+ """
64
+ 入力テキストに対して応答を生成する関数
65
+ """
66
+ # プロンプトの作成
67
+ prompt = f"""### 指示\n{input_text}\n### 回答\n"""
68
+
69
+ # 入力のトークナイズ
70
+ inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
71
+
72
+ # 応答の生成
73
+ outputs = model.generate(
74
+ **inputs,
75
+ max_new_tokens=512,
76
+ use_cache=True,
77
+ do_sample=False,
78
+ repetition_penalty=1.2
79
+ )
80
+
81
+ # デコードして回答部分を抽出
82
+ prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
83
+
84
+ return prediction
85
+ ```
86
+
87
+ **解説**:
88
+ この関数は以下の処理を行います:
89
+ 1. 入力テキストを指示形式のプロンプトに変換
90
+ 2. トークナイズしてモデルに入力可能な形式に変換
91
+ 3. 以下のパラメータで応答を生成:
92
+ - `max_new_tokens`: 最大512トークンまで生成
93
+ - `use_cache`: キャッシュを使用して高速化
94
+ - `do_sample`: 決定的な出力を生成
95
+ - `repetition_penalty`: 繰り返しを抑制(1.2)
96
+ 4. 生成された出力から回答部分のみを抽出
97
+
98
+ ## ✅ 使用例
99
+
100
+ ```python
101
+ if __name__ == "__main__":
102
+ # 入力例
103
+ sample_input = "今日の天気について教えてください。"
104
+
105
+ # 応答の生成
106
+ response = generate_response(sample_input)
107
+
108
+ print("入力:", sample_input)
109
+ print("応答:", response)
110
+ ```
111
+
112
+ **解説**:
113
+ このセルは実際の使用例を示しています:
114
+ - サンプル入力を設定
115
+ - `generate_response`関数を呼び出して応答を生成
116
+ - 入力と応答を表示
117
+
118
+ このコードを実行することで、LLM-JPモデルを使用して日本語の質問に対する応答を生成できます。Unslothによる最適化により、標準的な実装と比較して高速な推論が可能です。
119
+
120
+