本稿は Hugging Face Transformers に関する記事です。
| この記事の要点 |
- Transformers は OSS LLM・モデルを扱うときの事実上の標準ライブラリ
- Hugging Face Hub には50万モデル以上が公開されており、数行のコードで読み込んで実行できる
- NLP・画像・音声・マルチモーダルを統一 API で扱える
- PyTorch 中心 (TensorFlow/JAX バックエンドもあり)
pipeline を使えば最短 3 行で推論可能。本格運用には AutoModel + AutoTokenizer
|
Hugging Face と Transformers の関係
| 名前 | 指すもの |
| Hugging Face | 米国/フランス発の AI 企業&コミュニティ。本拠はモデル・データセットのHub |
| Hugging Face Hub | モデル/データセット/Space (デモ) を公開・配布するプラットフォーム |
| Transformers | Hub のモデルをロード・推論・学習するためのPython ライブラリ |
| Diffusers | 同社の画像生成 (Stable Diffusion 等) 向けライブラリ |
| Datasets | データセットの統一ロード/前処理ライブラリ |
| Tokenizers | 高速なトークナイザライブラリ (Rust 実装) |
| Accelerate | 分散学習・量子化等の共通化ライブラリ |
| PEFT | LoRA など軽量ファインチューニング |
| TRL | RLHF / DPO 等の嗜好学習 |
主な特徴
- 統一 API — どんなモデルでも
AutoModel.from_pretrained(name) でロード
- マルチタスク対応 — テキスト分類・生成・QA・翻訳・要約・画像分類・物体検出・音声認識・TTS まで一つの API
- マルチフレームワーク — PyTorch を中核に、TensorFlow / JAX バックエンドもサポート
- 事前学習モデルの巨大エコシステム — Llama / Mistral / Qwen / Phi / Gemma / BERT / GPT-2 / Whisper 等が公開
pipeline ヘルパ — ロード・トークナイズ・推論を 1 行で
- Trainer — 学習ループを自前で書かずに済む高レベル API
- safetensors 対応 — 安全な重みフォーマット
- 量子化対応 — bitsandbytes / GPTQ / AWQ / 4-bit 等で省 VRAM 推論
最小サンプル: pipeline で 3 行推論
|
from transformers import pipeline
# 感情分析
cls = pipeline("sentiment-analysis")
print(cls("I love this library!"))
# [{"label": "POSITIVE", "score": 0.999...}]
# テキスト生成 (小型モデル例)
gen = pipeline("text-generation", model="gpt2")
print(gen("Hello,", max_new_tokens=20))
# 音声認識 (Whisper)
asr = pipeline("automatic-speech-recognition", model="openai/whisper-base")
print(asr("audio.wav")["text"])
|
低レベル API: AutoModel + AutoTokenizer
|
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
name = "meta-llama/Llama-3.2-1B-Instruct"
tok = AutoTokenizer.from_pretrained(name)
model = AutoModelForCausalLM.from_pretrained(name, torch_dtype=torch.bfloat16, device_map="auto")
messages = [{"role": "user", "content": "1+1は?"}]
inputs = tok.apply_chat_template(messages, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=64)
print(tok.decode(out[0], skip_special_tokens=True))
|
対応タスクの代表例
| タスク | pipeline 名 | 代表モデル |
| テキスト分類 | text-classification | BERT、DistilBERT |
| テキスト生成 | text-generation | Llama、Mistral、Qwen、GPT-2、Phi |
| 翻訳 | translation | NLLB、M2M、MarianMT |
| 要約 | summarization | BART、Pegasus、T5 |
| 質問応答 (抽出) | question-answering | BERT、RoBERTa |
| 固有表現抽出 (NER) | token-classification | BERT 系 |
| 埋め込み (Embedding) | feature-extraction | BGE、e5、Sentence Transformers |
| 画像分類 | image-classification | ViT、ResNet、ConvNeXt |
| 物体検出 | object-detection | DETR、YOLOS |
| セグメンテーション | image-segmentation | SegFormer、SAM |
| 音声認識 (STT) | automatic-speech-recognition | Whisper、Wav2Vec2 |
| 音声合成 (TTS) | text-to-speech | SpeechT5、Bark |
| マルチモーダル (画像+テキスト) | image-to-text / visual-question-answering | BLIP、LLaVA、Qwen-VL |
関連ライブラリの組合せ
| 用途 | 使うライブラリ |
| モデル読込・推論 | transformers |
| データセット | datasets(load_dataset) |
| 分散・量子化補助 | accelerate |
| 軽量ファインチューニング | peft (LoRA / QLoRA) |
| 嗜好学習 / RLHF | trl (DPO / SFT / PPO) |
| 高速トークナイズ | tokenizers |
| 画像生成 (Diffusion) | diffusers |
| 評価 | evaluate |
| 推論サーバ | text-generation-inference (TGI)、vLLM |
| UI / デモ | gradio、Spaces で 1 クリックホスティング |
Hugging Face Hub の構成
- Models: 50 万件以上の事前学習モデル(テキスト・画像・音声・マルチモーダル)
- Datasets: 学習・評価用のオープンデータセット
- Spaces: Gradio / Streamlit でホスティングされた AI デモ
- Papers: 論文と関連実装の連携
- Discussions / PR: モデルカード上で議論・変更提案
- Inference Endpoints: 任意のモデルをマネージドでデプロイ
インストール
|
# 基本セット
pip install transformers accelerate
# データセットも使うなら
pip install datasets evaluate
# 画像生成
pip install diffusers transformers accelerate
# LoRA / QLoRA
pip install peft bitsandbytes
# 高速推論サーバ
pip install vllm
|
運用上のヒント
| Tips |
- 大型モデルは
device_map="auto" で複数 GPU に自動配置
- VRAM が足りないなら
load_in_4bit=True (bitsandbytes) で 4-bit 量子化
- サーバ推論は
pipeline ではなく vLLM / TGI でスループット数倍
- 初回ダウンロードはキャッシュされる (
~/.cache/huggingface)。CI ではキャッシュ共有を検討
- ライセンス制限のあるモデル (Llama 等) は事前にアクセス申請+トークン設定が必要
- 本番推論は
safetensors 形式のみを許可するのが安全
|
注意点
| よくある落とし穴 |
- モデルライセンスはモデルごとに違う (Llama Community License、Apache 2.0、GPL、商用不可など)。読まずに採用しない
- 古い
.bin (pickle) は任意コード実行のリスク。safetensors を使う
- 大型モデル (7B / 13B / 70B) のフル精度はVRAM が一桁足りないことが多い。量子化・分散で対応
pipeline はバッチ性能が低い。本番は vLLM や TGI へ
- API バージョンアップで引数名や挙動が変わることがある。
requirements.txt で固定
- Hub から落としたモデルは大容量 (数 GB〜数百 GB)。ストレージ計画が必要
- 機密データでファインチューニングしたモデルを誤って Public で pushしない
|
関連