0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hugging FaceでローカルLLMを動かしてみる

Last updated at Posted at 2025-08-03

はじめに

昨今、生成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)

実行結果

スクリーンショット 2025-08-03 18.22.40.png

自己紹介らしき文言が生成されていることが確認できる。

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"])

実行結果

スクリーンショット 2025-08-03 18.23.48.png
自己紹介らしき文言が生成されていることが確認できる。
AutoModelForCausalLMを使うバージョンと違いが出ているのは温度などの影響の可能性が高い。

おまけに

今回のコードでモデルのファイルをローカルにインストールしている形になる。そのファイルは~/.cache/huggingface/hub
配下に格納されている。
スクリーンショット 2025-08-03 18.33.44.png
このインストールしたファイルを別の場所で管理したい場合は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/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?