TFXエアフローチュートリアル

概要

概要

このチュートリアルは、TensorFlow Extended (TFX) と Apache Airflow をオーケストレーターとして使用して、独自の機械学習パイプラインを作成する方法を学習できるように設計されています。これは Vertex AI Workbench 上で実行され、TFX および TensorBoard との統合と、Jupyter Lab 環境での TFX との相互作用を示しています。

あなたは何をするつもりですか?

TFX を使用して ML パイプラインを作成する方法を学習します。

  • TFX パイプラインは、有向非巡回グラフ (「DAG」) です。多くの場合、パイプラインを DAG と呼びます。
  • TFX パイプラインは、本番環境の ML アプリケーションをデプロイする場合に適しています
  • TFX パイプラインは、データセットが大きい場合、または大きくなる可能性がある場合に適しています
  • TFX パイプラインは、トレーニングとサービングの一貫性が重要な場合に適しています
  • TFX パイプラインは、推論のためのバージョン管理が重要な場合に適しています
  • Google は本番環境の ML に TFX パイプラインを使用しています

詳細については、 TFX ユーザー ガイドを参照してください。

一般的な ML 開発プロセスに従います。

  • データの取り込み、理解、クリーニング
  • 特徴エンジニアリング
  • トレーニング
  • モデルのパフォーマンスの分析
  • 泡立てて、すすぎ、の繰り返し
  • 生産準備完了

パイプライン オーケストレーション用の Apache Airflow

TFX オーケストレーターは、パイプラインによって定義された依存関係に基づいて、TFX パイプラインのコンポーネントをスケジュールする役割を担います。 TFX は、複数の環境およびオーケストレーション フレームワークに移植できるように設計されています。 TFX でサポートされている既定のオーケストレーターの 1 つがApache Airflowです。このラボでは、TFX パイプライン オーケストレーションに Apache Airflow を使用する方法を示します。 Apache Airflow は、ワークフローをプログラムで作成、スケジュール、監視するためのプラットフォームです。 TFX は Airflow を使用して、ワークフローをタスクの有向非巡回グラフ (DAG) として作成します。豊富なユーザー インターフェイスにより、実稼働環境で実行されているパイプラインを簡単に視覚化し、進行状況を監視し、必要に応じて問題をトラブルシューティングできます。 Apache Airflow ワークフローはコードとして定義されます。これにより、保守性、バージョン管理性、テスト性、協調性が向上します。 Apache Airflow は、バッチ処理パイプラインに適しています。軽量で習得が容易です。

この例では、Airflow を手動で設定して、インスタンスで TFX パイプラインを実行します。

TFX でサポートされている他の既定のオーケストレーターは、Apache Beam と Kubeflow です。 Apache Beamは、複数のデータ処理バックエンド (Beam Ruunners) で実行できます。 Cloud Dataflow は、TFX パイプラインの実行に使用できるビーム ランナーの 1 つです。 Apache Beam は、ストリーミング パイプラインとバッチ処理パイプラインの両方に使用できます。
Kubeflowは、Kubernetes での機械学習 (ML) ワークフローのデプロイをシンプル、ポータブル、スケーラブルにすることに特化したオープンソースの ML プラットフォームです。 Kubeflow は、TFFX パイプラインを Kubernetes クラスターにデプロイする必要がある場合に、それらのオーケストレーターとして使用できます。さらに、独自のカスタム オーケストレーターを使用して TFX パイプラインを実行することもできます。

Airflow の詳細については、こちらをご覧ください。

シカゴのタクシー データセット

タクシー.jpg

シカゴ.png

シカゴ市が公開したTaxi Trips データセットを使用します。

モデルの目標 - 二項分類

顧客のチップは 20% を超えますか、それとも少なくなりますか?

Google Cloud プロジェクトをセットアップする

[ラボを開始] ボタンをクリックする前に、次の手順をお読みください。ラボには時間制限があり、一時停止することはできません。 [ Start Lab ] をクリックすると開始されるタイマーは、Google Cloud リソースが利用可能になる時間を示します。

このハンズオン ラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境でラボのアクティビティを自分で行うことができます。これは、ラボの期間中にログインして Google Cloud にアクセスするために使用する新しい一時的な認証情報を提供することによって実現されます。

必要なものこのラボを完了するには、次のものが必要です。

  • 標準のインターネット ブラウザへのアクセス (Chrome ブラウザを推奨)。
  • ラボを完了する時間です。

ラボを開始して Google Cloud Console にサインインする方法1. [ Start Lab ] ボタンをクリックします。ラボの料金を支払う必要がある場合は、支払い方法を選択するためのポップアップが開きます。左側には、このラボで使用する必要がある一時的な資格情報が入力されたパネルがあります。

qwiksetup1.png

  1. ユーザー名をコピーし、[ Open Google Console ] をクリックします。ラボはリソースを起動し、サインインページを表示する別のタブを開きます。

qwiksetup2.png

ヒント:タブを別々のウィンドウで横に並べて開きます。

qwiksetup3.png

  1. サインインページで、左側のパネルからコピーしたユーザー名を貼り付けます。次に、パスワードをコピーして貼り付けます。
  1. 後続のページをクリックします。
  2. 利用規約に同意します。
  • 回復オプションや 2 要素認証を追加しないでください (これは一時的なアカウントであるため)。

  • 無料トライアルにサインアップしないでください。

しばらくすると、Cloud Console がこのタブで開きます。

qwiksetup4.png

クラウド シェルを有効にする

Cloud Shell は、開発ツールを搭載した仮想マシンです。永続的な 5 GB のホーム ディレクトリを提供し、Google Cloud 上で実行されます。 Cloud Shell は、Google Cloud リソースへのコマンドライン アクセスを提供します。

Cloud Console の右上のツールバーで、[ Cloud Shell をアクティブにする] ボタンをクリックします。

qwiksetup5.png

[続行]をクリックします。

qwiksetup6.png

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは _PROJECT IDに設定されています。例えば:

qwiksetup7.png

gcloudは、Google Cloud のコマンドライン ツールです。 Cloud Shell にプリインストールされており、タブ補完をサポートしています。

次のコマンドを使用して、アクティブなアカウント名を一覧表示できます。

gcloud auth list

(出力)

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net アクティブなアカウントを設定するには、次を実行します: $ gcloud config set account ACCOUNT

次のコマンドでプロジェクト ID を一覧表示できます: gcloud config list project (出力)

[コア] プロジェクト =

(出力例)

[コア] プロジェクト = qwiklabs-gcp-44776a13dea667a6

gcloud の完全なドキュメントについては、 gcloud コマンドライン ツールの概要を参照してください。

Google Cloud サービスを有効にする

  1. Cloud Shell で gcloud を使用して、ラボで使用するサービスを有効にします。 gcloud services enable notebooks.googleapis.com

Vertex Notebook インスタンスをデプロイする

  1. ナビゲーション メニューをクリックし、 Vertex AIに移動してからWorkbenchに移動します。

vertex-ai-workbench.png

  1. [ノートブック インスタンス] ページで、[新しいノートブック] をクリックします。

  2. [Customize instance] メニューで [ TensorFlow Enterprise ] を選択し、 TensorFlow Enterprise 2.x (with LTS) > Without GPUsのバージョンを選択します。

vertex-notebook-create-2.png

  1. [新しいノートブック インスタンス] ダイアログで、鉛筆アイコンをクリックしてインスタンス プロパティを編集します。

  2. [インスタンス名]に、インスタンスの名前を入力します。

  3. Regionにはus-east1を選択し、 Zoneには選択したリージョン内のゾーンを選択します。

  4. [マシン構成] まで下にスクロールし、[マシンの種類] で [ e2-standard-2]を選択します。

  5. 残りのフィールドはデフォルトのままにして、[ Create ] をクリックします。

数分後、Vertex AI コンソールにインスタンス名が表示され、続いてOpen Jupyterlabが表示されます。

  1. [ JupyterLab を開く] をクリックします。 JupyterLab ウィンドウが新しいタブで開きます。

環境をセットアップする

ラボ リポジトリのクローンを作成する

次に、JupyterLab インスタンスでtfxリポジトリのクローンを作成します。 1. JupyterLab で、ターミナルアイコンをクリックして新しいターミナルを開きます。

注:プロンプトが表示されたら、[推奨ビルド] の [ Cancel ] をクリックします。

  1. tfx Github リポジトリのクローンを作成するには、次のコマンドを入力してEnterを押します。
git clone https://github.com/tensorflow/tfx.git
  1. リポジトリのクローンを作成したことを確認するには、 tfxディレクトリをダブルクリックし、その内容が表示されることを確認します。

repo-directory.png

ラボの依存関係をインストールする

  1. 以下を実行してtfx/tfx/examples/airflow_workshop/taxi/setup/フォルダーに移動し、./ ./setup_demo.shを実行してラボの依存関係をインストールします。
cd ~/tfx/tfx/examples/airflow_workshop/taxi/setup/
./setup_demo.sh

上記のコードは

  • 必要なパッケージをインストールします。
  • ホームフォルダーにairflowフォルダーを作成します。
  • dagsフォルダーをtfx/tfx/examples/airflow_workshop/taxi/setup/フォルダーから~/airflow/ airflow/ フォルダーにコピーします。
  • csv ファイルをtfx/tfx/examples/airflow_workshop/taxi/setup/dataから~/airflow/data airflow/data にコピーします。

airflow-home.png

Airflow サーバーの構成

ブラウザで Airflow サーバーにアクセスするためのファイアウォール ルールを作成する

  1. <a href="https://console.cloud.google.com/networking/firewalls/list">https://console.cloud.google.com/networking/firewalls/list</a>にアクセスして、プロジェクト名は適切に選択されています
  2. 上部のCREATE FIREWALL RULEオプションをクリックします

ファイアウォールルール.png

[ファイアウォールの作成] ダイアログで、以下の手順に従います。

  1. Nameairflow-tfxます。
  2. [優先度]で、 1を選択します。
  3. [ターゲット]で、[ All instances in the network ] を選択します。
  4. [送信元 IPv4 範囲] には、 0.0.0.0/0 /0 を選択します
  5. Protocols and portsで、 tcpをクリックし、 tcpの横のボックスに7000と入力します。
  6. [ Createをクリックします。

create-firewall-dialog.png

シェルから気流サーバーを実行する

Jupyter Lab ターミナル ウィンドウでホーム ディレクトリに移動し、airflow airflow users createコマンドを実行して、Airflow の管理者ユーザーを作成します。

cd
airflow users  create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin

次に、 airflow webserverairflow schedulerコマンドを実行してサーバーを実行します。ファイアウォールの通過が許可されているため、ポート7000を選択します。

nohup airflow webserver -p 7000 &> webserver.out &
nohup airflow scheduler &> scheduler.out &

外部 IP を取得する

  1. Cloud Shell で、 gcloudを使用して外部 IP を取得します。
gcloud compute instances list

gcloud-instance-ip.png

DAG/パイプラインの実行

ブラウザで

ブラウザを開き、http:// にアクセスします。 :7000

  • ログイン ページで、 airflow users createコマンドの実行時に選択したユーザー名 ( admin ) とパスワード ( admin ) を入力します。

airflow-login.png

Airflow は、Python ソース ファイルから DAG を読み込みます。各ファイルを取得して実行します。次に、そのファイルから DAG オブジェクトをロードします。 DAG オブジェクトを定義するすべての.pyファイルは、Airflow ホームページにパイプラインとして一覧表示されます。

このチュートリアルでは、Airflow は DAG オブジェクトの~/airflow/dags/フォルダーをスキャンします。

~/airflow/dags/taxi_pipeline.pyを開いて一番下までスクロールすると、DAG オブジェクトを作成し、 DAGという名前の変数に格納していることがわかります。したがって、以下に示すように、Airflow ホームページにパイプラインとしてリストされます。

dag-home-full.png

タクシーをクリックすると、DAG のグリッド ビューにリダイレクトされます。上部の [ Graph ] オプションをクリックして、DAG のグラフ ビューを取得できます。

airflow-dag-graph.png

タクシー パイプラインをトリガーする

ホームページには、DAG の操作に使用できるボタンが表示されます。

dag-buttons.png

アクションヘッダーの下で、トリガーボタンをクリックしてパイプラインをトリガーします。

タクシーDAGページで、右側のボタンを使用して、パイプラインの実行中に DAG のグラフ ビューの状態を更新します。さらに、自動更新を有効にして、状態が変化したときにグラフ ビューを自動的に更新するように Airflow に指示することもできます。

dag-button-refresh.png

ターミナルでAirflow CLIを使用して、DAG を有効にしてトリガーすることもできます。

# enable/disable
airflow pause <your DAG name>
airflow unpause <your DAG name>

# trigger
airflow trigger_dag <your DAG name>

パイプラインが完了するのを待っています

パイプラインをトリガーした後、DAG ビューで、実行中のパイプラインの進行状況を確認できます。各コンポーネントが実行されると、DAG グラフ内のコンポーネントの輪郭の色が変化して、その状態が示されます。コンポーネントの処理が完了すると、アウトラインが濃い緑色に変わり、処理が完了したことが示されます。

dag-step7.png

コンポーネントを理解する

次に、このパイプラインのコンポーネントを詳細に見ていき、パイプラインの各ステップで生成される出力を個別に見ていきます。

  1. JupyterLab で~/tfx/tfx/examples/airflow_workshop/taxi/notebooks/に移動します

  2. notebook.ipynb を開きます。 notebook-ipynb.png

  3. ノートブックでラボを続行し、実行( 実行ボタン.png ) アイコンを画面上部に表示します。または、 SHIFT + ENTERを使用してセル内のコードを実行できます。

説明を読んで、各セルで何が起こっているかを理解してください。