全体構成
AWSでAIを用いたWebサービスを運営しています。
構成は大まかにはEC2(g4dn.xlarge) on ECSで ECS上にflaskコンテナとjobコンテナを配置しています。
タスク定義にて、適当な量のvCPUを割り当てて、g4dnのGPUはjobの方にアタッチしています。
コンテナ間通信によって、flaskから画像をjobに投げるとjobの中のAIが動いていろいろ推論して、結果を返します。
jobの中にはfastapiサーバを立ててます。サーバ起動と同時に3つのmodelがloadされます。
flaskからリクエストが来たら、endpointに従って対応するmodelでpredictします。
変化点
4つめのmodelを追加して、loadやpredictのコーディングをした。
起こったこと
flaskがjobと通信できていない
確認順序
確認 | 結果 |
---|---|
コンテナ間通信のURLが合っているか | 合っている |
jobコンテナは生きているか | 死んでいた |
model.loadはできてるか | 出来てた |
model.predictはできているか | ここで死んでいた |
仮説検証
仮説 | 策 | 結果 |
---|---|---|
GPUメモリ不足 | g5系に変更 | predictでコンテナ停止 |
CPUメモリ不足 | タスク定義にてjobコンテナへのvCPU割当増加 | 成功 |
結論
GPUを用いた推論でもCPUまで疑うこと。