BETA

GCPのAI Platformで学習ジョブを動かしてみる

投稿日:2020-06-09
最終更新:2020-06-09

これは何?

Google Cloud Plataform(以下GCP)のAI PlatformでIris Datesetの学習ジョブを実行する。
基本的には公式をなぞっただけ。

準備

適当にググって下記のインストールや設定をする

  • scikit-learnのインストール
  • GCP SDKのインストール
  • GCPプロジェクトの作成
  • GCP SDKの認証 gcloud auth login

手順

学習処理のコーディング

適当なフォルダにirisフォルダをつくりその中で作業する。
学習処理の本体であるtask.pyをコーディングしていく。

from sklearn.svm import SVC  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  

# データの読込  
iris = load_iris()  

# X_train: 特徴量の学習データ  
# X_test: 特徴量のテストデータ  
# y_train: ラベルの学習データ  
# y_test: ラベルのテストデータ  
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, train_size=0.8, random_state=0)  

# 学習  
model = SVC()  
model.fit(X_train, y_train)  

# テスト  
print("accuracy:{}".format(model.score(X_test, y_test)))  

パッケージとして認識させる。

$ touch __init__.py  

ジョブの登録

GCP SDKでデフォルトプロジェクトを設定する。

$ gcloud config set project <プロジェクトID>  

環境変数を設定する。

$ PROJECT_ID=<プロジェクトID>  
$ BUCKET_NAME=${PROJECT_ID}-mlengine  
$ REGION=asia-northeast1  
$ TRAINING_PACKAGE_PATH="./iris/"  
$ MAIN_TRAINER_MODULE="iris.task"  

Cloud Storageバケットを作成する。

$ gsutil mb -l $REGION gs://$BUCKET_NAME  

1つ上のフォルダで学習処理をローカルで実行する。

$ cd ..  
$ gcloud ai-platform local train \  
  --package-path $TRAINING_PACKAGE_PATH \  
  --module-name $MAIN_TRAINER_MODULE  

成功するとテストの正解率が表示される。

accuracy:1.0  

学習ジョブ用の環境変数を設定する。

$ JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"  
$ JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir  
$ RUNTIME_VERSION=1.14  
$ PYTHON_VERSION=2.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  

リージョンが原因でエラーが出る時もある。

ERROR: (gcloud.ai-platform.jobs.submit.training) FAILED_PRECONDITION: Field: region Error: Your project needs to be whitelisted to use region 'asia-northeast1'. Please contact Cloud ML Engine team for whitelisting. Other available regions are [asia-east1, asia-southeast1, europe-west1, europe-west4, us-central1, us-east1, us-west1].  
- '@type': type.googleapis.com/google.rpc.BadRequest  
  fieldViolations:  
  - description: Your project needs to be whitelisted to use region 'asia-northeast1'.  
      Please contact Cloud ML Engine team for whitelisting. Other available regions  
      are [asia-east1, asia-southeast1, europe-west1, europe-west4, us-central1, us-east1,  
      us-west1].  
    field: region  

そういう時は仕方ないのでリージョンを変えたりして再送信する。

$ REGION=us-central1  

JOB_NAMEは重複するとエラーになる。

ERROR: (gcloud.ai-platform.jobs.submit.training) Resource in project [gcp-tutorial-20190727] is the subject of a conflict: Field: job.job_id Error: A job with this id already exists.  
- '@type': type.googleapis.com/google.rpc.BadRequest  
  fieldViolations:  
  - description: A job with this id already exists.  
    field: job.job_id  

複数回実行する場合はJOB_NAMEを変えて実行する。

$ JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"  

成功するとジョブ情報が表示される。

Job [iris_scikit_learn_20190814_015820] 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_20190814_015820  

or continue streaming the logs with the command  

  $ gcloud ai-platform jobs stream-logs iris_scikit_learn_20190814_015820  
jobId: iris_scikit_learn_20190814_015820  
state: QUEUED  

ジョブの確認

ブラウザからGCPコンソールにログインする。
ハンバーガーメニューからAIプラットフォームを選択する。

ジョブの状態が確認できる。

正常終了したらView Logsからログを確認する。

accuracy:1.0と表示されていたらOK。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@yoko8maの技術ブログ システムと人間について

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう