AI Platform Training トレーニング サービスでは、クラウド内のコンピューティング リソースを管理してモデルをトレーニングします。このページでは、AI Platform Training を使用して scikit-learn モデルをトレーニングするプロセスについて説明します。
このチュートリアルでは、国勢調査所得データセットに基づいて所得水準を予測する簡単なモデルをトレーニングします。トレーニング アプリケーションをローカルに作成し、Cloud Storage にアップロードして、トレーニング ジョブを送信します。AI Platform Training トレーニング サービスの出力は Cloud Storage バケットに書き込まれ、Logging にログが作成されます。
このコンテンツは、GitHub にも Jupyter ノートブックとして公開されています。
AI Platform Training でモデルをトレーニングする方法
AI Platform Training では、次の 3 つのステップでモデルをトレーニングできます。
- Python モデルファイルを作成する
- Cloud Storage からデータをダウンロードして AI Platform Training で使用するためのコードを追加する
- AI Platform Training でモデルのトレーニングが完了した後にモデルを Cloud Storage にエクスポートして保存するためのコードを追加する
- トレーニング アプリケーション パッケージを準備する
- トレーニング ジョブを送信する
始める前に
次の操作を行って GCP アカウントを設定し、AI Platform Training API を有効にします。さらに、Cloud SDK をインストールして有効にします。
GCP プロジェクトを設定する
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
環境を設定する
以下のいずれかのオプションを選択して、macOS のローカル環境または Cloud Shell のリモート環境を設定します。
macOS の場合、以下の [MACOS] タブで環境を設定することをおすすめします。[CLOUD SHELL] タブに表示される Cloud Shell は、macOS、Linux、Windows で使用できます。Cloud Shell は、AI Platform Training の機能を試すような場合には便利ですが、継続的な開発作業には適していません。
macOS
-
Python のインストールを確認する
Python がインストールされていることを確認します。されていない場合はインストールします。python -V
-
pip
のインストールを確認するpip
は、Python のパッケージ マネージャーであり、Python の現在のバージョンに含まれています。pip --version
コマンドを実行して、pip
がすでにインストールされているかどうかを確認します。インストールされていない場合は、pip
のインストール方法をご覧ください。次のコマンドを使用すると、
pip
をアップグレードできます。pip install -U pip
詳細については、pip のドキュメントをご覧ください。
-
virtualenv
をインストールするvirtualenv
は隔離された Python 環境を作成するツールです。次のコマンドを実行して、virtualenv
がすでにインストールされているかどうかを確認します。virtualenv --version
。インストールされていない場合は、virtualenv
をインストールします。pip install --user --upgrade virtualenv
このガイド用に隔離された開発環境を作成するために、
virtualenv
で新しい仮想環境を作成します。たとえば、次のコマンドは、aip-env
という名前の環境をアクティブにします。virtualenv aip-env source aip-env/bin/activate
-
このチュートリアルでは、仮想環境内で残りのコマンドを実行します。
virtualenv
の使用方法の詳細をご覧ください。virtualenv
を終了するには、deactivate
を実行します。
Cloud Shell
-
Google Cloud Console を開きます。
-
Console ウィンドウの上部にある「Cloud Shell をアクティブにする」ボタンをクリックします。
コンソールの下部の新しいフレーム内で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。シェル セッションが初期化されるまで、数秒かかる場合があります。
Cloud Shell セッションが使用できる状態になります。
-
選択したプロジェクトを使用するように
gcloud
コマンドライン ツールを構成します。gcloud config set project [selected-project-id]
ここで、
[selected-project-id]
はプロジェクト ID ですID を囲んでいる角かっこは不要です。
フレームワークをインストールする
macOS
仮想環境内で次のコマンドを実行して、AI Platform Training ランタイム バージョン 2.11 で使用する scikit-learn と pandas をインストールします。
(aip-env)$ pip install scikit-learn==1.0.2 pandas==1.3.5
上述のコマンドでバージョン番号を指定して、仮想環境内の依存関係とランタイム バージョン内の依存関係を一致させます。これによって、AI Platform Training でコードを実行するときの予期しない動作を防ぎます。
インストール オプションやトラブルシューティング情報などの詳細については、各フレームワークのインストール手順をご覧ください。
Cloud Shell
次のコマンドを実行して、scikit-learn、pandas をインストールします。
pip install --user scikit-learn pandas
インストール オプションやトラブルシューティング情報などの詳細については、各フレームワークのインストール手順をご覧ください。
Cloud Storage バケットを設定する
トレーニング コードと依存関係を保存するための Cloud Storage バケットが必要です。このチュートリアルでは、AI Platform Training に使用しているのと同じプロジェクトで専用の Cloud Storage バケットを使用する方法が最も簡単です。
別のプロジェクトのバケットを使用する場合は、AI Platform Training サービス アカウントが Cloud Storage 内のトレーニング コードと依存関係にアクセスできるようにする必要があります。適切な権限がないと、トレーニング ジョブは失敗します。ストレージの権限を付与する方法をご覧ください。
必ず、トレーニング ジョブを実行するために使用しているのと同じリージョンのバケットを使用または設定してください。AI Platform Training サービスに利用可能なリージョンをご覧ください。
このセクションでは、新しいバケットを作成する方法を説明します。既存のバケットを使用することもできますが、AI Platform ジョブを実行する予定のリージョンと同じリージョンにある必要があります。また、AI Platform Training を実行するプロジェクトに含まれていない場合は、明示的に AI Platform Training サービス アカウントへのアクセスを許可する必要があります。
-
新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。
BUCKET_NAME="YOUR_BUCKET_NAME"
たとえば、プロジェクト名に
-aiplatform
を追加したものを使います。PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
作成したバケット名を確認します。
echo $BUCKET_NAME
-
バケットのリージョンを選択して、
REGION
環境変数を設定します。AI Platform Training ジョブを実行する予定のリージョンと同じリージョンを使用してください。AI Platform Training サービスに利用可能なリージョンをご覧ください。
たとえば、次のコードは
REGION
を作成し、us-central1
に設定します。REGION=us-central1
-
新しいバケットを作成します。
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
データについて
このサンプルのトレーニングに使用している国勢調査所得データセットは、UC Irvine Machine Learning Repository によってホストされています。
国勢調査データ転載元: Lichman, M.(2013)。UCI Machine Learning Repository http://archive.ics.uci.edu/ml。Irvine, CA: University of California, School of Information and Computer Science。このデータセットは、データセット ソース(http://archive.ics.uci.edu/ml)で指定される次の条件の下ですべてのユーザーが使用できるように公開されています。Google はこのデータセットを「現状有姿」で提供し、明示または黙示を問わず、いかなる保証も行いません。Google は、このデータセットの使用で、直接または間接の損害が発生したとしても一切の責任を負いません。
便利にお使いいただけるように、Google は公開されている Cloud Storage バケット gs://cloud-samples-data/ai-platform/sklearn/census_data/
にデータをホストしています。このデータは、Python トレーニング ファイル内でダウンロードできます。
Python モデルファイルの作成
このセクションのすべてのトレーニング コードは GitHub train.py
にあります。
このセクションの残りの部分では、トレーニング コードの動作について説明します。
設定
Python、Google Cloud CLI、scikit-learn から次のライブラリをインポートします。Cloud Storage バケットの名前のための変数を設定します。
Cloud Storage からデータをダウンロードする
一般的な開発プロセスでは、データを Cloud Storage にアップロードして、AI Platform Training がそのデータにアクセスできるようにします。このチュートリアルのデータは、公開バケット(gs://cloud-samples-data/ai-platform/sklearn/census_data/
)にホストされています。
以下のコードはトレーニング データセット adult.data
をダウンロードします(評価データは adult.test
にありますが、このチュートリアルでは使用しません)。
モデルコードを追加する
モデルのトレーニング コードでは、いくつかの基本操作を行います。
- データを定義して読み込む
- カテゴリの特徴を数値の特徴に変換する
- scikit-learn パイプラインを使用して数値の特徴を抽出する
- モデルを Cloud Storage にエクスポートして保存する
データを定義して読み込む
カテゴリの特徴を数値の特徴に変換する
scikit-learn パイプラインを使用して数値の特徴を抽出する
モデルを Cloud Storage にエクスポートして保存する
Cloud Storage バケットが AI Platform Training で使用しているのと同じプロジェクトにある場合、AI Platform Training はそのバケットの読み取りと書き込みを行うことができます。そうでない場合は、AI Platform Training の実行で使用しているプロジェクトがその Cloud Storage バケットにアクセスできるようにする必要があります。ストレージの権限を付与する方法をご覧ください。
モデルファイルを使用して AI Platform Prediction でオンライン予測をリクエストする場合は、モデルファイルに model.pkl
または model.joblib
という名前を付けてください。
モデルファイルが Cloud Storage にアップロードされていることを確認する(省略可)
コマンドラインで、保存先のモデルフォルダの内容を表示して、モデルファイルが Cloud Storage にアップロードされていることを確認します。バケット名の環境変数(BUCKET_NAME
)をまだ設定していない場合は、設定します。
gcloud storage ls gs://$BUCKET_NAME/census_*
出力は次のようになります。
gs://[YOUR-PROJECT-ID]/census_[DATE]_[TIME]/model.joblib
トレーニング アプリケーション パッケージを作成する
トレーニング アプリケーション パッケージを作成する最も簡単な(推奨される)方法は、トレーニング ジョブを送信するときに gcloud
を使ってアプリケーションをパッケージしてアップロードするという方法です。この方法では、ファイルが 2 つのみ含まれる非常に単純なファイル構造を作成するだけで済みます。このチュートリアルでは、トレーニング アプリケーション パッケージのファイル構造は次のようになります。
census_training/
__init__.py
train.py
ディレクトリをローカルに作成します。
mkdir census_training
__init__.py
という名前の空のファイルを作成します。touch census_training/__init__.py
トレーニング コードを 1 つの Python ファイルに保存し、そのファイルを
census_training
ディレクトリ内に保存します。train.py
のサンプルコードをご覧ください。cURL
を使用してファイルをダウンロードして保存できます。curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/notebooks/census_training/train.py > census_training/train.py
詳細については、トレーニング アプリケーションのパッケージングをご覧ください。
トレーニング ジョブの送信
このセクションでは、gcloud ai-platform jobs submit training
を使ってトレーニング ジョブを送信します。
トレーニング ジョブのパラメータを指定する
トレーニング ジョブ リクエストの各パラメータに次の環境変数を設定します。
PROJECT_ID
- Google Cloud プロジェクトに対応した PROJECT_ID を使用します。BUCKET_NAME
- Cloud Storage バケットの名前。JOB_NAME
- ジョブに使用する名前(英大文字と小文字、数字、アンダースコアのみを使用でき、先頭は文字にする必要があります)。ここでは、census_training_$(date +"%Y%m%d_%H%M%S")
としています。JOB_DIR
- トレーニング ジョブの出力ファイルに使用する Cloud Storage の場所のパス。(例:gs://$BUCKET_NAME/scikit_learn_job_dir
)。TRAINING_PACKAGE_PATH
- トレーニング アプリケーションのルート ディレクトリのローカルパス。ここでは、./census_training/
としています。MAIN_TRAINER_MODULE
- AI Platform Training トレーニング サービスで実行するファイルを指定します。形式は[YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]
です。ここではcensus_training.train
としています。REGION
- トレーニング ジョブを実行するために使用しているリージョンの名前。AI Platform Training トレーニング サービスに利用可能なリージョンのいずれかを使用します。Cloud Storage バケットが同じリージョンにあることを確認してください。RUNTIME_VERSION
- scikit-learn をサポートする AI Platform Training のランタイム バージョンを指定する必要があります。この例では、2.11
です。PYTHON_VERSION
- ジョブに使用する Python のバージョン。このチュートリアルでは Python 3.7 を指定します。SCALE_TIER
- トレーニング ジョブを実行するマシンの事前定義されたクラスタ仕様。ここでは、BASIC
としています。カスタム スケール階層を使用して、トレーニング用の独自のクラスタ構成を定義することもできます。
このチュートリアルの環境変数は以下のとおりです。[VALUES-IN-BRACKETS]
を適切な値に置き換えます。
PROJECT_ID=[YOUR-PROJECT-ID]
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME=census_training_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
TRAINING_PACKAGE_PATH="[YOUR-LOCAL-PATH-TO-TRAINING-PACKAGE]/census_training/"
MAIN_TRAINER_MODULE=census_training.train
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
リクエストを送信します。
gcloud ai-platform jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE \
--region $REGION \
--runtime-version=$RUNTIME_VERSION \
--python-version=$PYTHON_VERSION \
--scale-tier $SCALE_TIER
出力は次のようになります。
Job [census_training_[DATE]_[TIME]] submitted successfully. Your job is still active. You may view the status of your job with the command $ gcloud ai-platform jobs describe census_training_[DATE]_[TIME] or continue streaming the logs with the command $ gcloud ai-platform jobs stream-logs census_training_[DATE]_[TIME] jobId: census_training_[DATE]_[TIME] state: QUEUED
トレーニング ログの表示(省略可)
AI Platform Training はすべての stdout
ストリームと stderr
ストリーム、ログ ステートメントをキャプチャします。これらのログは Logging に保存されます。これらは実行中でも、実行後でも表示できます。
トレーニング ジョブのログを表示するには:
Console
AI Platform Training の [ジョブ] ページを開きます。
確認するトレーニング ジョブの名前を選択します。選択したトレーニング ジョブの [ジョブの詳細] ページが表示されます。
[ジョブの詳細] の内部で、[ログを表示] リンクを選択します。[Logging] ページが表示され、選択したトレーニング ジョブのログを検索したり、フィルタリングしたりできます。
gcloud
gcloud ai-platform jobs stream-logs
を使用して、ターミナルでログを表示できます。
gcloud ai-platform jobs stream-logs $JOB_NAME
次のステップ
- AI Platform Prediction での scikit-learn によるオンライン予測を取得する。
- トレーニング用の独自のクラスタ構成を定義するためにカスタム スケール階層の使用方法を参照する。