デモ動画
LLama3.2 3Bファインチューニング実験 | 25
Unslothの推論の実験!取り敢えずはLLM-JPでやってみた! https://t.co/DoTVzHatyx pic.twitter.com/N8ZdE06M1a— Maki@Sunwood AI Labs. (@hAru_mAki_ch) November 26, 2024
📦 必要なライブラリのインストール
%%capture
!pip install unsloth
# 最新のUnslothナイトリービルドを取得
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
解説 : このセルではUnslothライブラリをインストールしています。Unslothは大規模言語モデル(LLM)の推論を高速化するためのライブラリです。%%capture
を使用することで、インストール時の出力を非表示にしています。
🔧 必要なライブラリのインポートと基本設定
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from unsloth import FastLanguageModel
import torch
# モデルの基本設定
max_seq_length = 512
dtype = None
load_in_4bit = True
model_id = "llm-jp/llm-jp-3-13b" # または自分でファインチューニングしたモデルID
解説 : - transformers
: Hugging Faceの変換器ライブラリ - unsloth
: 高速化ライブラリ - torch
: PyTorchフレームワーク - モデルの設定では: - 最大シーケンス長: 512トークン - 4ビット量子化を有効化 - LLM-JP 13Bモデルを使用
🚀 モデルとトークナイザーの初期化
# モデルとトークナイザーのロード
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=model_id,
dtype=dtype,
load_in_4bit=load_in_4bit,
trust_remote_code=True,
)
# 推論モードに設定
FastLanguageModel.for_inference(model)
解説 : このセルでは: 1. モデルとトークナイザーを同時にロード 2. 4ビット量子化を適用し、メモリ使用量を削減 3. モデルを推論モードに設定して最適化
💬 応答生成関数の実装
def generate_response(input_text):
"""
入力テキストに対して応答を生成する関数
"""
# プロンプトの作成
prompt = f"""### 指示\n{input_text}\n### 回答\n"""
# 入力のトークナイズ
inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
# 応答の生成
outputs = model.generate(
**inputs,
max_new_tokens=512,
use_cache=True,
do_sample=False,
repetition_penalty=1.2
)
# デコードして回答部分を抽出
prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
return prediction
解説 : この関数は以下の処理を行います: 1. 入力テキストを指示形式のプロンプトに変換 2. トークナイズしてモデルに入力可能な形式に変換 3. 以下のパラメータで応答を生成: - max_new_tokens
: 最大512トークンまで生成 - use_cache
: キャッシュを使用して高速化 - do_sample
: 決定的な出力を生成 - repetition_penalty
: 繰り返しを抑制(1.2) 4. 生成された出力から回答部分のみを抽出
✅ 使用例
if __name__ == "__main__":
# 入力例
sample_input = "今日の天気について教えてください。"
# 応答の生成
response = generate_response(sample_input)
print("入力:", sample_input)
print("応答:", response)
解説 : このセルは実際の使用例を示しています: - サンプル入力を設定 - generate_response
関数を呼び出して応答を生成 - 入力と応答を表示
このコードを実行することで、LLM-JPモデルを使用して日本語の質問に対する応答を生成できます。Unslothによる最適化により、標準的な実装と比較して高速な推論が可能です。
コメント