はじめに
vLLM を Tenstorrnet 社の 画像や生成AIに特化したアクセラレータカード Wormhole™ N300 で動かしてみました。
既存の GPU カードと比較してワットあたりのパフォーマンスやコストパフォーマンスが優れた製品となっておりますので、興味がある方はご覧ください。
様々なネットワークモデルに対応しておりますが、今回は Llama3.3 70B を使用しました。
<今回使用した弊社取り扱い製品>
対応モデル
AI アクセラレータカード Wormhole™ N300 でサポートしているネットワークモデルの一覧はこちらになります。
(2025年4月7日 時点)
LLM | CNN | NLP | Speech-to-Text |
Llama 3.1 8B | ResNet-50 | BERT-Large |
Whisper(distil-large-v3) |
Llama 3.1 70B | ViT | ||
Llama 3.2 1B | Stable Diffusion 1.4 | ||
Llama 3.2 3B | YOLOv4 | ||
Llama 3.2 11B Vision | SegFormer Semantic Segmentation | ||
Qwen 2.5 7B | Stable Diffusion 3.5 medium | ||
Qwen 2.5 72B | |||
Mistral 7B | |||
Mixtral 8x7B | |||
Mamba 2.8B | |||
Falcon 7B | |||
Falcon 40B | |||
QwQ 32B | |||
DeepSeek R1 Distill Llama 3.3 70B |
最新情報はこちら:https://github.com/tenstorrent/tt-metal
また、Wormhole™ n300 PCIe ボード x 4 構成をサポートしているモデルの性能は次のとおりです。
Model | Batch | ttft (ms) | t/s/u |
Target t/s/u |
t/s |
Llama 3.1 70B (TP=8) | 32 | 159 | 15.2 | 20 | 486.4 |
Qwen 2.5 72B (TP=8) | 32 | 333 | 14.5 | 20 | 464 |
Mixtral 8x7B (TP=8) | 32 | 227 | 15.2 | 33 | 486.4 |
DeepSeek R1 Distill Llama 3.3 70B (TP=8) | 32 | 159 | 15.2 | 20 | 486.4 |
Falcon 7B (DP=8) | 256 | 88 | 15.5 | 26 | 3968 |
Falcon 40B (TP=8) | 32 | 5.3 | 36 | 169.6 | |
QwQ 32B (TP=8) | 32 | 133 | 25.2 | 30 | 464 |
最新情報はこちら:https://github.com/tenstorrent/tt-metal
事前準備
使用したCPU、メモリ、ストレージ、OS 等の情報は以下のとおりです。
CPU:2x Intel® Xeon® Silver 4309Y (各 8C/16T、最大 2.8GHz、105W)
メモリ:512GB (16x32GB) DDR4-3200 ECC RDIMM
ストレージ:3.8TB U.2 NVMe
OS:Ubuntu 22.04.5 LTS
Tensix プロセッサ:
4x Tenstorrent Wormhole™ n300s Tensix プロセッサ
4x Warp 100 インターコネクト
ケーブル:2x QSFP-DD 400GbE ケーブル
python 3.8.10 を使用します。下記の手順では miniconda の python 3.8.10 の環境を使用しました。
また、docker の環境も用意しておいて下さい。
本記事で使用したソフトウェア・ツールのバージョンは下記のとおりです。
また、インストール時にバージョン指定した方が良いものに関しては、バージョンを指定したコマンドを使用しています。
Device | OS | Python |
Driver (TT-KMD) |
Firmware (TT-Flash) |
TT-SMI | TT-Topology |
n300 x4 | Ubuntu 22.04.5 LTS | 3.8.10 | v1.29 | fw_pack-80.15.0.0 (v80.15.0.0) | v3.0.10 |
v1.2.0, mesh コンフィグ |
vLLM docker image |
tt-inference-server/tt-metal-qwen25-72b-deepseekr1-llama3-70b-src-base-vllm:hf-llama-b9564bf |
参考:
・Tenstorrent tt-inference-server
環境構築手順
大まかな流れは次の通りです。
Step1.ドライバやファームウェアなどのインストール
Step2.TT-topology mesh / カードを複数枚使うときのトポロジー設定
Step3.Hugepage 設定
Step4.モデルのダウンロードと設定
Step5.vLLM サーバーの起動
Step6.サーバーへのクエリ
Step1.ドライバやファームウェアなどのインストール
このステップでは、Tenstorrent のシステム依存関係、カーネル・モード・ドライバー、ファームウェアおよびシステム・マネジメント・インターフェースのインストールやアップデートする手順を説明します。
Step1-1.システム依存関係等のインストール
wget https://raw.githubusercontent.com/tenstorrent/tt-metal/refs/heads/main/install_dependencies.sh
chmod a+x install_dependencies.sh
sudo ./install_dependencies.sh
システムのリブート
sudo reboot
Step1-2.TT-KMD / カーネルモードドライバーのインストール
TT-KMD のインストール
cd ~
sudo apt install dkms
git clone https://github.com/tenstorrent/tt-kmd.git
cd tt-kmd
git checkout -b ttkmd-1.29 ttkmd-1.29
sudo dkms add .
sudo dkms install tenstorrent/1.29
sudo modprobe tenstorrent
sudo lsmod | grep tenstorrent
cd ..
下記のようなメッセージ表示されればインストールは成功
Step1-3.TT-Flash / ファームウェア書き込みツール
TT-Flash のインストール
git clone https://github.com/tenstorrent/tt-flash.git
cd tt-flash
pip install .
TT-Flash のバージョンの確認
tt-flash --version
下記のようなメッセージ表示されれば tt-flash のインストールは成功
TT-Flash ファームウェア のインストール
wget https://github.com/tenstorrent/tt-firmware/raw/main/fw_pack-80.15.0.0.fwbundle
tt-flash --fw-tar fw_pack-80.15.0.0.fwbundle
もし下記のようなエラーが発生した場合は、--force をつけて実行
tt-flash --fw-tar fw_pack-80.15.0.0.fwbundle --force
下記のようなメッセージ表示されれば TT-Flash ファームウェアのインストールは成功
Step1-4.TT-SMI / 診断ツール
TT-SMI のインストール
pip install git+https://github.com/tenstorrent/tt-smi
リセット
tt-smi -r 0,1,2,3
イニシャライズ後、Detected Chips: 8 と表示されれば成功
デバイスが認識されるかどうかを確認
tt-smi
下記のような画面が表示されれば成功
キーボードの q を押下し、画面を抜ける
Step2.TT-topology mesh / カードを複数枚使うときのトポロジー設定
Tenstorrent には、AI ワークロードを複数のカードを用いて効率的に処理するために TT-topology という仕組みがあります。
このステップでは Tenstorrent 社が Llama 3.3 70B 推論処理を動かすうえで想定している接続構成をセットアップする手順を説明します。
TT-Topology mesh の設定
cd ~
git clone https://github.com/tenstorrent/tt-topology.git
cd tt-topology
sudo apt install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
pip3 install --upgrade pip
pip3 install .
tt-topology -l mesh -p layout.png
下記のようなメッセージが表示されれば実行は完了
layout.png を開いて下記のような画像であれば設定は成功
Step3.Hugepage 設定
このステップでは、大規模データ処理を効率よく行うために、より大きなメモリページを使用する Hugepages を設定する手順を説明します。
deb のインストール
cd ~
wget https://github.com/tenstorrent/tt-system-tools/releases/download/upstream%2F1.1/tenstorrent-tools_1.1-5_all.deb
sudo dpkg -i tenstorrent-tools_1.1-5_all.deb
サービスのスタート
sudo systemctl enable --now tenstorrent-hugepages.service
sudo systemctl enable --now 'dev-hugepages\x2d1G.mount'
システムのリブート
sudo reboot
Step4.モデルのダウンロードと設定
このステップでは、HuggingFace のモデルのダウンロード、次のステップでモデルを使用するための修正の手順を説明します。
・HuggingFace CLIをセットアップ
huggingface-cli login
のあと、huggingfaceページより取得したTokenを入力
モデルのダウンロードを行う
huggingface-cli download meta-llama/Llama-3.3-70B-Instruct
無事ダウンロードが完了
・configへの追記
{PWD}/.cache/huggingface/hub/models--meta-llama--Meta-Llama-3.1-70B-Instruct/snapshots/(ランダム文字列)/config.json
の末尾に、
"_name_or_path": "Llama3.1-70B"
を追記
追記前)
追記後)
モデルのダウンロード先のディレクトリ名をリネーム
models--meta-llama--Llama-3.3-70B-Instruct
から
models--meta-llama--Llama-3.1-70B-Instruct
に変更
cd ~/.cache/huggingface/hub
mv models--meta-llama--Llama-3.3-70B-Instruct models--meta-llama--Llama-3.1-70B-Instruct
cd ~/
Step5.vLLM サーバーの起動
このステップでは、tenstorrent があらかじめ用意している vllm の dockerイメージ のpull、コンテナの環境変数のファイルの用意と起動の手順を説明します。
・tt-metal ベースの vLLM 入りの docker イメージの pull
sudo docker pull ghcr.io/tenstorrent/tt-inference-server/tt-metal-qwen25-72b-deepseekr1-llama3-70b-src-base-vllm:hf-llama-b9564bf
・環境変数のファイルの設定
コンテナを起動するときの環境変数設定のファイルを用意
ATT0314.env_L370B の中身はこちら
HF_MODEL_ID=meta-llama/Meta-Llama-3.1-70B-Instruct
LLAMA_DIR=/home/ttuser/.cache/huggingface/hub/models--meta-llama--Llama-3.1-70B-Instruct/snapshots/"Your Random String in HF Model"
HF_MODEL=/home/ttuser/.cache/huggingface/hub/models--meta-llama--Llama-3.1-70B-Instruct/snapshots/"Your Random String in HF Model"
VVLLM_ALLOW_LONG_MAX_MODEL_LEN=1
MESH_DEVICE=T3K_LINE
WH_ARCH_YAML=wormhole_b0_80_arch_eth_dispatch.yaml
HUGGING_FACE_HUB_TOKEN="Your HF Token"
なお、この後に実行するコンテナの起動のコマンドでは、用意した環境変数のファイルをここに保存
envs/ATT0314.env_L370B
・コンテナの起動
sudo docker run -it --cap-add=sys_nice --env-file envs/ATT0314.env_L370B \
--shm-size=4g \
-v /dev/hugepages-1G:/dev/hugepages-1G \
-v /home/"your user name"/.cache:/home/ttuser/.cache \
--device /dev/tenstorrent \
--publish 7000:8000 \
ghcr.io/tenstorrent/tt-inference-server/tt-metal-qwen25-72b-deepseekr1-llama3-70b-src-base-vllm:hf-llama-b9564bf
初回はキャッシュの生成のため時間がかかる
うまくvllmサーバーを起動出来れば下記のようなメッセージが表示される
Step6.クライアントからリクエスト
このステップでは、OpenAI互換APIを使用して、vllmサーバーへアクセスする手順を説明します。
・別のターミナルで Curl コマンドを実行
curl -N http://localhost:7000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Meta-Llama-3.1-70B-Instruct",
"prompt": "AI のスタートアップ、Tenstorrent の Nvidia に対する優位性はどのような点があるでしょうか。メーカーが掲げている戦略面の違いなども含めて教えてください。",
"max_tokens": 2048,
"temperature": 1,
"top_p": 0.9,
"top_k": 10,
"stream": true
}'
うまくいけば、stream を true に設定しているので、下記のように回答がトークン毎に出力される
性能としては 15.5 tokens/s/u でしたので、公表値とほぼ同じ結果となりました。
stream を false に変更して実行
curl -N http://localhost:7000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Meta-Llama-3.1-70B-Instruct",
"prompt": "AI のスタートアップ、Tenstorrent の Nvidia に対する優位性はどのような点があるでしょうか。メーカーが掲げている戦略面の違いなども含めて教えてください。",
"max_tokens": 2048,
"temperature": 1,
"top_p": 0.9,
"top_k": 10,
"stream": false
}'
しばらくして、下記のように回答がまとめて返ってくる
まとめ
Llama 3.3 70B を試しましたが、今回使用したコンテナは、DeepSeek-R1-Distill-Llama-70B や Qwen2.5-72B-Instruct にも対応していますので、ご希望がございましたらぜひご連絡下さい。