ローカルLLMモデルのベンチマーク
背景
私はアナーキー (YC W23)でのパートタイムエンジニアインターンの間にLLMスピードベンチマーク(LLMSB)を構築しました。LLMSBはLLMモデルのパフォーマンスを評価するためのベンチマークツールです。これはHuggingFaceのtransformersライブラリを使用してLLMモデルを読み込み、実行し、以下を測定します:
- 総実行時間
- トークン毎秒
- 一般的なハードウェア仕様
- CPU使用率(現在の周波数とコアの使用率%の推移)
- RAM使用率(RAMとスワップの推移)
- GPU使用率(負荷、メモリ使用量、温度の推移)
こちらは、codellama-13b-oasst-sft-v10モデルがH100で実行されたベンチマークの例です。私は個人的に8GBのVRAMを持つNvidia RTX 2070 Tiを所有しています。残念ながら、ほとんどの現代のLLMモデルには8GBのVRAMではモデルとインターフェースするには不十分です。このため、私はRunPodを使用してGPUを「レンタル」し、特定のモデルでベンチマークを実行しました。
これがLLMSBの背景/起源の話です。プロジェクトはオープンソースであるため、コードはこちらで見ることができます。以下に、リポジトリからのREADMEを含めましたので、ぜひご覧ください。
概要
🚧 LLMスピードベンチマーク(LLMSB)は現在ベータ版(v0)です。これを本番環境で使用しないでください、または自己責任で使用してください。まだいくつかの不具合を解消し、機能を改善しています。バグに遭遇したり、提案がある場合は、ISSUESに報告してください。あなたのフィードバックは非常に貴重です!
LLMスピードベンチマーク(LLMSB)は、異なるハードウェアプラットフォームにおけるLLMモデルのパフォーマンスを評価するためのベンチマークツールです。その最終的な目標は、さまざまなシステムにおけるLLMモデルのパフォーマンスを詳細にまとめた包括的なデータセットを作成し、ユーザーがプロジェクトに最適なLLMモデルをより効果的に選択できるようにすることです。
制限事項
LLMSBはv0であるため、制限があります:
- Debianベースのオペレーティングシステムでのみ実行するように設計されており、つまりWindowsでは実行できません。これは、LLMSBが内部でメトリクスを収集するためにneofetchとnvidia-smiを使用しており、ファイルパスのロジックがUnixオペレーティングシステムに基づいているためです。
- メトリクスが記録される方法のため、メトリクスコレクターが収集を行うのに最大1秒かかることがあります。これは、最速であれば、1秒ごとにハードウェアメトリクスを収集できることを意味します。
- LLMSBはモデルを読み込み、実行するためにHuggingFaceのみを使用します。これは今のところ機能しますが、目標はLLMSBがHuggingFaceだけでなく複数のフレームワークをサポートすることです。
- 現在、すべてのモデルはsrc/hf.pyにあるrun_llm()関数で提示されたロジックを通じて実行されており、AutoTokenizer()およびAutoModelForCausalLM()関数を使用してモデルを読み込み、実行します。これは機能しますが、特定のモデルを構成/最適化する方法を制限します。これを考慮して、人気のある各モデルのために別々のクラスを作成し、HuggingFaceのモデル固有のクラス(LlamaTokenizerやLlamaForCausalLMなど)を利用することを目指しています。
- LLMSBは一般的で高レベルのメトリクスのみを収集します。将来的には、より低レベルのメトリクスを収集したいと考えています。これは部分的にPytorchのプロファイララッパーを使用することで実現できると考えています。
サンプル出力
2023年11月22日
LLMSBはRunPodを通じてL40およびH100 GPUで実行/テストされました。これらのベンチマークでは、llama-2-7b-hf、codellama-13b-oasst-sft-v10、およびmpt-7bモデルがテストされました。結果はこちらで確認できます。エラーや問題が見つかった場合は、ISSUESに報告してください。
セットアップ
-
Python環境を作成し、アクティブにします:
python3 -m venv env source env/bin/activate -
パッケージ依存関係をインストールします(APTを使用):
apt -y update apt install -y vim apt install -y neofetch -
Python依存関係をインストールします:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
Pytorchをインストールします:
# Linux用のCUDA 12.1を使用してpytorchの安定版をインストール: pip3 install torch torchvision torchaudio -
LLM-VMをインストールします:
pip install llm-vm -
(オプション)LLAMAのようなモデルを使用する場合は、HuggingFaceのアクセストークンが必要です。アクセストークンをこちらで設定し、次のコマンドを実行してトークンをコンソールに保存します:
huggingface-cli login
実行方法
-
セットアップセクションに記載されている手順を完了します。
-
セットを構成するには、次のパラメータを持つjsonファイルを作成する必要があります(以下は例です):
- 注意:すべてのフレームワークが同じパラメータをサポートしているわけではありません
{ "model": "bigscience/bloom-560m", # HuggingFace上のモデルのパス/リポジトリ (https://huggingface.co/models) "prompt": "Hello World!", # LLMモデルに入力したいプロンプト "device": "cuda:0", # LLMモデルを実行したいデバイス(GPU/CPU) "max_length": 50, # 生成されるトークンの最大長 "temperature": 0.9, # LLMモデルの温度値 "top_k": 50, # LLMモデルのtop-k値 "top_p": 0.9, # LLMモデルのtop-p値 "num_return_sequences": 1, # モデルの独立して実行されるインスタンスの数 "time_delay": 0, # メトリクスコレクターが各反復ごとに待機する時間(秒) "model_start_pause": 1, # テストがLLMモデルを実行する前に待機する時間(秒) "model_end_pause": 1 # テストがLLMモデルの実行後に待機する時間(秒) "framework": "llm-vm" # モデルを実行するために使用したいフレームワーク/ライブラリの名前 } -
前のステップで作成した設定ファイルへのパスを使用して、次のコマンドを実行してベンチマークを開始します(いずれかのオプションを選択):
# 1つのベンチマークを実行 python3 run.py --config ./configs/llmvm_test.json # 複数のベンチマークを実行(この場合は3つ) python3 run.py --config ./configs/llmvm_test.json --loops 3 -
ベンチマークの実行が完了したら、次のようなファイルで最終結果を確認します:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
RunPodの設定:
-
RunPodを設定し、SSH証明書/キーを設定し、ポッドを起動します。ポッドにはRunPodのコンソールページからアクセスできます。
-
「接続」ボタンをクリックしてSSH接続情報を取得します。この情報は次のようになります:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
このコマンドは次のようにフォーマットされます:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
ステップ#2のコマンドを使用して、ポッドにSSH接続し、選択したGPUを使用できるはずです。
-
ポッドからローカルマシンにファイルをコピーしたい場合は、次の形式のコマンドを実行します(これはステップ#2で示された変数を参照しています):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>-
ここにそのようなコマンドの例があります:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
ポッドの使用が終わったら、シャットダウンまたは一時停止します。ただし、一時停止すると、料金が発生することに注意してくださいが、かなり少なくなります。
参考資料:
- プロンプトデータセット:awesome-chatgpt-prompts、bigscience/P3、およびwriting-prompts
- LLMパラメータについてもっと学ぶ
- クラウドベースのLLMモデルをベンチマークするための優れたベンチマーク
- クールなLLMインテリジェンスリーダーボード:FastEvalおよびopen_llm_leaderboard