「ディープラーニングで料理の写真を抽出するアプリをリリースできた背景には、エンジニアが自由に使って試せるAWS環境が社内に用意されていたという状況がある」。クックパッドは2017年6月1日、アマゾン ウェブ サービス ジャパン主催の年次イベント「AWS Summit Tokyo 2017」で講演し、同社の研究開発を支えるAWS基盤について紹介した。

クックパッドのインフラストラクチャー部で部長を務める星北斗氏
クックパッドのインフラストラクチャー部で部長を務める星北斗氏
(撮影:渡辺 慎一郎=スタジオキャスパー)
[画像のクリックで拡大表示]
クックパッドの研究開発部に在籍する染谷悠一郎氏
クックパッドの研究開発部に在籍する染谷悠一郎氏
(撮影:渡辺 慎一郎=スタジオキャスパー)
[画像のクリックで拡大表示]

 同社は2011年に自社保有のデータセンターからパブリッククラウドのAmazon Web Services(AWS)に完全移行している。2016年7月には、機械学習などを研究する研究開発部を発足し、エンジニアが自由に使えるAWS基盤として「機械学習基盤」の運用を開始した。同基盤に支えられるかたちで、2016年12月には、同社として初めてディープラーニングを応用したアプリケーション「料理きろく」をリリースした。

エンジニアが自由に使えるAWS基盤

 「研究開発部のエンジニアが、周りを気にせずに自由にAWSを使える環境」と、クックパッドのインフラストラクチャー部で部長を務める星北斗氏は、機械学習基盤について説明する。

 以前はインフラストラクチャー部がAWSのリソースを操作する全権限を持っていたが、社内でAWSの利用が進むにつれてリソースを用意する作業が追いつかなくなった。さらに、機械学習の用途は手探りでの試行が多く、運用管理の自動化といった、それまでの本番環境の運用方針とは毛色が違っていた。

 このため、インフラストラクチャー部による中央での集中管理をやめ、権限と責任を各事業部に委譲した。こうして、研究開発部のエンジニアが自由に触って試すことができるAWS環境として機械学習基盤を用意した。

 アクセス権限については、アカウントごとに割り当てていた本番環境とは異なり、AWS Identity and Access Management(IAM)のAssumeRoleを使って、個々のサービスを利用するための権限を都度付与するようにした。

 セキュリティを確保するために、機械学習基盤のインスタンス(仮想マシン)にアクセスするための踏み台となるSSHゲートウエイサーバーを、インフラストラクチャー部側に用意した。インフラストラクチャー部のVPC(仮想プライベートクラウド)から機械学習基盤のVPCに接続して使う。

 機械学習基盤の設置にあわせて、AWSのサポート契約も、デベロッパーサポートから、より高額のエンタープライズサポートに切り替えた。サポート費用は月額49ドルから1万5000ドルへと300倍になった。時間と知識を買うのが目的だった。

 エンタープライズサポートの効果は大きいと星氏は言う。AWSの運用管理コストが減ったほか、サポートに問い合わせる心理コストが下がった。「Limit Increase(上限値の引き上げ)の処理は、最短で3~4分と爆速になった」(星氏)。

写真判定はAmazon SQSによる非同期処理でさばく

 機械学習基盤を使って開発したアプリケーションの一つが、ディープラーニングによる料理写真の自動認識アプリ、料理きろくである。クックパッドアプリの一機能として提供した。スマートフォンに保存されている写真のうち料理写真だけを抽出してカレンダー形式で表示する。現在、10万人以上のユーザーと420万枚以上の料理写真で使われている。

 料理きろくは、画像のアップロードや写真判定といった処理が必要になるので、単純なAPIコールよりも時間がかかる。このため、非同期に処理を実行することが現実的だった。サーバー環境も、Python言語とChainerライブラリ、GPUなどを使うため、RubyやRails、CPUを使うアプリケーションサーバーとは勝手が違う。これらの理由から、アプリケーションサーバー部分と写真判定部分を疎結合とし、メッセージキューングのAmazon SQSとストレージのAmazon S3を使って写真判定フローを実装した。

 具体的には、APIサーバーがS3 Pre-Signed URLを生成し、生成されたURLを使ってクライアント(iOS/Android)が判定用に縮小したサムネイルをAmazon S3にアップロードする。写真がAmazon S3にアップロードされたというイベントをトリガーに、Amazon SQSを使ってメッセージを写真判定サーバーに通知。写真判定サーバーは、メッセージに含まれる写真のAmazon S3上のKey情報を利用して写真をダウンロードし、Keyに含まれる写真のIDを利用してAPI越しにクライアントに判定結果を通達する。

 写真がアップロードされてから1時間以内に判定結果を通知したい、という要件があったので、写真判定サーバーのオートスケールで対応した。Amazon SQSには、メッセージがキューの中に滞留している時間に関するメトリクスがある。これを監視してアラートを出す。このアラートを基に写真判定サーバーの台数を増減する仕組みである。

 写真の判定には、GPUを使った。AWSのg2インスタンスで写真判定用のECSクラスタを構成している。「同価格帯のCPUインスタンスと比べて4~5倍の性能差がある」と、クックパッドの研究開発部に在籍する染谷悠一郎氏は評価する。

 リリース後に実施した改善点としてはまず、GPUのデバイスドライバーや、GPUを機械学習用途で使うための関連ライブラリーのインストール作業を簡素化した。具体的には、Packerと呼ぶツールを使って、設定済みの仮想マシンイメージ(AMI)を作成して管理することにした。

 立ち上げっぱなしのインスタンスを監視する仕組みも作った。1時間に1回、AWS Lambdaを使ってアイドル状態かどうかを調べる。アイドル状態が3時間続いているインスタンスについてはビジネス向けチャットのSlackにアラートを表示し、さらに1時間アイドル状態が続いたらインスタンスを強制で終了させる。