前提
この記事はCloud CIRCUS Meetup #1【2022/5/25(水)】 - connpassに登壇した際のスライドを転記したものになります。
本記事の目的
GPUを使ってサービスを運用する場合、費用的に都合が合わないことが多いです。
もし予算に余裕があるとしてもコスト削減は価格競争力にも繋がるので参考になるかと思います。
そこで性能を担保しつつ(安全に)、サーバー費用を下げる(安く)に弊社で実施した対策についてご紹介します。
MOSYA
理解を促すための事例ですが、弊社の3Dモデル作成サービスである「MOSYA」を提供しています。
リクエストごとにGPU処理が行われるので、リクエストに比例して費用が増加してしまいます。
安く
1. 必要なサーバースペックを確認
当たり前のことではありますが、処理にフィットしたサーバースペックを選びましょう。
費用に対して実際処理パフォーマンスが改善されるのか確認するのがポイントです。
2. 安いインスタンスを使う
SPOTインスタンスを使えば非常に安い料金でインスタンスが使用できます。
( AWS G3シリーズは大体70%安い )
SPOTインスタンスはクラウド上未使用状態のインスタンスを使用する仕組みになりまして、
リージョン内のインスタンス使用量増える場合、インスタンスが終了される可能性があるので終了に対するシステムの対策が必要になります。
3. GPUが必要なタスクを分ける
GPUで処理を行う場合でも一部CPUを使って処理できるところもあるかと思います。(データの準備など)
CPUで処理が可能な部分はCPUで処理をするようにしましょう。
効果として以下が期待できます。
- GPUの処理量が減る
- CPU処理の間GPUのウォーミングアップができる(エラーがある場合はGPUを立ち上げないこともできる)
実装方法としてはQueueを使用しCPUとGPUの処理を分けることが理想かと思います。
弊社ではタスクを連続的に処理するために状態管理方を採用しております。
安全に
1.予測されない処理の停止に対応
GPU処理は一般的な処理に比べ処理量や処理時間が長く、再実行コストが高めになります。
なので再実行時でも処理を途中から継続できるようにし、手戻りを少なくする必要があります。
2.インスタンスプールを確保する
SPOTインスタンスにより、インスタンスが使用できない場合、
他のタイプを代わりに使ってサーバー数を維持することができます。
もし特定インスタンスを常時起動させる必要があったり、少しでもサーバーの不在状態を作りたくないのであれば一部のインスタンスはOnDemandを使うこともいいと思います。
3.問題がないかモンタリングする
インフラからアプリケーションまで問題が散財しているので、問題の監視対策と改善が必要になります。