scikit-learn と XGBoost による ML モデルのトレーニング
AI Platform Training サービスは、クラウド内でモデルをトレーニングするためのコンピューティング リソースを管理します。このページでは、AI Platform Training で scikit-learn と XGBoost を使用してモデルをトレーニングするプロセスについて説明します。
概要
このチュートリアルでは、Iris データセットを使用して、花の種を予測する簡単なモデルをトレーニングします。モデルのトレーニング コードを調整して、Cloud Storage からデータをダウンロードし、保存したモデルファイルを Cloud Storage にアップロードするようにコードを変更します。その後、トレーニング アプリケーション パッケージを作成し、それを使用して AI Platform Training でトレーニングを実行します。
AI Platform Training でモデルをトレーニングする方法
AI Platform Training では、初期設定プロセスを完了したら、次の 3 つのステップでモデルをトレーニングできます。
- Python トレーニング モジュールを作成する
- Cloud Storage からデータをダウンロードして AI Platform Training で使用するためのコードを追加する
- AI Platform Training でモデルのトレーニングが完了した後にモデルを Cloud Storage にエクスポートして保存するためのコードを追加する
- トレーニング アプリケーション パッケージを準備する
- トレーニング ジョブの送信
初期設定プロセスでは、Google Cloud プロジェクトの作成、課金と API の有効化、AI Platform Training で使用する Cloud Storage バケットの設定、scikit-learn または XGBoost のローカル インストールを行います。すべての設定とインストールがすでに完了している場合は、モデルのトレーニング コードの作成に進んでください。
始める前に
次の操作を行って 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、XGBoost、pandas をインストールします。
(aip-env)$ pip install scikit-learn==1.0.2 xgboost==1.6.2 pandas==1.3.5
上述のコマンドでバージョン番号を指定して、仮想環境内の依存関係とランタイム バージョン内の依存関係を一致させます。これによって、AI Platform Training でコードを実行するときの予期しない動作を防ぎます。
インストール オプションやトラブルシューティング情報などの詳細については、各フレームワークのインストール手順をご覧ください。
Cloud Shell
次のコマンドを実行して、scikit-learn、XGBoost、pandas をインストールします。
pip install --user scikit-learn xgboost 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
Python トレーニング モジュールを作成する
モデルをトレーニングするコードを含むファイル iris_training.py
を作成します。このセクションでは、トレーニング コードの各部分の役割について説明します。
- セットアップとインポート
- Cloud Storage からデータをダウンロードする
- pandas にデータを読み込む
- モデルをトレーニングして保存する
- 保存したモデルファイルを Cloud Storage にアップロードする
便宜上、iris_training.py
の完全なコードは GitHub にホストされており、このチュートリアルではそのコードを使用できます。
設定
Python と scikit-learn / XGBoost で以下のライブラリをインポートします。Cloud Storage バケットの名前のための変数を設定します。
scikit-learn
XGBoost
Cloud Storage からデータをダウンロードする
一般的な開発プロセスでは、データを Cloud Storage にアップロードして、AI Platform Training がそのデータにアクセスできるようにします。このチュートリアルのデータは、Cloud Storage の公開バケット gs://cloud-samples-data/ai-platform/iris/
でホストしています。
以下のコードで gsutil
を使用してデータをダウンロードし、gsutil
から stdout
にデータを出力します。
scikit-learn
XGBoost
pandas にデータを読み込む
pandas を利用してデータを NumPy 配列に読み込んで、scikit-learn または XGBoost でトレーニングします。
scikit-learn
XGBoost
モデルをトレーニングして保存する
AI Platform Training で実行するトレーニング モジュールを作成します。この例では、トレーニング モジュールは、Iris トレーニング データ(iris_data
と iris_target
)を使用してモデルをトレーニングし、トレーニング済みのモデルをファイルにエクスポートして保存します。トレーニング後に AI Platform Prediction を使用してオンライン予測を取得する場合は、モデルファイルのエクスポートに使用するライブラリに応じて、モデルファイルに名前を付ける必要があります。詳細については、モデルファイルの命名規則をご覧ください。
scikit-learn
モデルの永続性に関する scikit-learn の例の手順に沿って、次のようにモデルをトレーニングし、エクスポートします。
モデルをエクスポートするには、次のように pickle ライブラリを使用することもできます。
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(classifier, model_file)
XGBoost
Booster オブジェクトの「save_model」メソッドを使用すると、モデルをエクスポートできます。
モデルをエクスポートするには、次のように pickle ライブラリを使用することもできます。
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(bst, model_file)
モデルファイルの命名規則
オンライン予測の場合、Cloud Storage にアップロードする保存済みモデルファイルの名前は、使用したライブラリに応じて、model.pkl
、model.joblib
、model.bst
のいずれかにする必要があります。この制限により、AI Platform Prediction はエクスポート時と同じパターンを使用して、インポート時にモデルを再構築できます。
カスタム予測ルーチン(ベータ版)を作成する場合、この要件は適用されません。
scikit-learn
モデルのエクスポートに使用するライブラリ | 正しいモデル名 |
---|---|
pickle |
model.pkl |
sklearn.externals.joblib |
model.joblib |
XGBoost
モデルのエクスポートに使用するライブラリ | 正しいモデル名 |
---|---|
pickle |
model.pkl |
joblib |
model.joblib |
xgboost.Booster |
model.bst |
モデルを今後繰り返し利用する場合は、新しいモデルのそれぞれに専用のディレクトリが存在するように Cloud Storage バケットを整理してください。
保存したモデルを Cloud Storage にアップロードする
使用する Cloud Storage バケットが AI Platform Training の実行に使用する Google Cloud プロジェクトの外部にある場合は、AI Platform Training からそのバケットにアクセスできることを確認してください。
scikit-learn
XGBoost
トレーニング アプリケーション パッケージを作成する
上記のスニペットから作成した iris_training.py
を使用して、メインモジュールとして iris_training.py
が含まれるトレーニング アプリケーション パッケージを作成します。
トレーニング アプリケーション パッケージを作成する最も簡単な(推奨される)方法は、トレーニング ジョブを送信するときに gcloud
を使ってアプリケーションをパッケージしてアップロードするという方法です。この方法で必要なのは、2 つのファイルを含む非常に単純なファイル構造を作成することです。
scikit-learn
このチュートリアルでは、トレーニング アプリケーション パッケージのファイル構造は次のようになります。
iris_sklearn_trainer/
__init__.py
iris_training.py
コマンドラインで、ディレクトリをローカルに作成します。
mkdir iris_sklearn_trainer
__init__.py
という名前の空のファイルを作成します。touch iris_sklearn_trainer/__init__.py
トレーニング コードを
iris_training.py
として保存し、そのファイルをiris_sklearn_trainer
ディレクトリ内に保存します。また、cURL
を使用して GitHub からファイルをダウンロードして保存する方法もあります。curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/iris_training.py > iris_sklearn_trainer/iris_training.py
完全なソースコードについては、GitHub をご覧ください。
トレーニング アプリケーション パッケージが正しく設定されていることを確認します。
ls ./iris_sklearn_trainer __init__.py iris_training.py
XGBoost
このチュートリアルでは、トレーニング アプリケーション パッケージのファイル構造は次のようになります。
iris_xgboost_trainer/
__init__.py
iris_training.py
コマンドラインで、ディレクトリをローカルに作成します。
mkdir iris_xgboost_trainer
__init__.py
という名前の空のファイルを作成します。touch iris_xgboost_trainer/__init__.py
トレーニング コードを
iris_training.py
として保存し、そのファイルをiris_xgboost_trainer
ディレクトリ内に保存します。また、cURL
を使用して GitHub からファイルをダウンロードして保存する方法もあります。curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/iris_training.py > iris_xgboost_trainer/iris_training.py
完全なソースコードについては、GitHub をご覧ください。
トレーニング アプリケーション パッケージが正しく設定されていることを確認します。
ls ./iris_xgboost_trainer __init__.py iris_training.py
詳細については、トレーニング アプリケーションのパッケージングをご覧ください。
トレーナーをローカルで実行する
gcloud ai-platform local train
コマンドを使用すると、トレーニング アプリケーションをローカルでテストできます。この手順は省略可能ですが、デバッグの際に役立ちます。
scikit-learn
コマンドラインで、次の環境変数を設定し、適切な値で [VALUES-IN-BRACKETS]
を置き換えます。
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
トレーニング ジョブをローカルでテストします。
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
XGBoost
コマンドラインで、次の環境変数を設定し、適切な値で [VALUES-IN-BRACKETS]
を置き換えます。
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
トレーニング ジョブをローカルでテストします。
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
トレーニング ジョブの送信
このセクションでは、gcloud ai-platform jobs submit training
を使ってトレーニング ジョブを送信します。
トレーニング ジョブのパラメータを指定する
トレーニング ジョブ リクエストの各パラメータに次の環境変数を設定します。
BUCKET_NAME
- Cloud Storage バケットの名前。JOB_NAME
- ジョブに使用する名前(英大文字と小文字、数字、アンダースコアのみを使用でき、先頭は文字にする必要があります)。例:iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")
またはiris_xgboost_$(date +"%Y%m%d_%H%M%S")
。JOB_DIR
- トレーニング ジョブの出力ファイルに使用する Cloud Storage の場所のパス。例:gs://$BUCKET_NAME/scikit_learn_job_dir
またはgs://$BUCKET_NAME/xgboost_job_dir
。TRAINING_PACKAGE_PATH
- トレーニング アプリケーションのルート ディレクトリのローカルパス。例:./iris_sklearn_trainer/
または./iris_xgboost_trainer/
。MAIN_TRAINER_MODULE
- AI Platform Training トレーニング サービスで実行するファイルを指定します。形式は[YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]
です。例:iris_sklearn_trainer.iris_training
またはiris_xgboost_trainer.iris_training
。REGION
- トレーニング ジョブを実行するために使用しているリージョンの名前。AI Platform Training トレーニング サービスに利用可能なリージョンのいずれかを使用します。Cloud Storage バケットが同じリージョンにあることを確認してください。RUNTIME_VERSION
- scikit-learn をサポートする AI Platform Training のランタイム バージョンを指定する必要があります。この例では、2.11
です。PYTHON_VERSION
- ジョブに使用する Python のバージョン。このチュートリアルでは Python 3.7 を指定します。SCALE_TIER
- トレーニング ジョブを実行するマシンの事前定義されたクラスタ仕様。ここでは、BASIC
としています。カスタム スケール階層を使用して、トレーニング用の独自のクラスタ構成を定義することもできます。
このチュートリアルの環境変数は以下のとおりです。
scikit-learn
[VALUES-IN-BRACKETS]
を適切な値に置き換えます。
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
XGBoost
[VALUES-IN-BRACKETS]
を適切な値に置き換えます。
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_xgboost_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/xgboost_job_dir
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
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 [iris_scikit_learn_[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 iris_scikit_learn_[DATE]_[TIME]
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs iris_scikit_learn_[DATE]_[TIME]
jobId: iris_scikit_learn_[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
Cloud Storage 内のモデルファイルの確認
保存先のモデルフォルダの内容を表示して、保存したモデルファイルが Cloud Storage にアップロードされていることを確認します。
gcloud storage ls gs://$BUCKET_NAME/iris_*
出力例:
gs://bucket-name/iris_20180518_123815/:
gs://bucket-name/iris_20180518_123815/model.joblib
次のステップ
- AI Platform Training で scikit-learn を使用してオンライン予測を取得する。
- トレーニング用の独自のクラスタ構成を定義するためにカスタム スケール階層の使用方法を参照する。