TFXを使った機械学習パイプラインの構築(デプロイ編)

2022年3月30日(水)
張替 清音(はりがえ きよなり)
連載の7回目となる今回は、実装編で構築した機械学習パイプラインをKubeflow Pipelinesにデプロイし実行します。

機械学習パイプラインの運用で役に立つKubeflow Pipelinesの機能

Kubeflow Pipelinesは、パイプラインのオーケストレーションのみならず、機械学習パイプラインの運用で役に立つさまざまな機能を提供しています。本稿では、その中でもTFXの仕組みを活用したArtifact VisualizationsとMetadata UIについて、具体的なユースケースに沿って紹介します。

  • Artifact Visualizationsのユースケース
    • パイプラインに新しく取り込まれたデータと前回のデータを可視化し比較する
  • Metadata UIのユースケース
    • モデルの学習に使われたデータの系統来歴を追跡する

パイプラインに新しく取り込まれたデータと前回のデータを可視化し比較する

Kubeflow Pipelinesは、本連載の第4回で解説した「データ分析」で利用するTFDVや第6回で解説した「モデル検証」で利用するTFMA、TensorBoardといった各種ツールと連携できるArtifact Visualizationsという機能を備えています。ここでは、TFDVを使ったデータの可視化を例に使い方を解説します。

  • TFDVによるデータの可視化
    まず、パイプラインの実行結果画面を開きます。次に、「statisticsgen」のステップをクリックし、「Visualizations」タブを選択します。
図2-12:パイプライン実行結果画面

図2-12:パイプライン実行結果画面

Visualizationsタブの画面下部にある「create visualizations manually」をクリックすると「Visualization Creator」画面が開きます。

図2-13:Visualization Creator画面

図2-13:Visualization Creator画面

「Visualization Creator」画面では、Typeに「CUSTOM」を選択すると、独自のコードを入力できるテキストフィールドが表示されます。このテキストフィールドに次のようなTFDVのコードを記述します。

import os
import tensorflow_data_validation as tfdv
from tensorflow_data_validation.utils import io_util
from tensorflow_metadata.proto.v0 import statistics_pb2

#アップロードされた生成物のMinIO上のパスを入力する
previous_result_path = 's3://census-income/pipelines/tfx_census_income/StatisticsGen/statistics/9/Split-train/FeatureStats.pb' #前回のStaticsGenのArtifactを格納したMinIO上のパス
current_result_path = 's3://census-income/pipelines/tfx_census_income_2/StatisticsGen/statistics/27/Split-train/FeatureStats.pb' #今回のStatisticsGenのArtifactを格納したMinIO上のパス

prev_stats_proto = statistics_pb2.DatasetFeatureStatisticsList()
prev_stats_proto.ParseFromString(io_util.read_file_to_string(previous_result_path, binary_mode=True))
curr_stats_proto = statistics_pb2.DatasetFeatureStatisticsList()
curr_stats_proto.ParseFromString(io_util.read_file_to_string(current_result_path, binary_mode=True))

tfdv.visualize_statistics(lhs_statistics=prev_stats_proto,
                          rhs_statistics=curr_stats_proto,
                          lhs_name='PREVIOUS',
                          rhs_name='CURRENT'
                         )

上記のコードは、MinIOに書き出されたStatisticsGenが計算した統計値などの出力結果(Artifact)を今回実行したものと前回実行したもので、可視化し比較するコード例となっています。

コードを入力した後に「Generate Visualization」をクリックすると可視化した結果が表示されます。

図2-14:可視化した結果(青が前回の統計値、橙が今回の統計値)

図2-14:可視化した結果(青が前回の統計値、橙が今回の統計値)

なお、上述のコード例で指定したコンポーネントの出力結果が格納されているMinIO上のパスは、「Visualizations」の「Outputs」より確認できます。

図2-15:Visualizations 画面(Outputs項目)

図2-15:Visualizations 画面(Outputs項目)

このようにKubeflow Pipelinesでパイプラインを自動化しつつも、Artifact Visualizations機能で「パイプラインに新しく取り込まれたデータと前回のデータを可視化し比較する」などのユースケースに対応できます。

モデルの学習に使われたデータの系統来歴を追跡する

機械学習パイプラインを運用するなかで「このモデルはどのデータを使って作成されたのか」や「このモデルはどのデータ変換処理を経て作られたのか」などの質問に答えなくてはならないケースがあります。これは特にモデルのレビューや監査において求められることが多いでしょう。この質問に答えるには、使用したデータや出力先などのメタデータを管理しておく必要があります。幸いにもTFXはこのようなメタデータをMLMDで自動的に記録することができます。さらにKubeflow Pipelinesを使うとMetadata Storeで一元管理できることに加え、このメタデータを簡単に参照できるMetadata UIを利用できます。

  • Artifacts 画面を表示
    まず、Pipelines UIの左ペインの「Artifacts」を選択します。
図2-16:Artifact一覧画面

図2-16:Artifact一覧画面

次に、表示された一覧からメタデータを参照したいArtifactを選択します。

図2-17:Artifact一覧画面(Artifactの選択)

図2-17:Artifact一覧画面(Artifactの選択)

ここでは出力済みのモデル(PushedModel)を選択し、メタデータを参照します。「Name」をクリックすることで、メタデータ確認画面を表示することができます。

図2-18:メタデータ確認画面

図2-18:メタデータ確認画面

このメタデータ確認画面に表示されている「URI」にて、実行したパイプラインによってアップロードされたモデルの格納先を確認することができます。さらに「Lineage Explorer」を選択すると系統来歴を追跡できるLineage Explorer画面が表示されます。

  • Lineage Explorer

Lineage Explorerの画面では、自身のArtifactを示す「Target」とそのArtifactを出力したコンポーネントの入力となる「Input Artifact」、後続のコンポーネントが存在する場合は、「Output Artifact」が表示されます。

図2-19:Lineage Explorer

図2-19:Lineage Explorer

図2-19の赤枠で囲まれた■の部分をクリックしていくことで、パイプラインのArtifactをたどることができます。

図2-20:Lineage Explorer(変換処理までたどった結果)

図2-20:Lineage Explorer(変換処理までたどった結果)

図2-20のように、Artifactをたどることで、どのコンポーネントでどのような処理を経てモデルが作成されたかを追跡できます。

図2-21:Lineage Explorer(入力データ取り込みまでたどった結果)

図2-21:Lineage Explorer(入力データ取り込みまでたどった結果)

そして、入力データを取り込むコンポーネントのExampleGenまでたどることで、モデルを学習した時のデータセットを確認できます。図2-21は実際にExampleGenまでたどった結果となります。赤枠の部分をクリックすることで、メタデータ確認画面を開くことができます。

図2-22:ExampleGenのメタデータ確認画面

図2-22:ExampleGenのメタデータ確認画面

ExampleGenのメタデータを参照してみると、次の項目が確認できます。

  • データセットが格納されたMinIO上のパス(input_base):s3://census-income/data/
  • 入力データセットのパターン(input_config):span-{SPAN}/v{VERSION}/*
  • 使用したデータセットのspanの値(span):1
  • 使用したデータセットのversionの値(version):1

このようにKubeflow Pipelinesが提供するMetadata UIを利用することにより「モデルの学習に使われたデータの系統来歴を追跡する」といったユースケースに対応できます。

おわりに

今回は、TFXを使って構築した機械学習パイプラインをKubeflow Pipelinesにデプロイし実行する手順とその運用において役に立つ機能を解説しました。Kubeflow Pipelinesを使うことで、パイプラインのオーケストレーションのみならず、運用面でも大きなメリットを得られるかと考えています。次回は、機械学習に関わる全体のワークフローのうち「サービス運用」で実施するモデルのサービングについて解説していきます。

(補足)カスタムイメージの利用とKubeflowへの追加設定

本稿の解説内で個別に設定が必要な箇所を次に記載しています。

カスタムイメージの利用

Kubeflow Pipelines でパイプラインを実行する際、個別にライブラリなどを追加している場合は、予めパッケージングしたコンテナイメージを作成しコンテナレジストリに登録する必要があります。

下記の例で利用するAmazon Elastic Container Registry(ECR)のセットアップや使い方については、AWS公式ドキュメントを参照してください。

  • Amazon ECRのリポジトリ作成

はじめにAWSマネージメントコンソールでリポジトリを作成します。

図3-1:Amazon ECRリポジトリ作成画面

図3-1:Amazon ECRリポジトリ作成画面

  • Dockerfileを作成
    次にDockerfileを作成します。個別に追加ライブラリがある場合は、RUNコマンドで記述します。
cat <<EOF > Dockerfile.tfx-kubeflow-pipeline
FROM tensorflow/tfx:1.2.1
RUN pip3 install boto3==1.20.5 keras-tuner==1.0.2
EOF
  • コンテナイメージをビルドし、AWS ECRにPushします。
aws ecr get-login-password --region us-east-1 | sudo docker login --username AWS --password-stdin <AccountID>.dkr.ecr.us-east-1.amazonaws.com
sudo docker build -t tfx-kubeflow-pipeline . -f Dockerfile.tfx-kubeflow-pipeline
sudo docker tag tfx-kubeflow-pipeline:latest <AccountID>.dkr.ecr.us-east-1.amazonaws.com/tfx-kubeflow-pipeline:1.0
sudo docker push <AccountID>.dkr.ecr.us-east-1.amazonaws.com/tfx-kubeflow-pipeline:1.0

※<AccountID>は利用する方のAWSアカウントに置き換えてください。

Kubeflow v1.2.0利用時における追加設定

本稿は、Kubeflow v1.2.0を前提に解説していますが、Artifact Visualizationなどの機能でMinIOに接続するには、Pipelines UIのPodに対し接続情報を設定する必要があります。

  • Pipeline UIのPodに対する設定
$ kubectl edit deployment ml-pipeline-visualizationserver -n anonymous

追加内容(+の部分を追加する)
    spec:
      containers:
      - image: gcr.io/ml-pipeline/visualization-server:1.0.4
        imagePullPolicy: IfNotPresent
        name: ml-pipeline-visualizationserver
+        env:
+        - name: S3_ENDPOINT
+          value: http://minio-service.kubeflow.svc.cluster.local:9000
+        - name: AWS_REGION
+          value: ap-northeast-1
+        - name: AWS_ACCESS_KEY_ID
+          valueFrom:
+            secretKeyRef:
+              key: accesskey
+              name: mlpipeline-minio-artifact
+        - name: AWS_SECRET_ACCESS_KEY
+          valueFrom:
+            secretKeyRef:
+              key: secretkey
+              name: mlpipeline-minio-artifact
        ports:
        - containerPort: 8888
          protocol: TCP
著者
張替 清音(はりがえ きよなり)
NTTデータ先端技術株式会社

ソフトウェアソリューション事業本部 AIソリューション事業部 ビッグデータ基盤担当

2017年入社。HadoopやSparkといったOSSのビッグデータ基盤の導入支援や技術開発を経て、現在はサイバーセキュリティ対策のためのデータ分析基盤の構築や、 OSSをベースとしたクラウドネイティブなデータ分析・活用基盤に関する技術検証やソリューション開発に従事。

連載バックナンバー

AI・人工知能技術解説
第9回

機械学習モデルの継続的な改善に向けて

2022/6/13
連載の最終回となる今回は、機械学習モデルの開発と運用におけるパイプライン全体を協調動作させモデルを継続的に改善する仕組みについて解説します。
AI・人工知能技術解説
第8回

KFServingで機械学習モデルをサービング

2022/4/27
連載の8回目となる今回は、学習済みモデルのデプロイの手順とその運用で利用するKubeflowの機能やコンポーネントについて解説します。
AI・人工知能技術解説
第7回

TFXを使った機械学習パイプラインの構築(デプロイ編)

2022/3/30
連載の7回目となる今回は、実装編で構築した機械学習パイプラインをKubeflow Pipelinesにデプロイし実行します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています