テクノロジー

2021.08.31

ヤフーのAIプラットフォーム紹介 〜 AI開発をより手軽に

こんにちは。ヤフーでデータエンジニア兼マネージャーをしている安藤です。
社内で利用しているAIプラットフォームの構築、提供を担当しています。

ヤフーには100を超えるサービスがあり、各サービスのデータ*1が蓄積されています。ヤフーではこれらのデータをマルチビッグデータと呼んでいます。マルチビッグデータを利用し、ユーザの利便性やサービスの質向上のため、AI、機械学習の導入が増えています。
今回は、社内で急速に利用が進んでいる内製のAIプラットフォームを紹介します。
*1 この記事で取り扱っているデータは、プライバシーポリシーの範囲内で取得したデータを個人が特定できない状態に加工しています。

AIプラットフォーム開発の目的

AIプラットフォームの開発前はサービス開発エンジニアやデータサイエンティストが各自でAI開発環境を用意していました。人的リソースが限られる中で、サーバリソース管理、環境構築、サーバメンテナンス、データを計算環境に転送等のデータ準備に時間と手間がかかっていました。そのため、本来注力するべき機械学習モデル・予測モデルの精度向上業務やサービス改善業務に注力出来ない課題がありました。

そこで、より簡単にAIを開発できる環境を提供するAIプラットフォームを開発しました。

AIプラットフォーム

AIプラットフォーム全体概要

AIプラットフォームは、複数のプロダクトから構成されており、AIを開発するためのプラットフォームです。
各プロダクトについては、後述するMLOpsとともに説明します。

MLOps

ヤフーのAIプラットフォームは、Googleが定義したMLOpsの構成を参考にしつつ、「それらの機能が社内で需要があるか」、「この構成にはない機能でヤフーにおける機械学習の導入をさらに促進させるものはないか」を常に考えながら開発を進めています。

Googleは、ML のデータ サイエンスの手順で、

ML プロジェクトでは、ビジネス ユースケースを定義して成功基準を確立した後、ML モデルを本番環境に提供するプロセスに次のステップが含まれます。これらの手順は、手動で実行することも、自動パイプラインで実行することもできます。
(中略)
これらの手順の自動化レベルによって、ML プロセスの成熟度が決まります。これは、新しいデータの場合や新しい実装の場合での新しいモデルのトレーニング速度を反映します。以下のセクションでは、自動化を伴わない最も一般的なレベルから、ML と CI / CD パイプラインの自動化まで、3 つのレベルの MLOps について説明します。

と、MLプロセスの成熟度は手順の自動化レベルによって決まり、3つのレベルがある、と説明しています。

MLOps レベル 概要
MLOps レベル 0: 手動プロセス MLモデルのビルドとデプロイのプロセスを手動で実施。
MLOps レベル 1: ML パイプラインの自動化 MLパイプラインを自動化して継続的なモデルの学習とサービングを実施。
MLOps レベル 2: CI / CD パイプラインの自動化 CI/CDを活用して安全にMLパイプラインを更新し続ける。

ヤフーではすでにMLOps レベル 0を達成しており、MLOps レベル 1の達成に必要なコンポーネントがそろうのが間近となっています。

mlops_level1.jpg

出典:https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja (外部サイト)

以下、MLOpsのコンポーネントに当てはめながら、提供しているAIプラットフォームのプロダクトの説明をしていきます。
ただし、ACPについては、AIプラットフォームの基盤となっており、他のプロダクトのようにMLOpsのコンポーネントに当てはめるのが難しいため、別途説明します。

ACP

ACPはデータ処理/機械学習/ディープラーニング向けマルチテナントKubernetes環境で「AI Cloud Platform」の略です。

サービス/ユーザごとに専用のKubernetes Namespaceを作成しています。利用者は作成されたNamespaceを使用して業務を行います。

ACP概要図

AIプラットフォームの多くのプロダクトやアプリケーションは、ACP上で動作します。
以下の特徴があります。

  • データが使いやすい
    ヤフーでは、データレイクとして、HDFS(Hadoop Distributed File System)にヤフーのすべてのデータが蓄積されています。
    ACPはHadoopと同じネットワークセグメントに設置されているためHDFSに置かれているデータを効率的に処理できます。
  • データ処理フレームワークのサポートが多い
    データ処理に必要なワークフローツールや、Hive, Trino(Presto), Teradata等を実行してのETL処理、機械学習向けの統合開発環境であるJupyterHub、機械学習に必要なAPI等、さまざまなフレームワークをサポートしています。
  • 必要なリソースを柔軟にプロビジョニングできる
    KubernetesはGPUを含め必要なリソースを柔軟にプロビジョニングできます。ACPはマルチテナントのKubernetesですので、必要であれば一時的に大量の計算資源を確保してデータを処理したり、多くのパラメータで機械学習モデルを学習できます。
  • PersistentVolumeをサポートしている
    ACPはHDFS以外のストレージとしてPersistentVolumeをサポートしており、HDFSを使わずコンテナ間でデータを容易に共有できます。ACPではNetAppとQuobyteの二種類のPersistentVolumeをサポートしており、用途により使い分けられます。
    NetAppはNFSとiSCSIをサポートしています。ACPではHDDTypeとSSDTypeの2つのNetAppを使い分けています。
    Quobyteは、File Storage, S3など複数のプロトコルをサポートしたUnified Storageです。安価なコモディティハードウェア上で動作しサーバを追加することで容量と性能がスケールします。
  • セキュリティが高い
    外部への通信を遮断、必要最小限のポートしか開放しない等、不用意なデータ持ち出しができないようにしています。
    加えて、Falcoを使い不正なコマンド発行や通信を検知してAuditを残すことであとから監査できる仕組みを整えています。
    経路を追えるように通信のAuditを残すようにしています。

Model training

LakeTahoe/acloud

LakeTahoeはACP上で動作する機械学習モデル・予測モデルを学習するためのWeb APIです。読み方は「レイクタホ」です。
以下の特徴があります。

  • Kubernetesを意識することなくGPUを含めた大量の計算資源を使ってHDFSのデータを使ったモデルの学習を実現
  • TensorFlowXGBoostscikit-learnPyTorchLightGBMを利用可能
  • システム組み込みのハイパーパラメータチューニング

acloudはLakeTahoeのAPIを操作するCLIツールです。
ローカル環境やJupyterHubから学習ジョブの投入、ジョブの詳細の確認、ジョブのキャンセル等を行うことが出来ます。

acloud.jpg

JupyterHub

データサイエンティストが慣れ親しんだツールであるJupyterHubのDockerイメージを使うことでACP上に自分だけの開発環境を構築してAIを開発できます。
JupyterHubイメージはNotebookから利用可能なTensorboardを備えており、学習状況を簡単に確認できます。

tensorboard.jpg

JupyterHub上で書いたNotebookは後述するMLflowのアーティファクトとして保存したり、社内GitHubにpushすることでチーム内にナレッジを共有できます。また、Notebookを直接実行できるPapermillと後述するArgo Workflowsを組み合わせることでNotebookをそのまま定常ジョブとして実行できます。

Deployment tool

Argo CD

Argo CDはKubernetesネイティブなGitOps継続的デリバリーツールです。JupyterHubや後述するAirflowをはじめ、任意のマニフェストをGitHubに保存するだけでAIプラットフォームにデプロイできます。
ヤフーでは利用頻度が高いツールのマニフェストをAIプラットフォームのチームがメンテナンスしています。
Argo CDはHelmやKustomizeを使った差分管理をサポートしているため、利用者は変更したい差分を記述したファイルを独自のリポジトリにおくことで、最小限の工数で使用しているNamesapceにツールをデプロイできます。

ArgoCD.jpg

Automated pipeline

Airflow

OSSのワークフローツールであるAirflowを導入しており、データ取得、前処理、学習、等の一連のジョブを管理できます。
実行状況がわかりやすく可視化されており、UIから再実行が出来、backfillによる再集計が可能です。
Pythonでワークフローを記述するため柔軟な処理を実行できます。
AIプラットフォームではAirflowのHelmチャートを管理、提供しており、利用者ごとに独自のAirflow環境を構築しています。

Airflow.jpg

Argo Workflows

Airflowとは別に、同じくOSSのワークフローツールであるArgo Workflowsも導入しています。
Argo WorkflowsはKubernetesネイティブのワークフローツールであり、Kubernetes内で完結するワークフローに適しています。
ワークフローはYamlで記述します。Templateの機能があり、一部の設定を変えたワークフローを簡単に実行できます。
HDFSからのファイル取得やETLツールへのクエリ実行といった、特に利用頻度が高い汎用的な処理は、ACPの全てのユーザが利用できるCluster TemplateとしてAIプラットフォームチームが管理、提供しています。
マネージドサービスとして提供しているため、すぐに利用できます。

ArgoWorkflows.jpg

Airflowと共存させており、利用者に利用用途に合わせて使い分けてもらっています。
また、AirflowとArgo Workflowsの両方のメリットを使うために、AirflowからArgo Workflowsを実行するケースもあります。

ML metadata store

MLflow

MLflowは機械学習システムのライフサイクルを管理するためのOSSです。
MLflowは大きく4つの機能、MLflow Tracking/MLflow Projects/MLflow Models/Model Registryで構成されています。
主に機械学習の実験の記録・管理と機械学習モデルのライフサイクルを管理するために利用しています。
新しいモデルの成果をドキュメントにまとめていた作業が不要になり、データサイエンティスト間で学習結果を手軽に共有できるようになりました。

mlflow.jpg

Prediction service

CuttySark

学習済みのモデルを使った推論サーバを簡単に管理できるマネージドサービスです。
CuttySarkはOSSではなくヤフーが内製したツールで、2021年7月に正式に社内提供開始したばかりのプロダクトになります。
指定したモデルの推論サーバの作成と削除がWebAPI経由でできます。
現在、モデルファイルのフォーマットとしてTensorFlowのSavedModelとONNXをサポートしています。

cuttysark.jpg

図中のZCPとDragonは、AIプラットフォームと同じくヤフーの社内向けプラットフォームであり、ZCPはマネージドなKubernetesクラスタ、DragonはS3互換のオブジェクトストレージです。
ZCPとACPは共にKubernetesクラスタですが、ZCPはシングルテナント、ACPはマルチテナントという違いがあります。

関連Tech Blog:

社内プラットフォームの利用

MLOpsの実現にあたってはAIプラットフォーム以外の社内向けプラットフォームも利用しています。

  • Source repository
    社内GitHubを利用しています。
    機械学習ジョブやWebサービスのコードを管理しています。
  • Pipeline deployment
    AIプラットフォームとしてはArgo CDを提供していますが、その他にもScrewdriver.cdを利用しています。
    Gitのリポジトリの変更があると事前に設定したイベントを検知してデプロイします。
  • Model registry
    機械学習モデル・予測モデルを置く場所としてDragonとHDFSを利用しています。

社内利用

2021年8月現在、ACPでは約300のサービス/ユーザ専用Namespaceが利用されています。
どのように利用されているのか一例を記載します。

  • Yahoo!ショッピングのレコメンドで、カテゴリーごとの学習・推論時にACPのGPUを使用し、開発->パイプライン化を速やかに行うためにJupyter NotebookとPapermillを利用
  • 広告のコンバージョン最適化機能において、学習データの整形、学習を一貫してLakeTahoeで実行し、さらに、オフライン評価もLakeTahoeで実行
  • ユーザごとの各広告をクリックする確率(CTR)を予測するため、LakeTahoeを使ったモデルの学習とオブジェクトストレージであるDragonにモデルをアップロードする処理を、ACP上に構築したAirflowを使って定常ジョブ化

関連Tech Blog:

おわりに

今回は、ヤフーで利用されているAIプラットフォームについて紹介しました。

ヤフーでは、AIプラットフォームを利用することで、すぐにAI開発に取り組めます。
データサイエンティストやサービス開発エンジニアが本来の業務に注力できるように、AI開発を手軽に行うことができるプラットフォームを今後も提供し続けていきます。
現在、MLOps レベル 1の達成に向けてモデルのドリフト検知を行うマネージドサービスを開発しています。

AIプラットフォームでは面白そう、良さそうな技術を積極的に取り入れています。
ヤフーでは最高のMLOpsの実現に向けて、AIプラットフォームの開発や運用で活躍したいエンジニアを募集しています。
ご興味のある方は、ぜひご応募ください!

最後まで読んでくださり、ありがとうございました。


参考:https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja (外部サイト)


安藤 俊介
データエンジニア兼マネージャー

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

関連記事

このページの先頭へ