前書き
このチュートリアルは、TensorFlow Extended(TFX)を紹介し、独自のマシン学習パイプラインの作成方法を学習するのに役立つように設計されています。ローカルで実行され、TFXおよびTensorBoardとの統合、およびJupyterノートブックでのTFXとの相互作用を示します。
データセットを調べることから始めて、典型的なML開発プロセスに従い、最終的には完全に機能するパイプラインになります。その過程で、パイプラインをデバッグおよび更新し、パフォーマンスを測定する方法を探ります。
もっと詳しく知る
詳細については、 TFXユーザーガイドを参照してください。
ステップバイステップ
典型的なML開発プロセスに従って、段階的に作業することにより、パイプラインを徐々に作成します。手順は次のとおりです。
前提条件
- Linux / MacOS
- Virtualenv
- Python 3.5+
- ギット
必要なパッケージ
環境によっては、いくつかのパッケージをインストールする必要がある場合があります。
sudo apt-get install \
build-essential libssl-dev libffi-dev \
libxml2-dev libxslt1-dev zlib1g-dev \
python3-pip git software-properties-common
Python 3.6を実行している場合は、python3.6-devをインストールする必要があります。
sudo apt-get install python3.6-dev
Python 3.7を実行している場合は、python3.7-devをインストールする必要があります。
sudo apt-get install python3.7-dev
さらに、システムのGCCバージョンが7未満の場合は、GCCを更新する必要があります。そうしないと、 airflow webserver
実行時にエラーが発生します。現在のバージョンは次の方法で確認できます。
gcc --version
GCCを更新する必要がある場合は、次のコマンドを実行できます。
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-7
sudo apt install g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7
MacOS環境
Python 3とgitがまだインストールされていない場合は、 Homebrewパッケージマネージャーを使用してインストールできます。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew update
brew install python
brew install git
構成によっては、MacOSでAirflowの実行時にスレッドのフォークに問題が発生することがあります。これらの問題を回避するには、 ~/.bash_profile
を編集して、ファイルの最後に次の行を追加する必要があります。
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
チュートリアル資料
このチュートリアルのコードは、 https : //github.com/tensorflow/tfx/tree/master/tfx/examples/airflow_workshopで入手できます。
コードは作業中のステップごとに編成されているため、各ステップには、必要なコードとその処理方法の説明があります。
チュートリアルファイルには、行き詰まった場合に備えて、演習と演習の解決策の両方が含まれています。
運動
- taxi_pipeline.py
- taxi_utils.py
- タクシーDAG
解決
- taxi_pipeline_solution.py
- taxi_utils_solution.py
- taxi_solution DAG
あなたがしていること
TFXを使用してMLパイプラインを作成する方法を学習しています
- TFXパイプラインは、本番MLアプリケーションをデプロイする場合に適しています
- データセットが大きい場合、TFXパイプラインが適切です
- TFXパイプラインは、トレーニング/サービスの一貫性が重要な場合に適しています
- TFXパイプラインは、推論のバージョン管理が重要な場合に適しています
- Googleは本番MLにTFXパイプラインを使用しています
あなたは典型的なML開発プロセスに従っています
- データの取り込み、理解、およびクリーニング
- 機能工学
- トレーニング
- モデルのパフォーマンスを分析する
- 泡立て、すすぎ、繰り返し
- 生産の準備ができました
各ステップのコードを追加する
チュートリアルは、すべてのコードがファイルに含まれるように設計されていますが、手順3〜7のすべてのコードはコメント化され、インラインコメントでマークされています。インラインコメントは、コード行がどのステップに適用されるかを識別します。たとえば、ステップ3のコードには、コメント# Step 3
マークが付いています。
各ステップに追加するコードは、通常、コードの3つの領域に分類されます。
- 輸入
- DAG構成
- create_pipeline()呼び出しから返されたリスト
- taxi_utils.pyのサポートコード
チュートリアルを進めると、現在作業しているチュートリアルステップに適用されるコード行のコメントが解除されます。これにより、そのステップのコードが追加され、パイプラインが更新されます。その際、コメントを外しているコードを確認することを強くお勧めします。
シカゴのタクシーデータセット
シカゴ市からリリースされたタクシー旅行データセットを使用しています。
データセットの詳細については、GoogleBigQueryをご覧ください。 BigQueryUIで完全なデータセットを調べます。
モデルの目標-バイナリ分類
顧客は20%以上または20%未満のチップを払いますか?
ステップ1:環境をセットアップする
セットアップスクリプト( setup_demo.sh
)TFXとインストールの気流を、このチュートリアルのために仕事に簡単にそれを作る方法で、エアフローを設定します。
シェル内:
cd
virtualenv -p python3 tfx-env
source ~/tfx-env/bin/activate
git clone https://github.com/tensorflow/tfx.git
cd ~/tfx
# These instructions are specific to the 0.21 release
git checkout -f origin/r0.21
cd ~/tfx/tfx/examples/airflow_workshop/setup
./setup_demo.sh
setup_demo.sh
を確認して、何がsetup_demo.sh
れているかを確認する必要があります。
ステップ2:最初のパイプラインスケルトンを起動する
こんにちは世界
シェル内:
# Open a new terminal window, and in that window ...
source ~/tfx-env/bin/activate
airflow webserver -p 8080
# Open another new terminal window, and in that window ...
source ~/tfx-env/bin/activate
airflow scheduler
# Open yet another new terminal window, and in that window ...
# Assuming that you've cloned the TFX repo into ~/tfx
source ~/tfx-env/bin/activate
cd ~/tfx/tfx/examples/airflow_workshop/notebooks
jupyter notebook
このステップでJupyterノートブックを起動しました。後で、このフォルダーでノートブックを実行します。
ブラウザの場合:
- ブラウザを開き、http://127.0.0.1:8080にアクセスします
トラブルシューティング
WebブラウザへのAirflowコンソールのロードに問題がある場合、またはairflow webserver
実行時にエラーが発生した場合は、ポート8080で別のアプリケーションが実行されている可能性があります。これはAirflowのデフォルトのポートですが、変更できます。使用されていない他のユーザーポートに。たとえば、ポート7070でAirflowを実行するには、次のコマンドを実行できます。
airflow webserver -p 7070
DAGビューボタン
- 左側のボタンを使用してDAGを有効にします
- 変更を加えるときは、右側のボタンを使用してDAGを更新します
- 右側のボタンを使用してDAGをトリガーします
- タクシーをクリックして、DAGのグラフビューに移動します
エアフローCLI
Airflow CLIを使用して、DAGを有効にしてトリガーすることもできます。
# enable/disable
airflow pause <your DAG name>
airflow unpause <your DAG name>
# trigger
airflow trigger_dag <your DAG name>
パイプラインが完了するのを待っています
DAGビューでパイプラインをトリガーした後、パイプラインが処理を完了するのを見ることができます。各コンポーネントが実行されると、DAGグラフのコンポーネントの輪郭の色が変化してその状態が表示されます。コンポーネントの処理が完了すると、アウトラインが濃い緑色に変わり、処理が完了したことを示します。
これまでのところ、パイプラインにはCsvExampleGenコンポーネントしかないため、濃い緑色に変わるまで待つ必要があります(約1分)。
ステップ3:データに飛び込む
データサイエンスまたはMLプロジェクトの最初のタスクは、データを理解してクリーンアップすることです。
- 各機能のデータ型を理解する
- 異常と欠落値を探します
- 各機能の分布を理解する
コンポーネント
- ExampleGenは、入力データセットを取り込んで分割します。
- StatisticsGenは、データセットの統計を計算します。
- SchemaGen SchemaGenは統計を調べ、データスキーマを作成します。
- ExampleValidatorは、データセット内の異常と欠落している値を探します。
エディターの場合:
- 〜/
taxi_pipeline.py
/ dagsで、taxi_pipeline.py
Step 3
とマークされた行のコメントを解除しtaxi_pipeline.py
- コメントを外したコードを確認してください
ブラウザの場合:
- 左上隅の[DAG]リンクをクリックして、AirflowのDAGリストページに戻ります。
- タクシーDAGの右側にある更新ボタンをクリックします
- 「DAG [タクシー]がデイジーのように新鮮になりました」と表示されます。
- タクシーをトリガーする
- パイプラインが完了するのを待つ
- すべてダークグリーン
- 右側の更新またはページの更新を使用します
ジュピターに戻る:
以前は、ブラウザタブでJupyterセッションを開いたjupyter notebook
を実行しました。次に、ブラウザのそのタブに戻ります。
- step3.ipynbを開きます
- ノートブックに従ってください
より高度な例
ここに示されている例は、実際には開始することだけを目的としています。より高度な例については、 TensorFlow Data ValidationColabを参照してください。
TFDVを使用してデータセットを探索および検証する方法の詳細については、tensorflow.orgの例を参照してください。
ステップ4:機能エンジニアリング
フィーチャエンジニアリングを使用して、データの予測品質を向上させたり、次元を削減したりできます。
- 機能の交差
- 語彙
- 埋め込み
- PCA
- カテゴリエンコーディング
TFXを使用する利点の1つは、変換コードを1回記述するだけで、結果の変換がトレーニングとサービングの間で一貫することです。
コンポーネント
- Transformは、データセットに対して機能エンジニアリングを実行します。
エディターの場合:
- 〜/
taxi_pipeline.py
/ dagsで、taxi_pipeline.py
とtaxi_utils.py
両方でStep 4
とマークされた行のコメントを解除します - コメントを外したコードを確認してください
ブラウザの場合:
- AirflowのDAGリストページに戻る
- タクシーDAGの右側にある更新ボタンをクリックします
- 「DAG [タクシー]がデイジーのように新鮮になりました」と表示されます。
- トリガータクシー
- パイプラインが完了するのを待つ
- すべてダークグリーン
- 右側の更新またはページの更新を使用します
Jupyterに戻る:
ブラウザの[Jupyter]タブに戻ります。
- step4.ipynbを開きます
- ノートブックに従ってください
より高度な例
ここに示されている例は、実際には開始することだけを目的としています。より高度な例については、 TensorFlow TransformColabを参照してください。
ステップ5:トレーニング
きれいで変換されたデータを使用してTensorFlowモデルをトレーニングします。
- ステップ4の変換を含めて、一貫して適用されるようにします
- 結果を本番用にSavedModelとして保存します
- TensorBoardを使用してトレーニングプロセスを視覚化して調査する
- また、モデルのパフォーマンスを分析するためにEvalSavedModelを保存します
コンポーネント
エディターの場合:
- 〜/
taxi_pipeline.py
/ dagsで、taxi_pipeline.py
とtaxi_utils.py
両方でStep 5
とマークされた行のコメントを解除します - コメントを外したコードを確認してください
ブラウザの場合:
- AirflowのDAGリストページに戻る
- タクシーDAGの右側にある更新ボタンをクリックします
- 「DAG [タクシー]がデイジーのように新鮮になりました」と表示されます。
- タクシーをトリガーする
- パイプラインが完了するのを待つ
- すべてダークグリーン
- 右側の更新またはページの更新を使用します
ジュピターに戻る:
ブラウザの[Jupyter]タブに戻ります。
- step5.ipynbを開きます
- ノートブックに従ってください
より高度な例
ここに示されている例は、実際には開始することだけを目的としています。より高度な例については、 TensorBoardチュートリアルを参照してください。
ステップ6:モデルのパフォーマンスを分析する
トップレベルの指標以上のものを理解する。
- ユーザーは、クエリに対してのみモデルのパフォーマンスを体験します
- データのスライスでのパフォーマンスの低下は、トップレベルのメトリックによって隠すことができます
- モデルの公平性は重要です
- 多くの場合、ユーザーまたはデータの主要なサブセットは非常に重要であり、小さい場合があります
- クリティカルだが異常な状態でのパフォーマンス
- インフルエンサーなどの主要なオーディエンスのパフォーマンス
- 現在生産中のモデルを交換する場合は、最初に新しいモデルの方が優れていることを確認してください
- 評価者は、モデルに問題がないかどうかをプッシャーコンポーネントに通知します
コンポーネント
- Evaluatorは、トレーニング結果の詳細な分析を実行し、モデルが本番環境にプッシュされるのに「十分に優れている」ことを確認します。
エディターの場合:
- 〜/
taxi_pipeline.py
/ dagsで、両方のtaxi_pipeline.py
Step 6
とマークされた行のコメントを解除します - コメントを外したコードを確認してください
ブラウザの場合:
- AirflowのDAGリストページに戻る
- タクシーDAGの右側にある更新ボタンをクリックします
- 「DAG [タクシー]がデイジーのように新鮮になりました」と表示されます。
- トリガータクシー
- パイプラインが完了するのを待つ
- すべてダークグリーン
- 右側の更新またはページの更新を使用します
ジュピターに戻る:
ブラウザの[Jupyter]タブに戻ります。
- step6.ipynbを開きます
- ノートブックに従ってください
より高度な例
ここに示されている例は、実際には開始することだけを目的としています。より高度な例については、 TFMAシカゴタクシーチュートリアルを参照してください。
ステップ7:生産の準備ができている
新しいモデルの準備ができたら、準備をします。
- プッシャーはSavedModelsをよく知られた場所に展開します
展開ターゲットは、よく知られた場所から新しいモデルを受け取ります
- TensorFlowサービング
- TensorFlow Lite
- TensorFlow JS
- TensorFlowハブ
コンポーネント
- プッシャーは、モデルをサービングインフラストラクチャにデプロイします。
エディターの場合:
- 〜/
taxi_pipeline.py
/ dagsで、両方のtaxi_pipeline.py
Step 7
とマークされた行のコメントを解除します - コメントを外したコードを確認してください
ブラウザの場合:
- AirflowのDAGリストページに戻る
- タクシーDAGの右側にある更新ボタンをクリックします
- 「DAG [タクシー]がデイジーのように新鮮になりました」と表示されます。
- トリガータクシー
- パイプラインが完了するのを待つ
- すべてダークグリーン
- 右側の更新またはページの更新を使用します
次のステップ
これで、モデルのトレーニングと検証がSavedModel
し、 ~/airflow/saved_models/taxi
ディレクトリの下にあるSavedModel
ファイルがエクスポートされました。これで、モデルの生産準備が整いました。これで、次のようなTensorFlowデプロイターゲットのいずれかにモデルをデプロイできます。
- TensorFlow Serving 、サーバーまたはサーバーファームでモデルを提供し、RESTやgRPC推論リクエストを処理します。
- TensorFlow Lite 、AndroidまたはiOSのネイティブモバイルアプリケーション、またはRaspberry Pi、IoT、またはマイクロコントローラーアプリケーションにモデルを含めるため。
- TensorFlow.js 、WebブラウザまたはNode.JSアプリケーションでモデルを実行するため。