はじめに
昨今、生成AI(LLM: Large Language Model)の活用が盛んになっていますが、クラウドAPIではなく自分のPCでローカルにLLMを動かすことにも注目が集まっています。本記事では、Hugging Face の transformers ライブラリを利用し、人気モデル「Mistral-7B-Instruct」をローカル実行するまでの手順をまとめます。
対象読者
- Hugging Face初心者の方
- ローカルGPU/CPUでLLMを試してみたい方
- Python環境が整っているエンジニア
ローカルLLM実行のメリット
項目 | メリット |
---|---|
プライバシ | 入力したテキストが外部に送られない |
コスト | API課金なし(電気代のみ) |
カスタマイズ性 | Fine-tuningや量子化が自由 |
開発環境
項目 | 内容 |
---|---|
OS | macOS 14.6.1 (Sonoma) |
Python | 3.11.9 |
GPU | Metal GPU |
Python環境構築(Pythonパッケージはインストール済み)
1. 仮想環境作成
python3 -m venv venv
source venv/bin/activate
2. ライブラリインストール
pip install --upgrade pip
pip install torch transformers accelerate sentencepiece
モデル選定
Hugging Face Hub ( https://huggingface.co/models ) では数千種類のモデルが公開されています。今回は以下のモデルを使用します:
- モデル名:microsoft/phi-2
- 特徴:Microsoftが開発した英語特化の大規模言語モデル(LLM)で、高度な推論や自然言語理解・生成タスクに優れているモデルです。特に論理的推論や複雑な質問応答などに強みがあります。
実装コード(推論)
Fugging Faceでテキスト生成モデル(text-generation)の推論には主に二通りの手法がある。以下にそれぞれの違いをまとめる。
項目 | AutoModelForCausalLM を使う方法 | pipeline を使う方法 |
---|---|---|
インポート例 | from transformers import AutoModelForCausalLM, AutoTokenizer |
from transformers import pipeline |
推論までのコード量 | 多め(トークナイズ、tensor化、デコードなどを手動で行う) | 少なめ(高レベルAPIで一括処理) |
柔軟性・カスタマイズ性 | 高い:詳細な前処理・後処理や細かいパラメータ設定が可能 | 中程度:pipeline内のオプションに制限される |
実行のわかりやすさ | 低め:PyTorchに慣れている必要がある | 高い:初心者向けで簡単に使える |
利用できるフレームワーク | PyTorch or TensorFlow が選択可能(明示的に指定・操作) | 自動で選択してくれるが、明示制御はやや難しい |
注意: 実際にはモデルによってpipelineやAuto~のライブラリがサポートされていない場合があります。基本的な両者の理解をしつつ, 実際にご自身でもモデルを使ってみる場合は, Hugging Faceのサイトから対象のモデルページをご確認いただくことでどのライブラリで動くかがわかります。
AutoModelForCausalLMを使うバージョン
0. 必要ライブラリのインポート
from transformers import AutoTokenizer, AutoModelForCausalLM
1. トークナイザとモデルの読み込み
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
2. 推論したい文字列
prompt = "Hello. Please introduce yourself."
inputs = tokenizer(prompt, return_tensors="pt")
3. 文章生成
outputs = model.generate(**inputs, max_new_tokens=128)
outputs = outputs.to("cpu")
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result)
全体コード
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
prompt = "Hello. Please introduce yourself."
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=168)
outputs = outputs.to("cpu")
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result)
実行結果
自己紹介らしき文言が生成されていることが確認できる。
Pipelineを使うバージョン
0. 必要ライブラリのインポート
from transformers import pipeline
1. モデルの読み込み、トークナイザーの読み込み、生成用の処理準備まで一括で実行
generator = pipeline(
"text-generation",
model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
device="cpu"
)
2. 文章生成
prompt = "Hello. Please introduce yourself."
result = generator(prompt, max_new_tokens=128)
print(result[0]["generated_text"])
全体コード
from transformers import pipeline
generator = pipeline(
"text-generation",
model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
device="cpu"
)
prompt = "Hello. Please introduce yourself."
result = generator(prompt, max_new_tokens=128)
print(result[0]["generated_text"])
実行結果
自己紹介らしき文言が生成されていることが確認できる。
AutoModelForCausalLMを使うバージョンと違いが出ているのは温度などの影響の可能性が高い。
おまけに
今回のコードでモデルのファイルをローカルにインストールしている形になる。そのファイルは~/.cache/huggingface/hub
配下に格納されている。
このインストールしたファイルを別の場所で管理したい場合はfrom_pretrained関数やpipeline関数の引数cache_dirにインストールしたファイルへのパスを含める。
from transformers import AutoTokenizer, AutoModelForCausalLM
cache_dir = "/your/custom/cache/path"
model = AutoModel.from_pretrained("model_name", cache_dir=cache_dir)
tokenizer = AutoTokenizer.from_pretrained("model_name", cache_dir=cache_dir)
from transformers import pipeline
generator = pipeline(
"text-generation",
model="model_name",
cache_dir="/your/custom/cache/path"
)
それかHF_HOME または TRANSFORMERS_CACHEという環境変数にパスを指定することでモデルやトークナイザーのキャッシュ先を指定できる。
まとめ
今回は Hugging Face の公開モデルを用いて、ローカル環境でLLMを動かす手順をご紹介しました。ローカル推論は自由度が高く個人研究やPoCに最適です。次回はLoRAによるファインチューニング編やGPUメモリ削減(量子化)編も書いていく予定です!
参考リンク
Hugging Face Hub:https://huggingface.co
transformersドキュメント:https://huggingface.co/docs/transformers/