2018年1月31日、ホテル雅叙園東京で開催された「ITインフラSummit 2018」の基調講演に、フリマアプリを運営するメルカリの工藤啓朗氏が登壇。世界で1億ダウンロードを超えたというメルカリを支える同社のサービス基盤の強化と運用の工夫について説明した。

メルカリ ソフトウェアエンジニア(機械学習 /自然言語処理) 工藤 啓朗氏

 メルカリでは、サービスを向上させるために機械学習や自然言語処理を活用している。直近では、運用上の課題を解決するため、コンテナ管理ソフトのKubernetesや、DevOpsの手法の一つである「継続的デプロイ」を実現するSpinnakerを導入した。

 コンテナ導入前のシステムにはいくつかの課題があった。まず、機械学習を使ったアプリケーションを開発する際に、特定のフレームワーク(Django)を使わなければならないという制約があった。また、ローカル環境と本番環境に違いがあり、本番環境では期待通りの結果が出ないことがあった。

 学習モデルをデプロイする作業も、一筋縄ではいかなかった。モデルをデプロイするには、サーバー管理者に依頼する必要があった。また、アプリケーションごとに独立した環境になっておらず、新しく作ったモデルを誰かがデプロイしたら、他のモデルのバージョンが下がってしまったこともあった。

コンテナ技術で学習モデルのデリバリや再学習が容易に

 これら運用上の課題を解決するため、メルカリはコンテナを導入した。コンテナソフトとしてDockerを、コンテナの展開・スケーリング・管理を自動化するコンテナ管理ソフトとしてKubernetes、継続的デリバリソフトとしてSpinnakerを導入した。

 コンテナ化によって、運用上の課題は解消した。アプリケーション開発時に、特定のフレームワークを使う必要がなくなった。Dockerイメージ化することで、ローカル環境と本番環境が同一になり、同じ結果が得られるようになった。

 サーバー管理者に依頼しなくても新しい学習モデルを素早くリリースできるようになり、第三者のデプロイによって既存のモデルが書き換わることもなくなった。加えて、定期的にモデルを評価し、精度が落ちていれば再学習した新モデルに切り替える作業も、容易になった。

 また、KubernetesとSpinnakerの組み合わせにより、旧サーバーから新サーバーへと処理を切り替えることで、停止時間を短縮する「Blue-Greenデプロイメント」も可能になった。Spinnakerが新しいサーバー(モデル)の登録を検知してKubernetesに伝達すると、Kubernetesが旧サーバー群から新サーバー群へと、負荷分散先を徐々に切り替える。

 工藤氏は、今後検証してみたいサービスとして、データを用意すれば学習モデルを自動で生成してくれるサービス「Google Auto ML」を挙げた。「シンプルなモデルでも解決できることはたくさんある。いつの日か『部下はAuto ML』という世界ができるのではないか」と述べて講演を終えた。