はじめに
vLLM を Tenstorrnet 社の 画像や生成AIに特化したアクセラレータカード Wormhole™ N300 で動かしてみました。
既存の GPU カードと比較してワットあたりのパフォーマンスやコストパフォーマンスが優れた製品となっておりますので、興味がある方はご覧ください。
様々なネットワークモデルに対応しておりますが、今回は Llama3.1 70B を使用しました。
<今回使用した弊社取り扱い製品>
対応モデル
AI アクセラレータカード Wormhole™ N300 でサポートしているネットワークモデルの一覧はこちらになります。
(2025年3月13日 時点)
LLM | CNN | NLP |
Llama 3.1 8B | ResNet-50 | BERT-Large |
Llama 3.1 70B | ResNet-50 | |
Llama 3.2 1B | ViT | |
Llama 3.2 3B | Stable Diffusion 1.4 | |
Llama 3.2 11B Vision | YOLOv4 | |
Qwen 2.5 7B | SegFormer Semantic Segmentation | |
Qwen 2.5 72B | Stable Diffusion 3.5 medium | |
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 | 180 | 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 | 180 | 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 | 464 |
最新情報はこちら:https://github.com/tenstorrent/tt-metal
事前準備
必須ではありませんが、今回SMCのサーバーで仮想マシンを構築して動かしました。
使用したCPU、メモリ、ストレージ、OS 情報は以下のとおりです。
CPU:x86_64 architecture x 32 コア
メモリ:512 GB
ストレージ:700GB (2TB 以上推奨)
OS:Ubuntu 20.04.6 LTS
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 20.04.6 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.ドライバやファームウェアなどのインストール
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
下記のようなメッセージ表示されれば TT-Flash ファームウェアのインストールは成功
Step1-4.TT-SMI / 診断ツール
TT-SMI のインストール
cd ~
git clone https://github.com/tenstorrent/tt-smi.git
cd tt-smi
pip install .
リセット
tt-smi -r 0,1,2,3
イニシャライズ後、Detected Chips: 8 と表示されれば成功
デバイスが認識されるかどうかを確認
tt-smi
下記のような画面が表示されれば成功
キーボードの q を押下し、画面を抜ける
Step2.TT-topology mesh / カードを複数枚使うときのトポロジー設定
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 mesh_layout.png
下記のようなメッセージが表示されれば実行は完了
layout.png を開いて下記のような画像であれば設定は成功
Step3.Hugepage 設定
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 CLIをセットアップ
huggingface-cli login
のあと、huggingfaceページより取得したTokenを入力
モデルのダウンロードを行う
huggingface-cli download meta-llama/Llama-3.1-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"
を追記
追記前)
追記後)
Step5.vLLM サーバーの起動
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.クライアントからリクエスト
・別のターミナルで 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 に設定しているので、下記のように回答がトークン毎に出力される
性能としては 14.9 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.1 70B を試しましたが、今回使用したコンテナは、DeepSeek-R1-Distill-Llama-70B や Qwen2.5-72B-Instruct にも対応していますので、ご希望がございましたらぜひご連絡下さい。