Amazon SageMakerを活用し、推論処理を最適化
新しいメディア解析基盤は、上図のアーキテクチャとなった。アプリサーバーから独立した、メディア解析専用のサーバーを用意し、そこで解析処理を行う方針だ。機械学習的な推論処理は、Amazonの提供している機械学習用のマネージドサービスAmazon SageMaker(以下、SageMaker)を活用した推論APIにより実施されることとなった。
「SageMakerを採用したのにはいくつか理由があります。まず、『みてね』の関連ファイルやサーバーはすべてAWS上にあるため、連携がしやすいこと。特に、画像・動画データがAmazon S3に配置されているため、それらとの連携が容易だったことは大きいです。また、SageMakerはマネージドサービスなので運用も楽になります」
SageMakerによる推論APIは、コンテナ上で稼働するつくりになっている。コンテナ内でREST APIの形でHTTPサーバーを立て、その裏側で推論処理のロジックが動くしくみだ。では、推論処理はどのように実装されているのだろうか。
「『みてね』で活用している顔検出の解析処理は、研究者の多い領域です。そのため、彼らが公開しているソースコードを流用できます。ただし、それらの実装では処理速度が遅いという欠点があったので、私たちは既存の検出器を高速化して利用しました」
高速化の手法はいくつかある。「みてね」では、HTTPサーバーが受け取ったジョブをもとに「1.画像ダウンロード」「2.前処理」「3.推論処理」「4.後処理」という順序で解析処理が行われている。前処理の部分でデータ処理用パイプラインのNVIDIA DALIを利用することで、一部の処理をGPUにオフロードしているという。
推論処理についても、同じくNVIDIA TensorRTを利用し、NVIDIA Tesla V100 + FP16演算に最適化した処理を行っている。これらの施策により、もともとの検出器の速度と比べて10倍以上の高速化を実現したそうだ。
コンテナイメージのビルドやテスト、デプロイはAWS CodeBuildにより自動化されている。「みてね」のSageMakerインスタンスのスケーリングは、少し変わったルール設定だ。SageMaker推論APIを叩いているジョブキュー側のジョブ数を監視し、その数値をもとにスケールさせるつくりになっている。
「SageMakerのAWS公式ドキュメントには、APIの実行回数を監視することでスケールさせるのがベストプラクティスであると書かれています。ですが、今回はAPI実行回数を制御できる用途のため、あえて公式ドキュメントの内容を無視したルール設定にしました。これにより、性能をギリギリまで向上させられるようにチューニングしています」
新しい解析基盤への移行は、2つのフェーズに分けて行われた。第1フェーズでは、旧基盤と新基盤を並行稼働させ、後者の処理結果は破棄する運用方針となった。このフェーズのなかで、新基盤の正常稼働確認やパフォーマンスチューニングなどが実施されたという。安定運用の見通しが立った後、次のフェーズで新基盤への段階的な移行が行われた。
「移行したことで、アプリサーバーの負荷はかなり軽減されました。解析処理に起因する障害も発生していません。また、運用コストも格段に下がり、オペレーションの手間も大きく軽減されました」
エンジニアが運用作業から解放されるメリットは大きい。アプリサーバー負荷と運用コストが特に大きかった顔検出の解析基盤については、移行が完了しており、その他人物検出などの解析基盤も順次移行していく予定だ。
お問い合わせ
株式会社ミクシィ