はじめに
プロダクトでも個人の興味でも、音声データを扱うことが増えてきたし、SLMも本格的に検証したいため、GPU環境を整えていきたいなと思ったときの初心者向け備忘録です。
CloudRun も GPUサポート開始したので(若手に試してもらう前に)自分で手を動かしてみたら、いまいちフィットしなく書くことがなくなったわけではありません。
torch.cuda.is_available() の結果確認してますか?
デフォルトでは CUDA無効のPyTorchがインストールされます。
CUDA有効のPyTorchをインストールするためには、https://pytorch.org/get-started/locally/ から、環境を選択して有効なコマンドを指定してインストールする必要があります。
CUDA無効のPyTorchを気づかずにインストールしてしまっている場合は、GPUの恩恵を受けることができません。
CUDAバージョンの選び方は以下のまとめがオススメです。
どのバージョンを利用すれば良いのか?
PyTorchで利用したいCUDAバージョン ≦ CUDA ToolKitのバージョン ≦ GPUドライバーの対応CUDAバージョン
全部のCUDA バージョンを揃えておくのがハズレないとのことです。
(僕はまだハマってません)
cuda-toolkit のリリースノートやサポートマトリクスに目を通しておくのもオススメです。
どうやって調べるの?
自分でコマンドを打てる環境では良いのですが、CloudRunやGKEではちょっと不便です。
ステータスを表示するエンドポイントを用意しておくと捗ります。1
from flask import Flask, Response
import subprocess
@app.route('/gpu-status', methods=['GET'])
def gpu_status():
try:
result = subprocess.run(['nvidia-smi'], stdout=subprocess.PIPE)
res = result.stdout.decode('utf-8')
except FileNotFoundError:
return Response("No nvidia-smi", mimetype='text/plain', status=404)
except Exception as e:
return Response(f"Unexpected: {e=}", mimetype='text/plain', status=500)
return Response(res, mimetype='text/plain')
nvidia-smi で表示される CUDAバージョンはドライバーが対応している最大のCUDAバージョンが表示されます。
以下は CloudRun GPU での表示です。
Wed Dec 25 00:00:00 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03 Driver Version: 535.129.03 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA L4 Off | 00000000:00:06.0 Off | 0 |
| N/A 59C P0 N/A / 72W | 1MiB / 23034MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
ちゃんと外から叩かれないように権限管理を忘れずにしましょう。
これであなたも torch.cuda.is_available()
を ONになる環境をかんたんに構築・確認できるようになりました!
おまけ
CloudRun GPU は手元で検証をしていたところ、SLMを動かすという用途の方がやはり合いそうでしたが、
を読みつつ、Whisperを利用して試してみた所感です。
- GKE を利用する場合 Image Streaming が使えるので、Image内部にモデルを抱いてあげるのも悪くない。
- とはいえ、あまりに大きすぎるとパフォーマンスに影響しそう
- Artifact Registry のストーレジ料金 $0.10/GB。古いイメージはちゃんと掃除しましょう。
- 基本的には起動時に Cloud Storage よりダウンロードが無難そう。
- 東京リージョンで $0.023/GB
- たいていはオプションでデータのキャッシュ先が指定できるようになっているのでコードを読みましょう。
最後に
この記事がGPU環境をあまり構築したことがない方のヒントになって、本質的な課題解決に当てる時間が増えたらうれしいです。
今年のインティメート・マージャーのアドベントカレンダーはいかがでしたでしょうか?
参加2年目なんとか全日を埋めることができました。
少しでも弊社に興味をもってくれる人が増えたらうれしいです。
-
nvcc -V も CloudRun GPU で出したかったのですがうまくいきませんでした。ドキュメントに明記されてるので不要ではありますが、良い確認方法があったら教えてください。 ↩