アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

GCPのAI Platfromでトレーニングジョブの実行(MLops building1)

MLops構築のためにGCPのAI Platformをいじってみる備忘録。
基礎本の代わりにqiitaとかの良記事を自分で動かしてならしてくことにしました。

ちなみに今回は「pythonのコマンドとして実行できる形式でパッケージ」でトレーニングジョブを実行。

目次
1.実行リージョンの統一
2.必要ライブラリのinstall
3.GCSからトレーニング用ファイルをdownload
4.トレーニングジョブの実行
5.トレーニング後のファイル確認



version

python==3.7.9
tensorflow==2.4.0
keras==2.3.2


1.実行リージョンの統一

実行するリージョンをGCSとAI Platformとかで繋がってるリソースで統一する。今回は「us-central1」


GCSにデータ保存用バケット(mlops-test-bakura)を作る(region= us-central1)



今回は使わないけどデータnumpyファイル、「X.npy, y.npy」をUpload。


AI platformでトレーニング用ノートブックインスタンスを作る(region= us-central1)




AI platformからだとコンソールにアクセスできないので、VMインスタンスからアクセスする。

f:id:trafalbad:20210302183115p:plain


AI platformで作ったインスタンスVMと連携されてるっぽい。

右側のSSHバーの「ブラウザウィンドウで開く」からコンソールにlogin。

f:id:trafalbad:20210302183019p:plain



2.必要ライブラリのinstall

# 仮想環境構築 & login
$ pip install virtualenv
$ virtualenv mlops (your-env-name)
$ cd mlops && source bin/activate

# google-cloud-storageはpythonでGCSの操作に必要
$ pip install google-cloud-storage 
$ pip install tensorflow==2.4.0
$ pip install keras==2.3.2
# 設定確認
$ gcloud config list

# プロジェクトID設定(ここはその時にIDに置き換える)
gcloud config set project sturdy-willow-ops<project-id>

# Google Cloud SDKを最新にupdate
$ sudo apt-get update && sudo apt-get --only-upgrade install kubectl google-cloud-sdk google-cloud-sdk-app-engine-grpc google-cloud-sdk-pubsub-emulator google-cloud-sdk-app-engine-go google-cloud-sdk-cloud-build-local google-cloud-sdk-datastore-emulator google-cloud-sdk-app-engine-python google-cloud-sdk-cbt google-cloud-sdk-bigtable-emulator google-cloud-sdk-app-engine-python-extras google-cloud-sdk-datalab google-cloud-sdk-app-engine-java


レーニング用ファイルをgit cloneさせてもらう

$ git clone https://github.com/YoheiFukuhara/gcp-aip-test02
# ファイル構成
$ tree
├── README.md
└─trainer
    ├── __init__.py
    ├── model.py
    ├── task.py
    └── util.py



3.GCSからトレーニング用ファイルをdownload

# GCSにトレーニング用データがあることを確認
$ gsutil ls gs://mlops-test-bakura/*

uploadしたファイル
f:id:trafalbad:20210302183304p:plain



GCSからファイルをdownloadするファイル
今回は権限周りの関係でエラーが起こるのでこのデータは使わない

gcs.py

from google.cloud import storage
client = storage.Client()
bucket_name = "mlops-test-bakura"
bucket = client.get_bucket(bucket_name)
def downloads(filenames):
    blob = bucket.get_blob(filenames)
    blob.download_to_filename(filenames)

if __name__=='__main__':
    downloads('X.npy')
    downloads('y.npy')

util.py

import numpy as np
NUM_TRAIN = 128

def load_data():
    data = np.random.rand(NUM_TRAIN, 2)
    labels = (np.sum(data, axis=1) > 1.0) * 1
    labels = labels.reshape(NUM_TRAIN, 1)
    return data, labels

task.py

import tensorflow as tf
import model
import util


def train_and_evaluate():

    train_x, train_y = util.load_data()


    # Create the Keras Model
    keras_model = model.create_keras_model()

    keras_model.fit(train_x, train_y, epochs=300, validation_split=0.2)


if __name__ == '__main__':
    train_and_evaluate()

model.py

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense


def create_keras_model():
    # Sequentialモデル使用(Sequentialモデルはレイヤを順に重ねたモデル)
    model = Sequential()

    # 結合層(2層->4層)
    model.add(Dense(4, input_dim=2, activation="tanh"))

    # 結合層(4層->1層):入力次元を省略すると自動的に前の層の出力次元数を引き継ぐ
    model.add(Dense(1, activation="sigmoid"))

    # モデルをコンパイル
    model.compile(loss="binary_crossentropy", optimizer="sgd", metrics=["accuracy"])

    model.summary()

    return model


4.トレーニングジョブの実行

GCPVMインスタンスのコンソール上でトレーニングジョブを実行。

# output用バケット作成
BUCKET_NAME="output-mlops134"
gsutil mb gs://$BUCKET_NAME/
>>> Creating gs://output-mlops1/...
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="output_mlops_$now"$(date +"%Y%m%d_%H%M%S")
OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
# トレーニングジョブ実行
$ gcloud ai-platform jobs submit training $JOB_NAME --job-dir $OUTPUT_PATH --module-name trainer.task --package-path trainer/ --region us-central1 --python-version 3.5 --runtime-version 1.14
>>>>
Job [output_mlops_20210302_02341620210302_023430] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe output_mlops_20210302_02341620210302_023430

or continue streaming the logs with the command

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

>>>>
snap/google-cloud-sdk/170/lib/third_party/requests/__init__.py:83: RequestsDependencyWarning: Old version of crypt
ography ([1, 2, 3]) may cause slowdown.
  warnings.warn(warning, RequestsDependencyWarning)
createTime: '2021-03-02T06:03:08Z'
etag: uTM4hhyiW_o=
jobId: output_mlops_20210302_06023220210302_060238
startTime: '2021-03-02T06:03:41Z'
state: RUNNING
trainingInput:
  jobDir: gs://output-mlops134/
  packageUris:
  - gs://output-mlops134/packages/453debf47cd4ec4a32f47f04f3a18dcb2686609e5fb812662b28044f1b8c6aeb/trainer-0.0.0.tar.
gz
  pythonModule: trainer.task
  pythonVersion: '3.5'
  region: us-central1
  runtimeVersion: '1.14'
trainingOutput: {}
View job in the Cloud Console at:
https://console.cloud.google.com/mlengine/jobs/output_mlops_20210302_06023220210302_060238?project=sturdy-willow-16
7902
View logs at:
https://console.cloud.google.com/logs?resource=ml_job%2Fjob_id%2Foutput_mlops_20210302_06023220210302_060238&projec
t=sturdy-
# ジョブの実行状況を見る
$ gcloud ai-platform jobs stream-logs output_mlops_20210302_02341620210302_023430

>>>
〜〜〜〜
service     Job completed successfully.

5.トレーニング後のファイル確認

# GCSの保存ファイルを確認
$ gsutil ls gs://output-mlops134/*

gs://aip-test01/〜〜〜〜〜〜/trainer-0.0.0.tar.gz

# 中身
└── trainer-0.0.0
    ├── PKG-INFO
    ├── setup.py
    └── trainer
        ├── __init__.py
        └── task.py

参考サイト

github:googleapis/python-storage
Downloading a file from google cloud storage inside a folder
Google AI Platform - Cloud ML Engineを初心者が動かして理解(後編)