Amazon Web Services ブログ

「入門機械学習パイプライン」にSagemaker Studio Labで入門する

本番環境で機械学習モデルを運用するには、標準化、自動化され再現性のあるモデルが得られるシステム、すなわち機械学習パイプラインが不可欠です。手作業でモデルの学習、デプロイを行っていると誤りが発生しやすく、機械学習モデルの挙動はテストしにくいため誤りに気付くのも遅れることがあるからです。「 MLOps 」という単語を聞いたことがある方もいらっしゃるかもしれませんが、本番環境での機械学習モデルの運用には MLOps の実践が不可欠であり、機械学習パイプラインは MLOps を実現する手段の一つです。そうした機械学習パイプライン構築のノウハウに関する優れた書籍が「入門機械学習パイプライン」です。下の図に示すとおり、パイプラインを構築するためには、機械学習モデルのコードそのものに加えて、データの取り込み、検証や特徴量抽出など、多くの異なるコンポーネントの実装とメンテナンスが必要となります。

MLを取り巻く技術

Hidden Technical Debt in Machine Learning Systems“より

本書ではTensorFlow Extended (以下TFX)というライブラリを用いて、実際に機械学習パイプラインの各コンポーネントを作成しています。TFXはSpotifyTwitterといった企業の本番システムで使われている他、Coursera MLOpsの専門講座で用いられているなど人気の高いライブラリです。また本書では、作成したコンポーネントをApache Beam、Apache AirFlow、Kubeflow Pipelinesを用いたパイプライン方法や、クラウド上でのパイプライン実行方法についても紹介しています。

本稿では、そんな「入門機械学習パイプライン」の内容と、本書を手軽に使えるSagemaker Sutidio Labで学習する方法をご紹介します。

「入門機械学習パイプライン」の内容紹介

私は以下の3つの要素から「入門機械学習パイプライン」はTFXを用いたMLOpsを実践する上で、現状一番参考になる日本語資料だと考えています。

1. 機械学習パイプラインの各ステージと、各ステージで用いるTFXのコンポーネントについての実装に関する詳細な解説

下の表が示す通り、TFXでは機械学習パイプラインの各ステージ(Input & validation data, Train & analyze model, およびDeploy in production)に対応した各種コンポーネントが用意されています。

ステージ コンポーネント 役割
データの取り込みと検証 ExampleGen データの取り込み
StatisticsGen データの要約統計量を計算する
SchemaGen モデルに期待される特徴とその型、値の範囲を定義する
ExampleValidator データをスキーマに照らし合わせてチェックする
モデルの訓練と分析 Transform データに前処理を適用する
Trainer モデルをトレーニングする
モデルのデプロイ Evaluator 評価データセットを用いてモデルの性能を評価する
Pusher 検証ステップを通過したモデルをサービングディレクトリにプッシュする

前半の章では、これらの各ステージの意義とTFXを用いた実装を主として取り扱っています。

  • 第3章ではExampleGenを用いた構造化・非構造化データの取り込み方法とベストプラクティスが紹介されています。
    それに加えて、取り込んだデータをトレーニング、評価、テスト用に分割する方法や、データセットのバージョン管理についても解説があります。
  • 第4章ではTensorFlow Data Validation (TFDV)を用いてデータセットの検証を行っています。
    TFDVを用いてデータから要約統計量を計算し、データセットを表現するスキーマを生成しています。また、スキーマを元に同じ種類の2つのデータセット間(学習データセットと検証データセットや別日に収集された学習データセット)の差が許容されるものであるかをチェックしたり、TFDVを用いてデータセットを選択した特徴量でスライスし、データセットのバイアスを検証する方法についても言及しています。データの検証は特徴抽出やモデルのトレーニングなど、コストのかかるステップの前段階でパイプラインの停止・継続を判断する重要なステップです。データ検証のステップは、その重要性にも関わらず、特徴抽出やモデルのトレーニングのステップと比べて取り上げられることが少ないテーマであり、ここで取り上げられているデータに潜むバイアスについての議論などはTFXを用いない機械学習パイプラインの構築の際にも役立ちそうです。
  • 第5章ではデータの前処理をTensorFlow Transform (TFT) で実装しています。
    TFTではTensorFlowを用いて前処理を実装することで、スケーラビリティを確保しつつ、学習・推論間で同じ前処理が行われることを保証することができることを示しています。
  • 第6章はTrainerコンポーネントによるモデルの学習を取り扱っています。
    また、発展的な話題としてTensorFlowにおける学習の分散戦略やモデルのハイパーパラメターチューニングに関するベストプラクティスが紹介されています。
  • 第7章では、学習の結果得られたモデルをTensorFlow Model Analysis (TFMA)を用いて分析しています。
    TFMAを用いることで、学習済みのモデルに対して複数の評価指標を用いた評価を行うことができることが示されています。また、データセットを異なるグループでスライスし、各グループの指標を評価する方法も紹介されています。これは、モデルとやり取りするすべての人が同じ体験が得られるかをチェックする際に有用です。また、時間経過に伴うモデルの性能低下の検知や、新しいバージョンのモデルの旧モデルとの比較についても述べられています。特にグループ別にモデルの性能を評価することは、モデルの公平性を確保する観点から非常に重要です。その際に必要となる公平性の具体的定義が行われており、実務においてなすべきことが明確にわかります。
  • 第8章・第9章ではTensorFlow Servingを用いた推論環境の構築方法についてかなり詳しく取り扱っています。
    ここで取り扱われているTensorFlow Serving用のモデルエクスポート方法、エクスポートしたモデルの検査方法、CLIツールを使用したデプロイ前のモデルのテスト方法は、トレーニング及び評価終了後のモデルをTensorFlow Serving環境にデプロイする前の第一歩となります。TensorFlow Servingへのモデルデプロイに関しては、モデルサーバーの設定方法やREST、gRPC2種類のAPIの長所短所を比較し適切なプロトコルを選択するにあたっての指針、実際のデプロイ方法が示されています。また推論環境の最適化という観点からは、バッチ予測や量子化・枝刈り・蒸留やTensorRT・TF Lightを用いたモデルの最適化なども紹介されており、これらの章だけでもTensorFlow Servingのハンドブックとして有用だと感じました。

2. TFXを実環境に組み込み、運用するために必要な周辺知識の解説

本書は単純なTFXのライブラリに関する解説書にはとどまりません。「機械学習パイプライン」のタイトルが示す通り、TFXの各コンポーネントをApache Beam、Apache AirFlow、Kubeflowといったパイプラインオーケストレーションツールを用いてパイプライン化する手法や、Slackを用いたヒューマン・イン・ザ・ループ実装の実例、フィードバックループを用いたモデルの継続的改善といった、機械学習パイプラインの実装についても詳しく解説されています。また、それだけにとどまらず機械学習パイプラインに適用されるデータプライバシーの観点から、「差分プライバシー」「Federated Learning」、「暗号化された機械学習」の3つの手法を紹介しています。
個人的に特に有用だと感じたのがフィードバックループを用いたモデルの継続的改善に関する内容です。ここではNetflixやMicrosoft、Stripeでのフィードバックループへの取り組みを紹介しながらフィードバックループの利点とそれが生み出しうる問題点について議論しています。また、ここで取り上げられていたフィードバック収集のデザインパターンは具体的にどういった形でユーザーからのフィードバックを取り入れることができるのかを明確にしています。

3. 豊富な機械学習パイプラインの実例紹介
巻末に日本語版だけの特典として、Uber、Spotify、Twitterといった先進的企業における機械学習パイプラインの構築事例も大変参考になります。とりわけSpotifyのパイプラインはTFXとKubeflowを組み合わせたものであり、本書の内容とのオーバーラップも多いため、書籍の知識がどのように実社会に応用されるかのイメージをつけることができます。
さらに、各社の取り組みから独自に共通項を分析しており、これらの観点は機械学習パイプラインの実用化にあたってフレームワークによらず必要とされる検討事項を浮き彫りにしています。

Amazon SageMaker Studio Labで学ぶ機械学習パイプラインの作り方

本節では、「入門機械学習パイプライン」をAmazon SageMaker Studio Labで学習する方法を解説します。
Amazon SageMaker Studio Lab はメールアドレスのみ、無料でデータサイエンスを学ぶための環境が利用できるサービスです。利用にあたってAWSアカウントはいらないため、クレジットカードを登録する必要がありません。SageMaker Studio Labについての詳細は「データサイエンスの学びを支援する Amazon SageMaker Studio Lab をグラレコで解説」を参照してください。イラスト付きでStudio Labの特徴を解説しています。
以下では、機械学習パイプラインの実装のノートブックをStudio Lab上で動かしてみます。

1. Studio Labにログインする
ログインページから、 Studio Lab にログインします。Studio Lab のアカウントは Request Account から作成できます。

Sagemaker Studio Labログイン画面

2. ランタイムを実行する
Start runtime ボタンをクリックし、実行環境を立ち上げましょう。CPU と GPU 両方つかえますが、今回の例ではCPU ランタイムを使用します。

ランタイムの実行

3. 「入門機械学習パイプライン」のノートブックを開く

今回はTFX ExampleGenでデータの取り込みを行うノートブックを例として実行します。
https://github.com/oreilly-japan/building-ml-pipelines-ja より
サンプルパイプラインのコード隣の「Open Studio Lab」をからノートブックを開きます。

Readme

下図の画面右上よりサインインします。アカウント未作成の場合は「Request account」よりアカウントを作成します。

Login

アカウントにログイン後、下図の「Start runtime」よりノートブックを起動します。

Start notebook

その後、「Copy to project」から本ノートブックをアカウントのprojectにコピーします。Jupyter Lab環境が新しいタブで開きます。この際に該当ファイルのみをコピーするか、「入門機械学習パイプライン」レポジトリ全体をコピーするかを選択します。今回は、ノートブック本体の他にもファイルが必要となるため「Copy Entire Repo」を選択します。

Open notebook

ポップアップしてきたウィンドウからレポジトリをクローンします。レポジトリがStudio Lab環境にコピーされ、Readmeが表示されます。

Jupyter

Readme

4. Conda 仮想環境を作成し、ノートブックを実行する

作業を開始する前に、この本の勉強を行うための仮想環境を作成します。これまでに仮想環境をStudio Lab上で作成したことがない場合、

No conda environment file found

と表示される場合があります。その際にはDismissを押して次のステップに進んでください。

仮想環境作成のため下画像のようにFile → New → TerminalよりTerminalを開きます。

Lab

Terminal画面にて以下のように入力し、仮想環境を作成します。

cd building-ml-pipelines-ja
cat << EOF > environment.yaml
name: tfx-env
dependencies:
  - python==3.8
  - ipykernel
  - pip
EOF
conda env create -f environment.yaml
conda activate tfx-env
# 記事執筆時点では、notebook中でインストールされるtensorflow, tfx, pandas
# に加えてpyparsing, markupsafeをバージョン指定の上インストールしないと
# エラーが発生したため、ここでインストールしています
pip install tensorflow==2.4.1 tfx==0.27.0 pandas==1.2.3 pyparsing==3.0.9 markupsafe==2.0.1

画面左のFile Browserよりchapters/data_ingestionディレクトリ以下のdata_ingestion.ipynbを開きます。
ノートブック画面右上より作成したtfx-envに環境を切り替えます。change conda env

change conda env 2

以上で準備は完了です。 セルを上から実行します。このノートブックではCsvExampleGenを用いてcsv fileからデータを取り込み、訓練・評価・テストセットに分割する例などが実行できます。

おわりに

AWSでは機械学習の学びから活用までを支援しています。学びの支援の一例として、「入門機械学習パイプライン」をStudio Labで学習する方法をご紹介しました。Studio Labで学べる教材に興味がある方は、Studio Lab Community のページをご参照ください。また、Kubernetes TokyoにてKubeflowに関するLTをシリーズとして行っています。本書でも登場したKubeflow Pipelinesを始めとしたKubeflowのツール群に興味を持たれた方は、是非そちらも参照いただければ幸いです。

著者について

渡辺啓太(Keita Watanabe): Frameworks TeamのSenior Solutions Architectです。 Frameworks Teamでは、Self-managedな機械学習の案件を主に支援しています。 過去には自動運転の意思決定やeコマースサイト上の画像検索アルゴリズムの開発に携わった経験があります。好きなキーボード配列はDvorak。