Hugging Faceモデルを用いた推論ガイド
Hugging Faceにアップロードされたモデルで、
指定された入力データに対する推論結果を取得する手順を説明します。
セットアップ手順
ライブラリをインストールしてください。
!pip install -U bitsandbytes
!pip install -U transformers
!pip install -U accelerate
!pip install -U datasets
!pip install -U peft
モデルのロードと推論手順
- モデルとトークナイザーの準備
以下のコードを用いて、Hugging Faceからモデルをロードします。
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
import torch
bnb_config の設定は、モデルを効率的に扱うために QLoRA(Quantized LoRA)の設定を定義したものです。この設定により、メモリ使用量を抑えつつ高速に推論を行うことができます。以下、それぞれのオプションについて詳しく説明します:
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
1-1. load_in_4bit=True
概要: モデルを4ビット量子化してロードする設定です。
メリット: モデルのサイズが劇的に小さくなり、必要なメモリ容量が削減されます。
用途: 特に、GPUメモリが限られている環境(例: consumer-grade GPUs)で大規模モデルを扱う際に有用です。
1-2. bnb_4bit_quant_type="nf4"
概要: 4ビット量子化の際のスキームを指定しています。nf4 は Normalized Float 4 を意味します。
特徴:
精度の低下を最小限に抑えるために、通常の4ビット浮動小数点(FP4)よりも情報を多く保持できます。
NLPタスクなど、モデルが細かいパターンを識別する必要がある場合に有効です。
1-3. bnb_4bit_compute_dtype=torch.bfloat16
概要: 計算時のデータ型(精度)を指定します。この例では、**BFloat16(Brain Floating Point 16)**を使用しています。
メリット:
FP16(半精度浮動小数点)よりも広いダイナミックレンジを持つため、数値の安定性が向上します。
モデルの高速性を維持しながら、低精度計算を活用します。
用途: 特に量子化モデルでの推論やファインチューニング時に計算の安定性を確保するために使用されます。
モデルのロード
model_name = "your-huggingface-model-name"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
- 推論の実行
入力データを読み込み、以下のコードで推論を実行します。
input_text = "あなたのテキストをここに入力してください"
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("推論結果:", result)
- 結果の保存
推論結果をJSON形式で保存する場合のコード:
import json
output_data = {"input": input_text, "output": result}
with open("output.jsonl", "w") as f:
json.dump(output_data, f)
注意点
モデルの使用にあたり、Hugging Face Hubでの認証が必要なため、事前にトークンを設定してください。