
前回はオープンLLMの解説と実際に動作をさせてみて回答を生成しました。今回はオープンLLMを動作させる環境を検証しながら考えます。
- ライター:荒牧 大樹
- 2007年ネットワンシステムズ入社し、コラボレーション・クラウド製品の担当を経て現在はAI・データ分析製品と技術の推進に従事。最近では次世代の計算環境であるGPU・FPGA・量子コンピュータに注目している。
目次
【更新日】2023/11/8
オープンLLMを動作させてみる
クラウド環境とオンプレミス環境を用意して、LLaMA2を利用して文章生成のテストを行いました。
クラウドでのオープンLLMの動作について
今回はDatabricks上でLlama2を読み込んで、LLMでの文章作成を行いました。文章生成を動作の確認についてはDatabricksが提供しているGitHub上の以下のサンプルのコードを利用しました。AWS上のクラスターのノードは推奨にある、g5.2xlargeを利用しました。GPUとしてはA10が利用されています。
https://github.com/databricks/databricks-ml-examples/tree/master/llm-models/llamav2
オンプレミスでのオープンLLMの動作について
NVIDIAのA100 80G(以下 A100)が搭載されたサーバを用意しました。NVIDIAのNVAIを使って、様々なGPUメモリでの環境を用意して動作確認を行いました。Databricks上で利用したのと同様のPythonスクリプトをJupyter-notebook上で実行して動作確認をしています。実行するに辺り、以下のパッケージを追加でpipコマンドを利用してインストールしました。
huggingface_hub, transformers, ipywidgets, torch, matplotlib, xformers, accelerate
動作検証の結果
実機でLlama 2を動作させてみて、以下動作環境と文章生成の性能について以下がわかりました。
オープンLLMの動作環境について
オープンLLMの動作環境について、モデルサイズとメモリ使用量の関係や、GPUが複数毎用意されている場合について検証しました。
モデルサイズと使用メモリ
モデルのサイズによって、GPUのメモリに必要なサイズが変わってきます。NVIDIAのサーバ向けGPUのA10で20Gのメモリ、A100で80Gのメモリを搭載しています。Llama 2のモデルサイズは7B/13B/70Bのモデルサイズが用意されています。実機を使って実際のモデルを動作させて、nvidia-smiコマンドでメモリの使用量を確認しました。結果は以下の表にまとめています。
モデルサイズ |
7B |
13B |
70B |
GPUメモリ使用量 |
16G |
28G |
136G |
A10 |
1枚 |
2枚 |
- |
A100 |
1枚 |
1枚 |
2枚 |
13BのモデルをA100に載せる場合は80GのメモリをvGPUの機能で40G+40Gで2分割して利用も良いと考えられます。サーバ側のメモリはGPU側にモデルをロードする時にGPUと同程度のメモリが最低限必要となります。利用方法によって変わりますが、最低限GPUメモリ量+10G-20G程度のサーバメモリの用意は必要です。
複数GPUでの動作
複数のGPUがサーバに搭載されている場合は、モデルが分割されて均等に割り付けられて動作します。70Bのモデルであれば、2枚のGPUのそれぞれのメモリ利用量が68Gとなっています。今回の環境はNVLINKは利用していないためGPU同士はPCIバスを通じた接続になっています。
環境による文章生成時間の違い
7Bモデル・13Bモデル・70Bモデルで環境によって文章生成と文章要約にどの程度時間がかかるかを比較検討しました。文章生成と文章要約のタスクを用意しています。結果はToken数を、経過時間で割った数となっており、1秒で処理したToken数を表しています。文章生成は500 tokenの文章を生成しています。文章要約は777 tokenの文章を要約して200 token程度を生成しています。条件によって結果は変わりますので、参考程度と考えてください。コードは前出のDatabricks社のコードのInferenceの項目にある計測のコードを利用しています。
7Bのモデル
|
Databricks: A10 |
A100 40G(分割) |
A100 x 1 |
生成 |
25 |
38.35 |
36.21 |
要約 |
182.28 |
183.58 |
200.00 |
13Bのモデル
|
A100 40G(分割) |
A100 x 1 |
A100 x 2 |
生成 |
23.71 |
37.12 |
28.69 |
要約 |
136.674 |
184.00 |
192.62 |
70Bモデル
|
A100 x 2 |
生成 |
9.2 |
要約 |
42.4 |
オープンLLMの環境を用意する
オープンLLMの環境をオンプレミスと、クラウドで用意する場合について検討したいと思います。
オープンLLMの推論環境をオンプレミスに用意する
*以下の価格情報は一般的な価格を参考にしています。ネットワンがお客様に提供する価格とは違う点にご注意ください。
GPT-3クラスの70Bを利用する事を考えます。70BのモデルはA100が2枚必要です。今回は同時接続を4セッションとして、8枚のGPUを用意すると総額システムとして3400万円程度が必要となります。
|
数量 |
単価 |
金額 |
A100 |
8 |
300万円 |
2400万円 |
サーバ |
2 |
500万円 |
1000万円 |
|
|
|
3400万円 |
運用費用の中でコストが心配なのはGPUの電力使用料です。GPUは文章生成中に最大電力を使用します。A100のGPUの最大消費電量は300Wとして、年間稼働時間を労働時間と同様の2080時間とします。そして、300Wの1時間当たりの電力料金を9.3円とすると以下になります。
GPU年間電力使用料金 : 9.3円 x 2080時間 x 8枚 = 154,752円
GPUのライフサイクルを考えるとA100は実質的には3年程度は現役として利用できると考えられます。3年利用できるシステムの総額は以下になります。
システム料: 3400万円 + 154,752 x 3 = 3446万円
これを、1セッションの年間利用料に換算すると以下になります。
年間利用料/セッション : 3446万円 ÷ 3年 ÷ 4セッション = 287万円
様々なタスクを割り当ててフル稼働出来ればコストとしては、極端に悪いとは言えないと思います。
オープンLLMの環境をクラウドで用意する
クラウド上のA100を利用した場合を考えます。クラウドのGPUのインスタンスは連続稼働すると、高額となりますので、利用してない時間帯にこまめに落とせるかがキーになります。オンプレミスと同様のA100 80Gを搭載したサーバの利用を前提としています。同様の条件でLlama 70Bを4セッション用意する場合、Azureの場合であれば、NC48ads A100 v4を4台か、NC96ads A100v4を2台用意する事になります。両方の価格感は変わらない為今回はNC48ads A100 v4を4台としました。East USとし、連続稼働の場合は3年節約プランを利用します。
パターン |
4 台連続稼働 |
1台連続稼働 3台労働時間内稼働 |
4台労働時間内稼働 |
3年使用料金 |
6,728万円 |
3,588万円 |
2,590万円 |
年間使用料 / 4 セッション |
560万円 |
299万円 |
215万円 |
費用を見ると、1セッション連続稼働として、残りは労働時間外には落としておくとオンプレでGPU購入した場合と同様の価格感で利用できます。
*クラウド利用料は2023年8月23日に以下サイトで確認した価格になっています。
従量課金プラン : ¥1,037.6592/時間 / 3年節約プラン : ¥1,037.6592/時間
https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/windows/
所感
モデルサイズに対してGPUメモリが十分あれば、動作はそこまで変わらないようです。70Bのモデルは負荷が大きいのか、極端に性能低下していました。また、様々なタスクを、置き換えられるのであれば、推論の環境は70Bのモデルを利用しても十分にコストメリットが出ると考えられます。

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。