チェックポイント
Notebook created
/ 20
Emoji pipeline has completed
/ 40
End-to-end ML pipeline training job has started
/ 40
Vertex Pipelines: Qwik Start
GSP965
概要
パイプラインを使用すると、ML ワークフローを自動化し、再現可能性を確保することができます。Vertex AI は、Google Cloud 全体の ML サービスを統合してシームレスな開発エクスペリエンスを提供します。以前は、AutoML でトレーニングしたモデルやカスタムモデルには、個別のサービスを介してアクセスする必要がありました。Vertex AI は、それらを他の新しいプロダクトとともに 1 つの API へと統合します。また、Vertex AI には Vertex Pipelines などのさまざまな MLOps プロダクトが含まれています。このラボでは、Vertex Pipelines による ML パイプラインの作成方法と実行方法について学びます。
ML パイプラインはなぜ有用か?
詳細に入る前に、なぜパイプラインを使用するのかについて理解しましょう。データの処理、モデルのトレーニング、ハイパーパラメータのチューニング、評価、モデルのデプロイを含む ML ワークフローを構築しているとします。これらのステップにはそれぞれ異なる依存関係があり、ワークフロー全体をモノリスとして扱うと、扱いづらくなる場合があります。また、ML プロセスを拡張する際は、チームの他のメンバーがワークフローを実行し、コーディングに参加できるように、ML ワークフローを共有したいところですが、信頼性と再現性のあるプロセスがなければ困難です。パイプラインでは、ML プロセスの各ステップがそれぞれのコンテナとなります。これにより、ステップを独立して開発し、各ステップからの入力と出力を再現可能な方法で追跡できます。また、新しいトレーニング データが利用可能になったときなど、クラウド環境内の他のイベントに基づいてパイプラインの実行をスケジュールまたはトリガーすることもできます。
目標
このラボでは、次の方法について学びます。
- Kubeflow Pipelines SDK を使用してスケーラブルな ML パイプラインを構築する
- 3 つのステップからなり、入力としてテキストを受け取る簡単なパイプラインを作成して実行する
- AutoML 分類モデルのトレーニング、評価、デプロイを行うパイプラインを作成して実行する
- google_cloud_pipeline_components ライブラリを通して提供される事前構築済みコンポーネントを使用して Vertex AI サービスとやり取りする
- Cloud Scheduler でパイプライン ジョブのスケジュールを設定する
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
タスク 1. Vertex ノートブック インスタンスを作成する
-
ナビゲーション メニューをクリックします。
-
[Vertex AI] に移動し、[ワークベンチ] に移動します。
-
ノートブック インスタンス ページで、[ユーザー管理のノートブック] タブに移動し、
ai-notebook
が完全に作成されるまで待ちます。
- インスタンスが作成されたら、[JUPYTERLAB を開く] を選択します。
タスク 2. Vertex Pipelines の設定
Vertex Pipelines を使用するためには、いくつかのライブラリを追加でインストールする必要があります。
- Kubeflow Pipelines: これはパイプラインの構築に使用する SDK です。Vertex Pipelines は、Kubeflow Pipelines と TFX の両方で構築されたパイプラインの実行をサポートします。
- Google Cloud パイプライン コンポーネント: このライブラリは、パイプラインの各ステップで Vertex AI サービスとのやり取りを簡単にする事前構築済みコンポーネントを提供します。
ステップ 1: Python ノートブックを作成してライブラリをインストールする
- ノートブック インスタンスのランチャー メニューから [Python 3] を選択して、ノートブックを作成します。
-
ランチャー メニューにアクセスするには、ノートブック インスタンスの左上にある [+] 記号をクリックします。
-
このラボに必要な両方のサービスをインストールするには、最初にノートブックのセルでユーザーフラグを設定します。
- 続いて、ノートブックから次のコードを実行します。
- これらのパッケージをインストールした後、カーネルを再起動する必要があります。
- 最後に、パッケージを正しくインストールしたことを確認します。KFP SDK のバージョンは 1.6 以上である必要があります。
ステップ 2: プロジェクト ID とバケットを設定する
このラボ全体を通じて、自分の Cloud プロジェクト ID と前に作成したバケットを参照します。以下でこれらを格納する変数をそれぞれ作成します。
- プロジェクト ID がわからない場合は、次のコードを実行して取得できる可能性があります。
- 次に、バケット名を格納する変数を作成します。
ステップ 3: ライブラリをインポートする
- このラボ全体を通して使用するライブラリをインポートするために、次のコードを追加します。
ステップ 4: 定数を定義する
- パイプラインを構築する前に行う必要がある最後の作業は、いくつかの定数を定義することです。
PIPELINE_ROOT
は、パイプラインによって作成されるアーティファクトを書き込む Cloud Storage のパスです。ここではリージョンとしてを使用しますが、バケットの作成時に別の region
を使用した場合は、次のコード内の REGION 変数を更新します。
上のコードを実行すると、パイプラインのルート ディレクトリが表示されます。これは、パイプラインからのアーティファクトが書き込まれる Cloud Storage の場所です。これは gs://<bucket_name>/pipeline_root/
という形式になります。
タスク 3. 最初のパイプラインを作成する
-
KFP SDK を使用して短いパイプラインを作成します。このパイプラインは ML 関連の処理は何も行いません(それについては後で学習します)。この演習では次の方法について学びます。
- KFP SDK でカスタム コンポーネントを作成する方法
- Vertex Pipelines でパイプラインを実行してモニタリングする方法
2 つの出力(商品名と絵文字の説明)を使用して 1 つの文を表示するパイプラインを作成します。このパイプラインは 3 つのコンポーネントで構成されます。
-
product_name
: このコンポーネントは商品名を入力として受け取り、その文字列を出力として返します。 -
emoji
: このコンポーネントは絵文字の説明テキストを受け取り、それを絵文字に変換します。たとえば、✨ のテキストコードは「sparkles」です。このコンポーネントでは絵文字ライブラリを使用しており、パイプラインで外部依存関係を管理する方法を見ることができます。 -
build_sentence
: この最後のコンポーネントは、前の 2 つの出力を使用して、絵文字を含む文を作成します。たとえば、「Vertex Pipelines is ✨」のような出力が得られます。
ステップ 1: Python の関数に基づくコンポーネントを作成する
KFP SDK を使用して、Python の関数に基づくコンポーネントを作成できます。最初に product_name
コンポーネントを作成します。このコンポーネントは文字列を入力として受け取り、その文字列を返す単純なものです。
- ノートブックに次のコードを追加します。
構文を詳しく見ていきます。
-
@component
デコレータにより、この関数はパイプラインの実行時にコンポーネントへとコンパイルされます。カスタム コンポーネントを記述するときには、これを使用します。 -
base_image
パラメータは、このコンポーネントが使用するコンテナ イメージを指定します。 -
output_component_file
パラメータはオプションで、コンパイルしたコンポーネントを書き込む yaml ファイルを指定します。セルの実行後、そのファイルがノートブック インスタンスに書き込まれているのを確認できます。このコンポーネントを他のユーザーと共有したい場合は、生成した yaml ファイルをそのユーザーに送信し、次のコードでそれを読み込んでもらうことができます。
関数定義の後の -> str
は、このコンポーネントの出力タイプを指定します。
ステップ 2: 追加で 2 つのコンポーネントを作成する
- パイプラインを完成させるために、あと 2 つのコンポーネントを作成します。最初のコンポーネントは文字列を入力として受け取り、それに対応する絵文字がある場合は、文字列を絵文字に変換します。渡された入力テキストと結果の絵文字を含むタプルを返します。
このコンポーネントは前のものよりも多少複雑です。注意点は次のとおりです。
-
packages_to_install
パラメータは、このコンテナの外部ライブラリ依存関係をコンポーネントに示します。ここでは、emoji というライブラリを使用しています。 - このコンポーネントは
Outputs
という名前のNamedTuple
を返します。このタプルに含まれる各文字列には、emoji_text
およびemoji
というキーがあります。次のコンポーネントで、これらを使用して出力にアクセスします。
- このパイプラインの最後のコンポーネントは、最初の 2 つのコンポーネントの出力を組み合わせて 1 つの文字列を返します。
このコンポーネントは、前のステップで定義した出力を使用することがなぜわかるのだろうと疑問に思われるかもしれません。
重要なポイントです。次のステップで全体をまとめます。
ステップ 3: コンポーネントをパイプラインへとまとめる
ここまでのコンポーネント定義により、パイプラインの定義でステップの作成に使用できるファクトリ関数が作成されました。
-
パイプラインを設定するには、
@dsl.pipeline
デコレータを使用し、パイプラインの名前と説明を指定して、パイプラインのアーティファクトを書き込むルートパスを指定します。アーティファクトとは、パイプラインで生成される出力ファイルを意味します。これは、この簡単なパイプラインでは生成されませんが、次のパイプラインでは生成されます。 -
次のコードブロックで、
intro_pipeline
関数を定義します。ここでは、最初の各パイプライン ステップへの入力と、ステップを互いにどのように接続するかを指定します。
-
product_task
は商品名を入力として受け取ります。ここでは「Vertex Pipelines」を渡していますが、これは任意の名前に変更できます。 -
emoji_task
は絵文字のテキストコードを入力として受け取ります。これも任意の文字列に変更できます。たとえば、「party_face」は 🥳 という絵文字を表します。このコンポーネントとproduct_task
コンポーネントはどちらも、それらに入力を与えるステップがないため、パイプラインを定義するときに手動で入力を指定します。 - パイプラインの最後のステップである
consumer_task
には、3 つの入力パラメータがあります。-
product_task
の出力。このステップは 1 つの出力のみを生成するため、product_task.output
を介してそれを参照できます。 -
emoji_task
ステップのemoji
出力。出力パラメータに名前を付けたemoji
コンポーネントの定義を参照してください。 - 同様に、
emoji
コンポーネントからのemoji_text
名前付き出力。絵文字に対応しないテキストがパイプラインに渡された場合は、このテキストを使用して文を作成します。
-
ステップ 4: パイプラインをコンパイルして実行する
- パイプラインを定義したら、次はそれをコンパイルします。次のコードで、パイプラインの実行に使用する JSON ファイルを生成します。
- 次に、API クライアントをインスタンス化します。
- 最後に、パイプラインを実行します。
パイプラインを実行すると、コンソールでパイプラインの実行結果を見るためのリンクが生成されます。完了すると、次のように表示されます。
- このパイプラインの実行には 5~6 分間かかります。完了したら、
build-sentence
コンポーネントをクリックして最終出力を表示できます。
KFP SDK と Vertex Pipelines の機能に習熟したことで、他の Vertex AI サービスを使用して ML モデルの作成やデプロイを行うパイプラインを構築できるようになりました。
タスク 4. エンドツーエンドの ML パイプラインを作成する
それでは、最初の ML パイプラインを構築しましょう。このパイプラインでは、UCI Machine Learning の Dry Beans データセットを使用します(出典: KOKLU, M. および OZKAN, I.A.(2020 年)「Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques」、Computers and Electronics in Agriculture、174、105507。DOI)。
これは表形式のデータセットです。パイプラインでこのデータセットを使用し、豆をその特徴に基づいて 7 種類に分類する AutoML モデルのトレーニング、評価、デプロイを行います。
このパイプラインは次の処理を行います。
- Vertex AI 内にデータセットを作成する
- AutoML を使用して表形式の分類モデルをトレーニングする
- このモデルの評価指標を取得する
- 評価指標に基づき、Vertex Pipelines で条件付きロジックを使用して、モデルをデプロイするかどうかを決定する
- Vertex Prediction を使用してモデルをエンドポイントにデプロイする
これらの各ステップがコンポーネントとなります。パイプラインのほとんどのステップでは、このラボで前にインポートした google_cloud_pipeline_components
ライブラリを介して Vertex AI サービス用の事前構築済みコンポーネントを使用します。
このセクションでは、最初に 1 つのカスタム コンポーネントを定義します。次に、事前構築済みコンポーネントを使用してパイプラインの残りのステップを定義します。事前構築済みコンポーネントにより、モデルのトレーニングやデプロイなど、Vertex AI サービスへのアクセスが簡単になります。
このステップの大部分の時間は、このパイプラインの AutoML トレーニング部分に費やされ、これには約 1 時間かかります。
ステップ 1: モデル評価用のカスタム コンポーネント
ここで定義するカスタム コンポーネントは、モデルのトレーニングの完了後、パイプラインの終わりにかけて使用されます。このコンポーネントはいくつかの処理を実行します。
- トレーニング済みの AutoML 分類モデルから評価指標を取得する
- 指標を解析し、Vertex Pipelines UI にレンダリングする
- 指標をしきい値と比較して、モデルをデプロイするかどうかを決定する
コンポーネントを定義する前に、その入力パラメータと出力パラメータについて理解します。パイプラインは入力として Cloud プロジェクトのメタデータ、結果のトレーニング済みモデル(このコンポーネントは後で定義します)、モデルの評価指標、そして thresholds_dict_str
を受け取ります。
thresholds_dict_str
は、パイプラインの実行時に定義する値です。この分類モデルの場合、これはモデルをデプロイする ROC 曲線値の下側の領域となります。たとえば、0.95 を渡した場合は、この指標が 95% を超えるときにのみパイプラインでモデルをデプロイすることを意味します。
評価コンポーネントは、モデルをデプロイするかどうかを示す文字列を返します。
- ノートブックのセルに次のコードを追加して、このカスタム コンポーネントを作成します。
ステップ 2: Google Cloud の事前構築済みコンポーネントを追加する
このステップでは、パイプラインの残りのコンポーネントを定義し、それらすべてがどのように機能するのかを確認します。
- 最初に、タイムスタンプを使用してパイプライン実行の表示名を定義します。
- 次に、ノートブックの新しいセルに以下をコピーします。
このコードの内容は次のとおりです。
- 最初に、前のパイプラインと同様に、このパイプラインが受け取る入力パラメータを定義します。これらはパイプライン内の他のステップの出力には依存しないため、手動で設定する必要があります。
- パイプラインのその他の部分では、Vertex AI サービスとやり取りするために、いくつかの事前構築済みコンポーネントを使用します。
-
TabularDatasetCreateOp
は、Cloud Storage または BigQuery をデータセットのソースとして、Vertex AI に表形式のデータセットを作成します。このパイプラインでは、BigQuery テーブルの URL を介してデータを渡します。 -
AutoMLTabularTrainingJobRunOp
は、表形式のデータセットに対する AutoML のトレーニング ジョブを開始します。このコンポーネントには、モデルタイプ(ここでは分類)、列のデータ、トレーニングの実行時間、データセットへのポインタなど、いくつかの構成パラメータを渡します。このコンポーネントにデータセットを渡すために、dataset_create_op.outputs["dataset"]
を介して前のコンポーネントの出力を渡していることに注意してください。 -
ModelDeployOp
は、指定されたモデルを Vertex AI のエンドポイントにデプロイします。追加の構成オプションも使用できますが、ここではエンドポイントのマシンタイプ、プロジェクト、デプロイするモデルを指定します。パイプラインのトレーニング ステップの出力にアクセスすることで、モデルを渡します。
-
- このパイプラインでは、条件付きロジックも使用されています。これは、条件を定義し、その条件の結果に基づいて異なるブランチを実行できる Vertex Pipelines の機能です。パイプラインを定義したときに
thresholds_dict_str
パラメータを渡したことを思い出してください。これは、モデルをエンドポイントにデプロイするかどうかの決定に使用する精度のしきい値です。これを実装するために、KFP SDK のCondition
クラスを使用します。渡される条件は、このラボで前に定義したカスタム評価コンポーネントの出力です。この条件が true の場合、パイプラインは引き続きdeploy_op
コンポーネントを実行します。精度が定義済みのしきい値を満たしていない場合、パイプラインはここで停止し、モデルをデプロイしません。
ステップ 3: エンドツーエンドの ML パイプラインをコンパイルして実行する
- パイプライン全体が定義されたので、これをコンパイルします。
- 次に、パイプラインの実行を開始します。
- 上のセルの実行後に表示されるリンクをクリックして、パイプラインをコンソールに表示します。このパイプラインの実行には 1 時間以上かかります。そのほとんどの時間は AutoML のトレーニング ステップに費やされます。完成したパイプラインは次のようになります。
- 上部の「アーティファクトを開く」ボタンを使用して、パイプラインで作成された各アーティファクトの詳細を表示できます。たとえば、
dataset
アーティファクトをクリックすると、作成された Vertex AI データセットの詳細が表示されます。ここからリンクをクリックして、そのデータセットのページに移動できます。
- 同様に、カスタム評価コンポーネントの結果として得られた指標の可視化を見るには、metricsc というアーティファクトをクリックします。ダッシュボードの右側で、このモデルの混同行列を確認できます。
- このパイプラインの実行によって作成されたモデルとエンドポイントを表示するには、モデル セクションに移動し、
automl-beans
という名前のモデルをクリックします。このモデルがエンドポイントにデプロイされているのを確認できます。
-
パイプラインのグラフで endpoint アーティファクトをクリックしても、このページにアクセスできます。
-
コンソールでパイプラインのグラフを確認するほかに、Vertex Pipelines で リネージのトラッキングを使用することもできます。
-
リネージのトラッキングとは、パイプライン全体で作成されたアーティファクトのトラッキングを意味します。これにより、各アーティファクトがどこで作成され、ML ワークフロー全体でどのように使用されているかを理解できます。たとえば、このパイプラインで作成されたデータセットについてリネージのトラッキングを見るには、dataset アーティファクトをクリックしてから、[リネージを表示] をクリックします。
このアーティファクトが使用されているすべての場所が表示されます。
ステップ 4: パイプラインの実行間で指標を比較する(オプション)
- このパイプラインを複数回実行すると、実行間で指標を比較したくなるかもしれません。
aiplatform.get_pipeline_df()
メソッドを使用して、実行のメタデータにアクセスできます。ここでは、このパイプラインのすべての実行のメタデータを取得し、Pandas DataFrame に読み込みます。
これで、Vertex Pipelines でエンドツーエンドの ML パイプラインを構築、実行し、メタデータを取得する方法を学習しました。
お疲れさまでした
このラボでは、絵文字のパイプラインを作成して実行しました。また、Vertex Pipelines でエンドツーエンドの ML パイプラインを構築、実行し、メタデータを取得する方法も学習しました。
次のステップと詳細情報
Developer Relations の Codelab を使用して、ご自身の Google Cloud プロジェクトで同じシナリオを試してみてください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 6 月 28 日
ラボの最終テスト日: 2024 年 6 月 28 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。