Transformers.js v3 リリースで WebGPU 加速、モデルサポートの拡充、サーバーサイド JavaScript 互換性を追加
TL;DR
Transformers.js v3 は WebGPU 加速(WASM より最大 100 倍高速)、新しい量子化フォーマット、120 のモデルアーキテクチャのサポート、そして Node.js(ESM + CJS)、Deno、Bun との互換性を追加し、ブラウザやサーバーサイド JavaScript ランタイムで直接高性能推論が可能になります。
クイックインストール
NPM からライブラリをインストールできます:
npm i @huggingface/transformers
パイプラインは ES モジュールまたは CDN からインポートできます:
import { pipeline } from "@huggingface/transformers";
// or
import { pipeline } from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.0.0";
完全なドキュメントは https://hf.co/docs/transformers.js で利用できます。
WebGPU サポート – 大幅な速度向上
WebGPU は GPU を汎用計算に利用できる最新のウェブ標準で、WebGL に取って代わります。2024年10月時点で、約 70% のブラウザが WebGPU をサポートしていますが、一部は機能フラグが必要です(Firefox dom.webgpu.enabled、Safari WebGPU、古い Chromium enable-unsafe-webgpu)。
Transformers.js で WebGPU を有効にする
このライブラリは ONNX Runtime Web と統合されており、モデルをロードする際に device: "webgpu" を渡すだけで GPU 加速を有効にできます。
テキスト埋め込み例
const extractor = await pipeline(
"feature-extraction",
"mixedbread-ai/mxbai-embed-xsmall-v1",
{ device: "webgpu" }
);
const embeddings = await extractor(["Hello world!", "Example sentence."], { pooling: "mean", normalize: true });
console.log(embeddings.tolist());
Whisper ASR 例
const transcriber = await pipeline(
"automatic-speech-recognition",
"onnx-community/whisper-tiny.en",
{ device: "webgpu" }
);
const output = await transcriber("https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/jfk.wav");
console.log(output);
画像分類例
const classifier = await pipeline(
"image-classification",
"onnx-community/mobilenetv4_conv_small.e2400_r224_in1k",
{ device: "webgpu" }
);
const result = await classifier("https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/tiger.jpg");
console.log(result);
これらのデモは、従来 WASM で数秒かかっていた推論が GPU ではリアルタイムで実行できることを示しています。
新しい量子化フォーマット(dtype パラメータ)
以前はライブラリは二値の quantized フラグ(q8 対 fp32)を提供していました。バージョン 3 では、これが柔軟な dtype 引数に置き換えられ、以下のような多数の精度を選択できるようになりました:
- フル精度:
"fp32" - 半精度:
"fp16" - 8ビット:
"q8"、"int8"、"uint8" - 4ビット:
"q4"、"bnb4"、"q4f16"
基本的な使用例 – 4ビット Qwen2.5
const generator = await pipeline(
"text-generation",
"onnx-community/Qwen2.5-0.5B-Instruct",
{ dtype: "q4", device: "webgpu" }
);
const msgs = [{ role: "system", content: "You are a helpful assistant." }, { role: "user", content: "Tell me a funny joke." }];
const out = await generator(msgs, { max_new_tokens: 128 });
console.log(out[0].generated_text.at(-1).content);
エンコーダ‑デコーダモデル向けのモジュール別 dtype
一部のモデル(例: Whisper、Florence‑2)は量子化に敏感です。現在はモジュール名から dtype へのマッピングを提供できます:
const model = await Florence2ForConditionalGeneration.from_pretrained(
"onnx-community/Florence-2-base-ft",
{
dtype: {
embed_tokens: "fp16",
vision_encoder: "fp16",
encoder_model: "q4",
decoder_model_merged: "q4",
},
device: "webgpu",
}
);
完全な例では、モデル、プロセッサ、トークナイザーをロードし、画像を準備して詳細なキャプションを生成します。これにより、モジュール別量子化の実際的な効果が示されます。
120 のサポートアーキテクチャ – より広いモダリティカバレッジ
Transformers.js v3 は現在、テキスト、ビジョン、オーディオ、マルチモーダルタスクにまたがる 120 のモデルファミリーをサポートしています。注目すべき追加は次のとおりです:
- Phi‑3 と Phi‑3.5(デバイス上で動作する高性能 LLM)
- Gemma と Gemma 2(Google のオープンモデル)
- LLaVA、Moondream、Florence‑2(ビジョン‑言語)
- MusicGen(オーディオ生成)
- Depth Pro、RT‑DETR、Sapiens、PyAnnote(専門的なビジョンおよびオーディオタスク) 元の投稿のバブル図はこれらの新しいファミリーを可視化しています。完全なリストは https://huggingface.co/docs/transformers.js/index#models で確認できます。
例プロジェクトとテンプレート – WebGPU の実演
このリリースでは 25 の新しい例リポジトリが提供され、その多くが WebGPU 加速を示しています。ハイライトは次のとおりです:
- Phi‑3.5 WebGPU – 3.8 B パラメータの LLM をブラウザだけで実行します。
- Whisper Turbo WebGPU – Whisper モデルを GPU で使用したリアルタイム音声認識。 すべての例は https://github.com/huggingface/transformers.js-examples にホストされ、そこに統合されます。
Hub にある 1,200 以上の事前変換済みモデル
コミュニティはすでに 1,200 以上のモデルを Transformers.js が必要とする ONNX フォーマットに変換しています。検索可能なリストは https://hf.co/models?library=transformers.js にあります。
カスタムモデルを変換するには、提供されたスクリプトを使用します:
python -m scripts.convert --quantize --model_id <model_name_or_path>
アップロード後、リポジトリに transformers.js タグを付けて見つけやすくします。
サーバーサイド JavaScript ランタイムのサポート
Transformers.js v3 は、最も人気のある 3 つのランタイムで動作します:
| ランタイム | 互換性 | 例リポジトリ |
|---|---|---|
| Node.js (ESM + CJS) | フルサポート、npm パッケージ | https://github.com/huggingface/transformers.js-examples/tree/main/node-esm |
| Deno | セキュアなデフォルト、実験的 WebGPU | https://github.com/huggingface/transformers.js-examples/tree/main/deno-embed |
| Bun | 高性能バンドラ&ランタイム | https://github.com/huggingface/transformers.js-examples/tree/main/bun |
| これにより、開発者は Python 依存なしでサーバー、エッジデバイス、またはサーバーレス関数内で推論を実行できます。 |
NPM と GitHub の新しいホーム
パッケージは現在、公式 Hugging Face スコープ @huggingface/transformers(以前は @xenova/transformers)として公開されています。
ソースコードは https://github.com/huggingface/transformers.js に移動しました。これにより、問題追跡、プルリクエストの貢献、コミュニティのエンゲージメントが Hugging Face 組織の下で一元化されます。
影響
- Performance: WebGPU はブラウザベースの推論をデスクトップクラスの速度に引き上げ、インタラクティブチャット、ライブ文字起こし、オンデバイスビジョンなどのリアルタイムアプリケーションを実現します。
- Flexibility: 拡張された
dtypeAPI とモジュール別量子化により、開発者はさまざまなハードウェアに対してメモリ、レイテンシ、精度のバランスを取ることができます。 - Ecosystem growth: 120 のアーキテクチャと 1,200 以上の事前変換済みモデルをサポートすることで、JavaScript 環境で最先端モデルを使用するハードルが下がります。
- Portability: Node.js、Deno、Bun との互換性により、同じコードがブラウザ、サーバーレスバックエンド、エッジランタイムで実行でき、デプロイパイプラインが簡素化されます。
- Community alignment: パッケージとリポジトリを Hugging Face 組織に移すことで、ブランドが統合され、広範な HF エコシステムからの貢献が促進されます。
入門チェックリスト
- npm または CDN で
@huggingface/transformersをインストールする。 - Hub からモデルを選択する(
transformers.jsタグが付いていることを確認)。 - デバイスを決定する(
"cpu"、"wasm"、または"webgpu")。 - 必要に応じて量子化用に
dtypeまたはモジュール別 dtype マッピングを選択する。 - 高レベルの
pipelineAPI または低レベルのモデルクラスを使用して推論を実行する。 - 必要に応じて同じコードを Node.js、Deno、または Bun にデプロイする。
参考文献
- WebGPU API ドキュメント: https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API
- ONNX Runtime Web パッケージ: https://www.npmjs.com/package/onnxruntime-web
- サポートされているアーキテクチャの完全リスト: https://huggingface.co/docs/transformers.js/index#models
- 変換スクリプト: https://github.com/huggingface/transformers.js/blob/main/scripts/convert.py
この記事は、2024‑10‑22 に公開された公式 Hugging Face ブログ記事 “Transformers.js v3: WebGPU Support, New Models & Tasks, and More…” を要約しています。