はじめに
まず、40GBサイズのLLMを同時に100〜300人のアクセスで一般公開するためのクラウドサービスの最新価格情報(2024年6月現在)まとめてみました。LLMのサーバーを一般に公開することを想定したAIサーバースペックとシステム構成を考えてみました。あくまでブレインストーミング的に考えた内容で、実際にどんな構成が適しているか?は、各々考えてみてもらえたらと思っています。
また、OpenAIを使う場合、サーバー構築コストと自前サーバーとでのどちらがよいか考えるための参考になればと思っています。
クラウドサービスまとめ
クラウドプロバイダー | インスタンス | GPU | 価格(時間又は月) | 割引プラン | URL |
---|---|---|---|---|---|
Amazon Web Services (AWS) | P4d.24xlarge | NVIDIA A100 40GB x 8 | 約\$32/h | 1年契約 約\$19/h、3年契約: 約\$11/h / スポットインスタンス | AWS EC2 P4d |
Google Cloud Platform (GCP) | a2-highgpu-8g | NVIDIA A100 40GB x 8 | 約\$30/h | 1年契約 約\$20/h、3年契約 約\$11/h | GCP A2 |
Microsoft Azure | ND96asr_A100_v4 | NVIDIA A100 40GB x 8 | 約\$19,853/m | 1年契約 約\$16,512/m、3年契約 約\$9,946/m、スポット 約\$268/m | Azure ND A100 v4 |
Lambda Labs | 8x NVIDIA A100 SXM | NVIDIA A100 40GB x 8 | \$10.32/h | - | Lambda Labs |
CoreWeave | A100 80GB NVLINK | NVIDIA A100 80GB x 1 | \$2.21/h | - | CoreWeave |
GPUSOROBAN | t40-8-a | NVIDIA A100 40GB x 8 | ¥1,320,184/m | - | GPUSOROBAN |
ConoHa VPS | H100 | NVIDIA H100 80GB x 1 | ¥1,398/h | - | ConoHa VPS |
WebARENA IndigoGPU | t80-1-a | NVIDIA A100 80GB x 1 | ¥370/h | - | WebARENA IndigoGPU |
Alibaba Cloud | ecs.ebmgn7e.32xlarge | NVIDIA A100 40GB x 8 | 約\$43/時間 | - | Alibaba Cloud |
Oracle Cloud | BM.GPU.A100-v2.8 | 8x NVIDIA A100 80GB Tensor Core | ¥560/h | - | Oracle Cloud |
サーバー構成案
単一サーバー構成
- メモリ: 512GB
- CPU: AMD EPYC 7742 (64コア、128スレッド) または Intel Xeon Platinum 8275L
- GPU: 2x NVIDIA A100 40GB または 1x NVIDIA H100 80GB
分散構成(複数サーバーで負荷分散)
サーバー1: モデルサーバー
- メモリ: 1TB
- CPU: Dual AMD EPYC 7742
- GPU: 4x NVIDIA A100 40GB
サーバー2: 推論サーバー(2台)
- メモリ: 512GB
- CPU: Dual AMD EPYC 7742
- GPU: 2x NVIDIA A100 40GB
ネットワークとストレージ
- ネットワーク: 高速10Gbps以上の接続
- ストレージ: 高速NVMe SSD、OSとデータストレージ用に分割
全体のシステム構成案
以下、cloudflare load balancerありバージョンの一例です。
Cloudflare Load Balancerを使用しなくても、オートスケール機能を持つクラウドプラットフォームでスケーラブルなアーキテクチャを実現することは可能か思いましたが、ロードバランサーとオートスケールのメリット考察してみました。
ロードバランサーの利点
-
フェイルオーバー:
- サーバーがダウンした際に自動的にトラフィックを他のhealthyなサーバーにリダイレクトしする
-
トラフィック分散:
- トラフィックを複数のサーバーに均等に分散して、特定のサーバーに負荷が集中するのを防ぐ
-
セッションアフィニティ:
- ユーザーのセッションを同じサーバーに維持することで、状態を保持するアプリケーションのパフォーマンスを向上させる
-
高可用性:
- 複数のデータセンターやリージョンにわたってトラフィックを分散することで、高い可用性を確保できる
オートスケーリングの利点
-
コスト効率:
- トラフィックの増減に応じて、自動的にサーバーを追加または削減することで、必要なリソースのみを使用し、コストを最適化ができる(スポットインスタンスも使えるなど)
-
柔軟性:
- 予期しないトラフィックの急増(スパイク)にも対応できる
-
自動管理:
- クラウドプロバイダーが提供するオートスケーリング機能を使用することで、手動管理が不要になる
- ロードバランサーありの構成: より高度なトラフィック管理、高可用性、フェイルオーバー機能が必要な場合に適している
- ロードバランサーなしの構成: オートスケーリング機能を利用してコスト効率と柔軟性を重視する場合に適していますが、トラフィック管理やフェイルオーバー機能はクラウドプロバイダーのオートスケーリング機能に依存する
状況に応じて、ロードバランサーを使用するかどうかを決定するのが良いかもしれないが、クラウド使うなら、ロードバランサーは使ったほうが得策かなというのが、今のところの考えです。
openaiのAPIを使った場合の見積もり
念の為、サーバーを構築せず、月5000ドルの予算でのリクエスト数を見積もりました。(RAGコンテキストを加味、1トークン ≈ 1.5〜2文字)
前提条件
-
日付: 202406時点
-
モデル: GPT-4o
-
- 入力(Prompt)トークン: $5.00/1Mトークン
- 出力(Completion)トークン: $15.00/1Mトークン
-
入力文字数: 100文字
-
プロンプトコンテキスト: 平均600文字(基本の200文字 + RAGで追加される400文字)
-
1トークン ≈ 1.5〜2文字
トークン数の計算
- 100文字 ≈ 50〜67トークン(1トークン ≈ 1.5〜2文字)
-
プロンプトコンテキスト(入力と出力の合計):
- 入力: 600文字 ≈ 300〜400トークン
- 出力: 100文字 ≈ 50〜67トークン
-
トークン換算:
- 入力: 300〜400トークン
- 出力: 50〜67トークン
- 合計トークン: 350〜467トークン(入力 + 出力)
1リクエストあたりのコスト計算
- 入力トークンコスト: 300〜400トークン × $5.00/1Mトークン = $0.0015〜$0.002
- 出力トークンコスト: 50〜67トークン × $15.00/1Mトークン = $0.00075〜$0.001005
- 1リクエストの合計コスト: $0.00225〜$0.003005
月5000ドルの予算でさばけるリクエスト数
- 月予算: $5000
- 1リクエストのコスト: $0.00225〜$0.003005
- 最大リクエスト数: $5000 ÷ $0.00225 = 2,222,222〜$5000 ÷ $0.003005 ≈ 1,664,111リクエスト
月5000ドルの予算で、100文字程度の日本語のやりとりに加えてRAGなどで取得した400文字のコンテキスト情報を使用する場合、約1,664,111〜2,222,222リクエストを処理することができるかなと見積もってみました。もしかしたら、交渉とかできたらもっと安くなるのかなとも思ったりしています。
参考リンク:
GPT-4oの価格について - Zenn
OpenAI API pricing
まとめ
今回、サーバー構築する場合の予算感をもちたいと思い調べてみました。550万円から100万円ぐらいを見積もると良いという印象です。openaiのAPIを使う場合、多分、1M/req〜2m/reqいかない場合は、openaiを使ったほうが良い気もしますが、openaiともう少し安めのサーバーで動かしたLLMと連動させてみるというのもありなのかなと思いました。
いずれにせよ、利用者数とプロンプトの長さ(コンテキストを含む)を見積もってAIプラットフォームに依存するか、自前でサーバーを構築するか?考えるとよいかなと思いました。
あと、自前サーバーだと保守コストなど色々とコストが掛かるのは確かで、私個人エンジニアとしては楽しみの領域なので、サーバーを触ることは問題ないのですが、手間といえば手間かなと思いました。
今のところ一番の決めては、GPT-4oがだいぶおりこうさんというところにあるかなと思います。日進月歩している技術なので、今後どうなるか予想もつきませんが、ウォッチングしていきたいと思っています。
色々と悩んでみようかなと思います。