はじめに
Chituは、清華大学のPACMANチームによって開発されたオープンソースの推論フレームワークで、「Red Rabbit」と呼ばれ、大規模な言語モデルを実行するために特別に設計されています。ChituはNVIDIAのGPUや国産チップなど様々なハードウェアをサポートし、スタンドアロンから大規模クラスタまで利用できる。例えば、A800でDeepSeek-671Bを実行すると、半分のGPUでvLLMの3倍以上高速になる。コードはGitHubで公開されており、企業や個人が無料でダウンロードして使用することができる。これは本番環境用のすぐに使えるツールで、コストを節約したいがパフォーマンスも欲しいというチームに適している。
機能一覧
- FP8とBF16のモデル推論をサポートし、古いGPUや国産チップでも低コストで高性能に動作する。
- 純粋なCPUからNVIDIA A800、H20などのGPU、大規模クラスタまで、幅広いハードウェアに対応。
- CUDA Graphで推論速度を最適化し、1回のリクエストでより高速な出力を実現。
- HTTPリクエストによってモデルを直接呼び出すことができるサービスインターフェースを提供します。
- マルチノード分散推論をサポートし、大量のタスク処理に適しています。
- 企業が必要に応じて変更したり最適化したりできるオープンソースのコード。
ヘルプの使用
設置プロセス
Chituのインストールはそれほど複雑ではありませんが、いくつかの準備が必要です。以下はその詳細な手順である:
- 環境を整える
- システム:Ubuntu 22.04推奨、NVIDIA GPU搭載マシン(例:A800またはH20)。
- ソフトウェア:Git、Python 3.10、CUDA 12.1(GPUのバージョンに合わせて調整)、PyTorch 2.1をインストール。
- コマンドの例:
sudo apt update && sudo apt install -y git python3.10 python3-pip pip install -U torch==2.1 --index-url https://download.pytorch.org/whl/cu121
- ダウンロードコード
- Gitを使ってChituのコードをローカルにクローンする:
git clone --recursive https://github.com/thu-pacman/chitu cd chitu
- Gitを使ってChituのコードをローカルにクローンする:
- 依存関係のインストール
- 必要なPythonパッケージとコンパイル環境をインストールする:
pip install -r requirements-build.txt pip install flash-attn
- 必要なPythonパッケージとコンパイル環境をインストールする:
- コンパイルとインストール
- コンパイル・パラメーターを設定し(GPUに応じてTORCH_CUDA_ARCH_LISTを調整する、例えばA800の場合は8.0)、コンパイルする:
TORCH_CUDA_ARCH_LIST=8.0 CHITU_SETUP_JOBS=4 MAX_JOBS=4 pip install --no-build-isolation .
- コンパイル・パラメーターを設定し(GPUに応じてTORCH_CUDA_ARCH_LISTを調整する、例えばA800の場合は8.0)、コンパイルする:
- インストールの確認
- テストをして問題がないことを確認する:
torchrun --nproc_per_node 1 test/single_req_test.py
- テストをして問題がないことを確認する:
使用方法
Chituがロードされたら、コマンドラインからサービスを開始したり、1つのテストを実行したりできます。その方法は以下の通り:
推論サービスの開始
- モデルパスの設定
- ローカル・ディレクトリにモデル・ファイル (DeepSeek-R1 など) を準備します。
/data/DeepSeek-R1
). - 編集コマンドで
models.ckpt_dir
パラメータはモデルのパスを指す。
- ローカル・ディレクトリにモデル・ファイル (DeepSeek-R1 など) を準備します。
- サービス開始
- ポート21002でリッスンしているtorchrunでスタンドアロンサービスを開始する:
export WORLD_SIZE=1 torchrun --nproc_per_node 1 chitu/serve.py \ serve.port=21002 \ models=DeepSeek-R1 \ models.ckpt_dir=/data/DeepSeek-R1 \ infer.use_cuda_graph=True \ request.max_new_tokens=100
- ポート21002でリッスンしているtorchrunでスタンドアロンサービスを開始する:
- 試験サービス
- curlでリクエストを送信し、モデルが適切に応答するかどうかを確認する:
curl localhost:21002/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"messages": [{"role": "user", "content": "你好,Chitu 是什么?"}]}'
- 返される結果はJSON形式で、モデルの答えを含みます。
- curlでリクエストを送信し、モデルが適切に応答するかどうかを確認する:
推論テストの実施
- サービスを開始したくない場合は、モデルの出力をテストするだけでよい:
torchrun --nproc_per_node 1 test/single_req_test.py \ models=DeepSeek-R1 \ models.ckpt_dir=/data/DeepSeek-R1 \ request.max_new_tokens=64
- 出力はターミナルに表示され、モデルが何を生成したかを教えてくれる。
マルチノード分散推論
- 複数のマシンを準備する
- Chituと依存関係が各マシンにロードされ、モデルファイルが共有ストレージ上にあることを確認します。
- 分散サービスの開始
- それぞれ8GPUを搭載した2台のマシンで実行する:
torchrun --nnodes 2 --nproc_per_node 8 test/single_req_test.py \ request.max_new_tokens=64 \ infer.pp_size=2 \ infer.tp_size=8 \ models=DeepSeek-R1 \ models.ckpt_dir=/data/DeepSeek-R1
- それぞれ8GPUを搭載した2台のマシンで実行する:
- 効果の確認
- マルチノードの実行後、出力はシングルマシンよりも速くなり、大量のリクエストを処理するのに適している。
注目の機能操作
FP8モデルでコストとスピードを節約
- チチュはFP8形式のモデルをサポートしており、BF16よりもGPUの使用量が少なく高速だ。
- 操作:起動時に追加
infer.soft_fp8=True
例えば、モデルがFP8形式の場合、モデルはFP8形式でなければならない。例えばtorchrun --nproc_per_node 1 chitu/serve.py \ serve.port=21002 \ models=DeepSeek-R1 \ models.ckpt_dir=/data/DeepSeek-R1 \ infer.soft_fp8=True
CUDA Graphによる高速化
- 単一のリクエストは、パラメータ
infer.use_cuda_graph=True
. - テスト効果:1つの推論を実行し、追加の有無による速度の違いを比較する。
パフォーマンステスト
- Chituには、スループットとレイテンシーを測定するベンチマークツールが付属している:
python benchmarks/benchmark_serving.py \ --model "deepseek-r1" \ --iterations 10 \ --seq-len 10 \ --base-url http://localhost:21002
- の数が表示される。 トークン の数字が、配分を最適化するのに役立つ。
ほら
- 複数のノードを使用する場合、ネットワークは安定していなければ低下する。
- GPUメモリが不足するとOOMエラーが発生する可能性があります。
infer.max_seq_len
またはノード数が少ない。 - 国内チップのサポートはまだ最適化の過程にあり、適応するためにコードを変更する必要があるかもしれない。
Chituの使い方は難しくなく、手順に従って操作すればすぐに使い始めることができる。ドキュメントやコミュニティもGitHubにあるので、質問があればissueを出すことができる。