大規模言語モデルのパラメーター数ごとに適したSageMakerインスタンスタイプはこれだ！価格感もあるよ

大規模言語モデル利用を想定すると、GPUメモリの量が重要ですが、一体パラメーター数ごとにどれくらいのインスタンスタイプが必要なのか、実際に調べてみました！

判断基準は以下の通り。トークン数などの制限などは考慮しておらず、とりあえず動くかどうかの確認のみです。

* 起動すること
* 簡単なプロンプトを与えて答えが返ってくること


## 検証したモデル

日本語対応の大規模言語モデルもたくさん出てきました！　ありがとうございます！！

### パラメーター数3B未満

https://huggingface.co/line-corporation/japanese-large-lm-1.7b-instruction-sft

### パラメーター数3B

https://huggingface.co/cyberagent/open-calm-3b

https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-ppo

https://huggingface.co/line-corporation/japanese-large-lm-3.6b-instruction-sft


### パラメーター数7B

https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct

https://huggingface.co/stabilityai/StableBeluga-7B

### パラメーター数10B

https://huggingface.co/matsuo-lab/weblab-10b-instruction-sft

## コンテナタイプ

### HuggingFace Inference Container	

Hugging FaceのモデルをAmazon SageMakerに簡単にデプロイできるコンテナイメージ。2021年7月に公開。

https://aws.amazon.com/jp/about-aws/whats-new/2021/07/amazon-announces-new-aws-deep-learning-containers-to-deploy-hugging-face-models-faster-on-amazon-sagemaker/

https://huggingface.co/docs/sagemaker/index

### HuggingFace Text Generation Inference Container	

特に大規模言語モデルに特化したコンテナイメージ。2023年6月に公開。

https://aws.amazon.com/jp/blogs/machine-learning/announcing-the-launch-of-new-hugging-face-llm-inference-containers-on-amazon-sagemaker/

https://huggingface.co/blog/sagemaker-huggingface-llm

## 検証方法

まずはSageMakerにデプロイし、エンドポイントが正常に起動するかを確認しました。正常に起動した場合は以下のプロンプトを投げ、返事が返ってきたらOKとしました。返事の内容までは気にしていません。

```text:プロンプト
My name is Clara and I am
```

小さいサイズのインスタンスから順に繰り返し、正常動作が確認できた場合はそのモデルに対する検証は終了、正常に動作しなかった場合はインスタンスタイプを一つあげ、再度実行しました。

SageMakerの推論エンドポイントへのデプロイ方法はこちらを参照ください。

https://moritalous.pages.dev/7475e768b1c49b5ef04b




## 検証結果

| モデル | パラメーター数 | インスタンス | コンテナタイプ | 備考 |
| --- | --: | --- | --- | --- |
| [line-corporation/japanese-large-lm-1.7b-instruction-sft](https://huggingface.co/line-corporation/japanese-large-lm-1.7b-instruction-sft) | 1.7B |ml.g4dn.2xlarge | HuggingFace Inference Container |
| [line-corporation/japanese-large-lm-3.6b-instruction-sft](https://huggingface.co/line-corporation/japanese-large-lm-3.6b-instruction-sft) | 3.6B | ml.g4dn.2xlarge | HuggingFace Inference Container |
| [rinna/japanese-gpt-neox-3.6b-instruction-ppo](https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-ppo) | 3.6B |ml.g4dn.2xlarge | HuggingFace Inference Container |
| [cyberagent/open-calm-3b](https://huggingface.co/cyberagent/open-calm-3b) | 3B | ml.g4dn.2xlarge | HuggingFace Inference Container |
| [elyza/ELYZA-japanese-Llama-2-7b-fast-instruct](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct) | 7B | ml.g4dn.12xlarge | HuggingFace Text Generation Inference Container |
| [stabilityai/StableBeluga-7B](https://huggingface.co/stabilityai/StableBeluga-7B) | 7B | ml.g4dn.12xlarge | HuggingFace Text Generation Inference Container |
| [matsuo-lab/weblab-10b-instruction-sft](https://huggingface.co/matsuo-lab/weblab-10b-instruction-sft) | 10B | ml.g5.12xlarge | HuggingFace Text Generation Inference Container | SM_NUM_GPUS="2" |
| [stabilityai/StableBeluga-13B](https://huggingface.co/stabilityai/StableBeluga-13B) | 13B | ml.g5.12xlarge | HuggingFace Text Generation Inference Container |  |


:::note warn
パラメーター数が70Bの[meta-llama/Llama-2-70b-chat-hf](https://huggingface.co/meta-llama/Llama-2-70b-chat-hf)や[stabilityai/StableBeluga2](https://huggingface.co/stabilityai/StableBeluga2)も試したのですが、ml.g5.48xlargeを使ってもうまくいきませんでした。今後も継続して検証したいと思います。
:::

**2023/09/04追記：**

`HF_MODEL_QUANTIZE`というオプションに`bitsandbytes`を指定することでメモリ使用量を抑えることができるとのことです。

このオプションを指定することで、パラメーター数7Bのelyza/ELYZA-japanese-Llama-2-7b-fast-instructをml.g5.2xlarge（GPU数：1）で起動させることに成功しました。


## SageMaker価格

価格順でソートしてます。

| インスタンスタイプ<br>vCPU / メモリ | GPU<br>モデル | GPU<br>容量 x 数量 = 合計 | バージニア<br>価格（1h） | バージニア<br>価格（720h） |
| :-: | --- | --- | --: | --: |
| ml.g4dn.xlarge<br>4vCPU / 16GB  | T4 | 16GB x 1 = 16GB  | $0.7364 | $530.208 |
| **ml.g4dn.2xlarge**<br> 8vCPU / 32GB | T4 | 16GB x 1 = 16GB | $0.94 | $676.8 |
| ml.g5.xlarge<br>  4vCPU / 16GB | A10G | 24GB x 1 = 24GB | $1.41 | $1,015.2 |
| ml.g4dn.4xlarge <br> 16vCPU / 64GB | T4 | 16GB x 1 = 16GB | $1.505 | $1,083.6 |
| ml.g5.2xlarge <br> 8vCPU / 32GB | A10G | 24GB x 1 = 24GB | $1.52 | $1,094.4 |
| ml.g5.4xlarge <br> 16vCPU / 64GB | A10G | 24GB x 1 = 24GB | $2.03 | $1,461.6 |
| ml.g4dn.8xlarge <br> 32vCPU / 128GB | T4 | 16GB x 1 = 16GB | $2.72 | $1,958.4 |
| ml.g5.8xlarge <br> 32vCPU / 128GB | A10G | 24GB x 1 = 24GB | $3.06 | $2,203.2 |
| ml.g4dn.16xlarge <br> 64vCPU / 256GB | T4 | 16GB x 1 = 16GB | $4.89 | $3,520.8 |
| ml.g5.16xlarge <br> 64vCPU / 256GB | A10G | 24GB x 1 = 24GB | $5.12 | $3,686.4 |
| **ml.g4dn.12xlarge** <br> 48vCPU / 192GB | T4 | 16GB x 4 = 64GB | $5.44 | $3,916.8 |
| **ml.g5.12xlarge** <br> 48vCPU / 192GB | A10G | 24GB x 4 = 96GB | $7.09 | $5,104.8 |
| ml.g5.24xlarge <br> 96vCPU / 384GB | A10G | 24GB x 4 = 96GB | $10.18 | $7,329.6 |
| ml.g5.48xlarge <br> 192vCPU / 768GB | A10G | 24GB x 8 = 192GB | $20.36 | $14,659.2 |


## まとめ

### パラメーター数：3B

* **インスタンスタイプ：** ml.g4dn.2xlarge
* **コンテナタイプ：** HuggingFace Inference Container

約$700/月

### パラメーター数：7B

* **インスタンスタイプ：** ml.g4dn.12xlarge
* **コンテナタイプ：** HuggingFace Text Generation Inference Container

約$4,000/月


### パラメーター数：10B

* **インスタンスタイプ：** ml.g5.12xlarge
* **コンテナタイプ：** HuggingFace Text Generation Inference Container

約$5,100/月


### パラメーター数：70B

検証中。