はじめに
Tenstorrent社のAIアクセラレータ Blackhole™ p150 上でLlama 3.1-8B-Instructモデルを動作させる環境を構築します。Tenstorrent社が用意したプリビルドのDockerイメージを使用して、TT-Metalバックエンドを使用したvLLMサーバーをコンテナで立ち上げ、OpenAI互換のAPIエンドポイントを提供する手順を解説します。
<今回使用した弊社取り扱い製品>
対応モデル
AI アクセラレータカード Blackhole™ p150 でサポートしているネットワークモデルの一覧はこちらになります。
(2025年12月18日 時点)
| LLMs | Speech-to-Text | Diffusion Models | Classification models | Segmentation | NLPs |
| Llama 3.1 8B | Whisper (distil-large-v3) | Stable Diffusion 1.4 (512x512) | ResNet-50 (224x224) | UNet - VGG19 (256x256) | Sentence-Bert (backbone: bert-base) |
| ViT-base (224x224) | UFLD - v2 (320x800) |
最新情報はこちら:tt-metal/models tenstorrent GitHub
事前準備
必須ではありませんが、今回SMCのサーバーで仮想マシンを構築して動かしました。
使用したCPU、メモリ、ストレージ、OS 情報は以下のとおりです。
CPU:x86_64 architecture x 32 コア
メモリ:128 GB (必要要件:64GB)
ストレージ:900GB (必要要件:100GB、2TB 以上推奨)
OS:Ubuntu 22.04.5 LTS
Hugging Faceから meta-llama/Meta-Llama-3.1-8B-Instruct を事前にダウンロードしておきます。このモデルは、後の手順で実際に推論を実行する際に使用します。
また、Docker環境も構築しておいてください。
さらに、Tenstorrent社の公式ドキュメントおよび技術記事を参照しながら、Tenstorrent製品に必要な専用ソフトウェアとファームウェアをインストールします。
参考:
・Installing the Tenstorrent Software Stack
本記事で使用したソフトウェア・ツールのバージョンや Docker イメージは下記のとおりです。
また、インストール時にバージョン指定した方が良いものに関しては、バージョンを指定したコマンドを使用しています。
| Device | OS | Python | Driver (TT-KMD) | Firmware (TT-Flash) | TT-SMI |
| p150 x1 | Ubuntu 22.04.5 LTS | 3.10.12 | v3.10.12 | fw_pack-18.11.0.0 (v18.11.0.0) | v3.0.30 |
| Docker イメージ |
| ghcr.io/tenstorrent/tt-inference-server/vllm-tt-metal-src-release-ubuntu-22.04-amd64:0.4.0-55fd115-aa4ae1e |
参考:
・Installing the Tenstorrent Software Stack
セットアップの流れ
環境構築は以下の3ステップで完了します。
Step1.モデル仕様ファイルの作成
Step2.Dockerイメージの取得
Step3.コンテナの起動
Step1.モデル仕様ファイルの作成
vLLMサーバーとTT-Metalの設定を記述したJSON形式のモデル仕様ファイルを用意します。
Step1-1.設定ファイル用ディレクトリの作成
設定ファイルを配置するディレクトリを作成します。
mkdir -p $HOME/ttis
Step1-2.モデル仕様ファイルの作成
次に、$HOME/ttis/model_specs.json として以下の内容でファイルを作成します。
この設定ファイルには、使用するモデルの情報、キャッシュパス、並列処理の設定などが含まれています。
注記:
ランダム文字列 の箇所は、モデルダウンロード後に実際に生成されるハッシュ値(40文字の英数字)に修正してください。
{
"model_id": "meta-llama/Meta-Llama-3.1-8B-Instruct",
"model_name": "Meta-Llama-3.1-8B-Instruct",
"source": "huggingface",
"hf_model_repo": "meta-llama/Meta-Llama-3.1-8B-Instruct",
"max_model_len": 8192,
"tensor_parallel_size": 1,
"tt_topology": "single",
"impl": {
"impl_id": "tt_llama",
"tt_metal_commit": "e771fff",
"vllm_commit": "55fd115"
},
"env_vars": {
"CACHE_ROOT": "/home/ttuser/.cache",
"TT_CACHE_PATH": "/home/ttuser/.cache/huggingface/hub/models--meta-llama--Llama-3.1-8B-Instruct/snapshots/ランダム文字列/cache",
"MODEL_WEIGHTS_PATH": "/home/ttuser/.cache/huggingface/hub/models--meta-llama--Llama-3.1-8B-Instruct/snapshots/ランダム文字列",
"LOG_LEVEL": "INFO"
},
"device_model_spec": {
"vllm_args": {
"model": "meta-llama/Meta-Llama-3.1-8B-Instruct",
"block_size": 16,
"tensor_parallel_size": 1,
"max_model_len": 8192,
"max_num_seqs": 16,
"trust_remote_code": true
}
},
"server_args": {
"trust_remote_code": true
}
}主要パラメータの説明
-
max_model_len: コンテキスト長の上限を8192トークンに設定 -
tensor_parallel_size: 単一デバイスでの実行を指定 -
max_num_seqs: 同時処理可能なシーケンス数を16に設定 -
tt_topology: Tenstorrentデバイスのトポロジー設定
Step2.Dockerイメージの取得
Tenstorrent社が用意したプリビルドのDockerイメージをプルします。このイメージにはTT-MetalバックエンドとvLLM実装が含まれており、Tenstorrentハードウェア上での推論に最適化されています。
docker pull ghcr.io/tenstorrent/tt-inference-server/vllm-tt-metal-src-release-ubuntu-22.04-amd64:0.4.0-55fd115-aa4ae1e
Step3.コンテナの起動
Tenstorrent社が用意したプリビルドのDockerイメージを使用して、vLLMサーバーを起動します。
docker run -it \
--name tt_vllm_bw--55fd115-aa4ae1e \
-p 7000:8000 \
--shm-size=4g \
--cap-add CAP_SYS_NICE \
--device /dev/tenstorrent:/dev/tenstorrent \
-v /dev/hugepages-1G:/dev/hugepages-1G \
-v $HOME/.cache:/home/ttuser/.cache \
-v $HOME/ttis/model_specs.json:/home/ttuser/model_specs.json:ro \
-e TT_MODEL_SPEC_JSON_PATH=/home/ttuser/model_specs.json \
-e CACHE_ROOT=/home/ttuser/.cache \
-e HF_TOKEN=**************** \
ghcr.io/tenstorrent/tt-inference-server/vllm-tt-metal-src-release-ubuntu-22.04-amd64:0.4.0-55fd115-aa4ae1eオプションの詳細
-
-p 7000:8000: ホストの7000番ポートをコンテナの8000番ポートにマッピング -
--shm-size=4g: 共有メモリを4GBに設定 (モデルロード時の効率化) -
--cap-add CAP_SYS_NICE: プロセス優先度の調整を許可 -
--device /dev/tenstorrent: Tenstorrentデバイスへのアクセスを付与 -
-v /dev/hugepages-1G: Huge Pagesをマウント (メモリ効率の向上) -
HF_TOKEN: Hugging Face認証トークン (Llama 3.1モデルをダウンロードする際に使用したトークンに修正してください)
初回起動時はTT-Metalのキャッシュ生成処理が走るため、サーバーが応答可能になるまで5〜10分程度かかる場合があります。ログを確認しながら完了を待ちます。
コンテナ起動後、最初にプリフィル(prefill)プロンプトを使用したチャットプログラムが自動的に実行されます。
ターミナルに表示されるログを確認し、Heartbeat Successful というメッセージが出力されていれば、vLLMサーバーは正常に起動しており、リクエストを受け付ける準備が整った状態です。
動作確認
環境構築が完了したら、別のターミナルを開いて以下の curl コマンドで推論サーバーの動作をテストできます。
curl -sS -N http://localhost:7000/v1/chat/completions \
-H "Content-Type: application/json" -d '{
"model": "meta-llama/Meta-Llama-3.1-8B-Instruct",
"messages": [
{"role": "user","content": "AIのスタートアップ、TenstorrentのNvidiaに対する優位性はどのような点があるでしょうか。メーカーが掲げている戦略面の違いなども含めて教えてください。"}
],
"max_tokens": 2048,
"stream": true
}'stream: true を指定することで、生成されたテキストがリアルタイムでストリーミング出力されます。
IPアドレスは実際のホスト環境に合わせて変更してください。
まとめ
以上の手順で、Tenstorrent社が用意したプリビルドのDockerイメージを使用することで、わずか3ステップでTenstorrent製AIアクセラレータで動くvLLMベースの推論サーバーを構築できます。
OpenAI互換のAPIエンドポイントが提供されるため、既存のアプリケーションとの統合も容易です。
TT-Metalの最適化により、効率的な推論処理が期待できます。
Tips:Tenstorrent vLLMコンテナの便利な使い方
Tenstorrent の vLLM 環境をより便利に使うための、ちょっとしたテクニックをご紹介します。
・コンテナを自動クリーンアップする
テストや一時的な利用では、コンテナが停止後も残り続けるとストレージを圧迫します。 --rm オプションを追加すれば、停止時に自動削除されて環境がクリーンに保てます。
・vLLMサーバー以外を動かしたい場合
tt-metal のサンプルや独自スクリプトを実行したいときは、コンテナを bash で起動します。
[手順]
- コンテナを /bin/bash で起動
- コンテナ内で Tenstorrent の Python 環境をアクティベート
- 好きなスクリプトを実行
実行例
# コンテナ起動(停止後自動削除) docker run -it --rm \ --name tt_vllm_bw--55fd115-aa4ae1e \ -p 7000:8000 \ --shm-size=4g \ --cap-add CAP_SYS_NICE \ --device /dev/tenstorrent:/dev/tenstorrent \ -v /dev/hugepages-1G:/dev/hugepages-1G \ -v $HOME/.cache:/home/ttuser/.cache \ -v $HOME/ttis/model_specs.json:/home/ttuser/model_specs.json:ro \ -e TT_MODEL_SPEC_JSON_PATH=/home/ttuser/model_specs.json \ -e CACHE_ROOT=/home/ttuser/.cache \ -e HF_TOKEN=**************** \ ghcr.io/tenstorrent/tt-inference-server/vllm-tt-metal-src-release-ubuntu-22.04-amd64:0.4.0-55fd115-aa4ae1e \ /bin/bash
コンテナ内で実行:
# Tenstorrent の Python 環境をアクティベート source /home/container_app_user/tt-metal/python_env/bin/activate # 好きなスクリプトを実行 python run_vllm_api_server.py