2023.07.10
【LLMもStable Diffusionも】生成AI時代を生き抜く!格安クラウドGPU Vast.ai【すぐ動く】
どうも、PCパーツ好きなY.C.です。好きなんですがケチなので極力調べないようにして物欲を抱かないようにしていました。が、ここ最近ローカルでLLMを動かすロマンに耐えきれず、いっぱい調べてしまいました。今時の強いGPUってメモリ16GBとか24GBとかあるんですが、10万20万するんですよね。パーツ1個で20万て、節子、正気の沙汰やない。でも欲しい。そこで、クラウドGPUがお安く使えることに感動して、GPU欲を鎮めたいと思います。
例えば、A100というメモリ80GBで価格が200万円以上するすんごいGPUがあるんですが
そんなA100 80GBを8台積んだインスタンスを借りてSSH接続した様子がこれです。いったいいくらするんだ…
ええ…やっす……個人でもデータセンター並みのパワーを扱えるクラウドパワー、あな素晴らしや…!ということで、代表的なクラウドGPUであるGoogle Colabに軽く触れた後、このインスタンスを借りたVast.aiというプラットフォームを紹介します。
結論ファースト
- Colabで不十分な場合、Vast.aiが簡単に安く使えて良い
- ただし機密情報は扱えない
- Stable Diffusion web UI のような便利ツールもテンプレートからすぐ動く
Google Colab
https://colab.research.google.com/
みんな大好きGoogle Colab
いきなりJupyter notebookが立ち上がって、GPUも使える、しかも無料、有料版も安価
しかしながら以下のデメリットがあります。
- 有料版でも24hで中断される
- 強いGPUが割り当てられるとは限らない
一定の制限下で安く計算リソースを提供するということですね。類似サービスのPaperspace Gradientも似たような制限があるようです。
長時間利用したい、より強い計算能力が欲しい、月額料金ではなく使った分だけで安く済ませたい、といった場合には、リソース保証型の他のクラウドサービスを利用することになります。
Vast.ai
概要
数あるクラウドGPUの中でも異彩を放つのが、GPUインスタンスを貸し借りするプラットフォームであるVast.aIです。個人のみならず、データセンターが貸し出しているインスタンスもあります。
主な特徴:
- 安い
- sshでrootログインして、任意のタスクを実行可能
- セキュリティは×
詳しく見ていきましょう。
費用
インスタンスごとのレンタル料に加えてストレージ使用量とネットワーク通信量に対して課金されます。CPUの費用はレンタル料に含まれています(good)。ホスト側がレンタル料を設定するのですが、他のクラウドサービスよりも安くしないと使われないので、自然と最安値付近の価格になりやすいです。
少し前はGPUにはマイニング需要がありましたが、EthereumがPoWからPoSに移行した今では需要が落ちレンタル料も安くなっています。今後もわざわざPoWを採用した新興ブロックチェーンが台頭するとは考えにくいため、しばらくは安い傾向が続きそうです。普通のクラウドベンダーと異なり、データセンター向けGPUだけでなくコスパの良い民生用GPUが使えるというのも大きいです。
実行
hostマシンのUbuntu上で稼働するdockerコンテナにsshしrootログインすることでインスタンスを利用します。データはscpコマンドなどで自分で送受信するか、予め設定したクラウドストレージを使って同期することもできます。
docker imageは自分で選択可能です。デフォルトでJupyterもインストールされます。流行っているツールのiamgeがrecomendedとしてリストアップされており、簡単に試すことができます。
2023年7月14日現在確認できるテンプレートは下記です。
- PyTorch
- Stable Diffusion web UI (Automatic1111)
- Text generation web UI (oobabooga)
- Whisper ASR Webservice
- NVIDIA GLX Desktop
- CUDA
- TensorFlow
- Bittensor
信頼性
インスタンスごとにReliabilityという数値があります。実際の稼働状況に応じて算出されているようです。個人が貸す環境なら突然ダウンしたりしないかと不安になりますが、Reliabilityでフィルタすることでリスクを軽減できます。
可用性
インスタンスごとにMax Durationという数値が設定されています。なんと長いものでは数ヶ月使い続けることができます。
セキュリティ
他人の環境を使う以上、自分のデータが盗聴されないか、という懸念が生じるのは至極当然のことでしょう。
FAQのセキュリティの項目では、貸す側はデータを盗むよりも評判を維持するインセンティブの方が大きい、というふわっとした表現に留まっています。ディスク暗号化について言及していない、ということは暗号化されていない前提で考えるべきですね。Vast.aiを使う場合は漏れてもよいデータだけを扱うべきでしょう。利用者側でうまくコンテナ内のファイルをまるっと暗号化できればいいのですが。
メモリ暗号化についてはまだあまり一般的ではないですが、こういうサービスでこそ利用できるとありがたいですね。
使い方
一度流れを把握すると、スムーズに利用開始できるかと思います。
- アカウントを作成します。
- `Account` から、ssh 公開鍵をセットします。
ローカルでsshキーペアを生成して、公開鍵を登録します。ed25519も使えますが、末尾のコメントを空欄にすると弾かれるのでユーザ名@ホスト名
が記載されるのが嫌なら-Cオプションで適当なコメントを記載しましょう。 - クレジットチャージ
クレジットを購入してチャージします。Stripeを経由するので、カード番号を直接登録する心配はないです。初めて登録すると無料クレジットが付与されますが、今回もらえたのはたったの$0.05でした。クレジットが尽きるとインスタンスが停止するので、追加でチャージしておきます。チャージ額は最低$5からです。 - インスタンス設定
EDIT IMAGE & CONFIGから、起動するdocker imageを選択することができます。
imageを2回クリックすると詳細設定が開きます。
Use Jupyter Lab interfaceにチェックを入れておくと、Jupyter起動時にLabのinterfaceになります。チェックをいれないと、デフォルトのファイル一覧画面になります。Jupyter direct HTTPSにチェックを入れVast.aiの証明書をブラウザに追加しておくと、ホストに直接HTTPS接続してJupyterを使えるようになります。チェックを入れなくてもVast.aiのプロキシを経由してJupyterを利用できます。 - インスタンス選択
様々な条件で絞り込みをし、安いインスタンスを探します。Unavailable Offersにチェックを入れると、他の誰かが使っていて今は使えないインスタンスも表示されるので、相場感を確認するのに役立ちます。決まったら、RENTをポチり、コンテナが起動するまで待ちます。Docker imageがキャッシュされていればすぐ起動しますが、そうでなければ少し時間がかかります。
ちなみに料金プランは、 - 使う
インスタンス一覧で、利用中のインスタンスを確認できます。青いターミナルのマークを押すとSSHコマンドが表示されます。OPENを押すと、imageに対応したツールが起動します。例えばStable Diffusion web uiのイメージを選択していれば、OPENを押してすぐに使えます。
右下のJupyterのロゴのボタンを押すと、Jupyterが起動します。 - インスタンス削除
インスタンスを使い終わったら、データを退避してゴミ箱ボタンをクリックして削除します。停止をしても削除しないとストレージ料金がかかり続けます。
使用例
Recommendedにあるツールが実際どれだけ簡単に利用できるか、試してみました。
text-generation-webui
imageを選択します。
インスタンス作成後、OPENを押すとUIが立ち上がります。試しにopen calm 7bをダウンロードしてみます。
15分ぐらいかかりました。
動いた!ノーエラーでした。
stable-diffusion-webui
imageを選択します。
インスタンス作成直後にOPENを押しても何も表示されません。stable-diffusion-webuiが起動するまでさらに1, 2分かかります。
動いた!簡単ですね〜
AWS S3との同期
インスタンスを扱うにあたり必要になるのがデータの同期です。Vast.aiではクラウドストレージとインスタンス間でデータを同期する仕組みを提供しています。Dropboxも選べますが、今回はAWS S3バケットとの同期を試してみます。そのためにAWSのアクセスキーを設定する必要があります。セキュリティのため、専用のIAMユーザを用意し、特定バケットへのアクセスだけを許可することが推奨されます。
- バケットを新規作成します。ホストマシンはぱっと見、北欧かUSが多そうなので、バケットもその辺りのリージョンに作成すると多少同期が速くなるかもしれません。
- 特定のバケットへのアクセスを許可するポリシーを作成
新規に作成した IAM ユーザの詳細ページで、許可を追加 > インラインポリシーを作成 を選択します。 - 特定バケットへのアクセスを許可するポリシー作成
JSON形式で直接記入します。参考:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_s3_deny-except-bucket.html - アクセスキー生成
IAM > ユーザー > ユーザー詳細 > セキュリティ認証情報タブで、アクセスキーを生成します。
- アクセスキーをセット
作成したアクセスキーをVast.aiのアカウント設定でセットし、コネクションを作成します。コネクションには任意のラベルをつけることができます。用途毎にIAMユーザとs3バケットを作成し、ラベルにバケット名を付けておくことで、安全に使い分けできそうです。 - 同期
インスタンス一覧のクラウドのマークをクリックすることで、同期を行うことができます。ここではstable diffusionで作成した画像をs3に送信してみます。インスタンス上のデータは基本的に/workspaceに入るようですが、これを丸ごと送信すると中々s3に反映されず、反映されたと思ったら大量のpythonライブラリまで含まれてしまっていました。必要なディレクトリだけ指定するのをお勧めします。 - 確認
インスタンス内のデータをs3バケットに送ることができました。
余談ですが、/workspaceをまるごと同期しようとして中々反映されないのでs3側のパスを変えてまた同期する、というのを数回繰り返したところ、翌日このようなAWSの予算アラートメールがきました。
無料枠の85%を超えたという内容ですが、よくみると無料枠使い切ってますね。念の為請求を確認してみます。
ヒエッ 10万回もリクエストが飛んでいます。額が小さくて助かりましたが、一つ間違えるとクラウド死するところでした。同期は慎重にやりましょう。反映されていないと思っても、少し待ってみてください。
感想
Vast.aiは利用開始するまでが面倒なイメージがあり、実際UIがわかりづらいところはありますが、わかってしまえばむしろ簡単な部類かもしれません。安いインスタンスを探す手間はありますが、個人的には宝探し感があって好きです。インスタンスの検索や操作ができるAPIが提供されているので、タスクの終了を検知するとインスタンスを破棄したり、安いインスタンスを発見するとタスクを中断して乗り換えるようなスクリプトを作り込んで安さを追求するのも面白そうです。
一方、セキュリティに関する懸念は拭えません。ホスト側が信用できない上ディスクの暗号化がされないとなると、データは全て漏洩しているぐらいの心持ちでいたほうがいいでしょう。起動と終了の度にデータを同期する手間もあり、それが不要という点で改めてローカルPCの良さを感じてしまいました(本末転倒)。
ということで、セキュリティを気にしなく良い趣味や公開プロジェクトなら、普段はコスパの良いパーツで組んだ自作PC ColabやPaperspaceを使い、学習など重たい処理を行う場合にVast.aiを利用する、というのが満足度の高いソリューションなのではないかと思いました!!
宣伝
グループ研究開発本部 次世代システム研究室では、最新のテクノロジーを調査・検証しながらインターネット上の高度なアプリケーション開発を行うエンジニア・アーキテクトを募集しています。募集職種一覧 からご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD