LoginSignup
17
18

More than 3 years have passed since last update.

Google AI Platform - Cloud ML Engineを初心者が動かして理解(前半)

Last updated at Posted at 2019-06-16

入門ガイドを見ながらCloud ML Engineでカスタムプログラムを動かしてみました。Cloud ML Engineを理解するためにしているので、print文を処理するだけの最小構成にしています。もう少し複雑にした「後半」記事も書きました。
公式チュートリアル実行に関しては、記事「Google Cloud ML EngineでTensorFlow機械学習訓練実行」を参照ください。
ファイルの読み書きをしたい場合には、記事「Google AI Platform - Cloud ML EngineとファイルI/O」を参照ください。

環境

確認していないのですが、クラウド側で処理しているのでPythonなくても動かせそうな気がします。

種類 バージョン 内容
OS Ubuntu18.04.01 LTS 仮想で動かしています
Google Cloud SDK 250.0.0

前提

  • GCPのアカウントを持っていること
  • GCPでプロジェクトを作成済でAPI有効化であること(今回は"aip-test01"というIDで作成しています)
  • Google Cloud SDKがインストールされていること

※GCPでのプロジェクト作成、API有効化とGoogle Cloud SDKインストールに関しては「過去記事」に記載しています。

手順

1. Google Cloud SDK設定

# 設定確認
gcloud config list

# プロジェクトID設定(ここはその時にIDに置き換える)
gcloud config set project aip-test01

Google Cloud SDKを最新にします。

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

2. Pythonプログラム作成

print文だけなのでライブラリは何も使っていません。
ローカル環境はPython3.5.6にpyenvで設定しています。Google Cloud ML Engineのサポート対象はPython3.5と少し古めなので注意してください。
試したい方は、GitHubからクローンしてください。

ディレクトリとプログラムは以下の構成です。ディレクトリ"trainer"は推奨プロジェクト構造に記載されていた通りにしています。
"__init__.py"の中身は空です。深く調べていませんが、ディレクトリ"trainer"と"__init__.py"なしだと動きませんでした。

.
└── trainer
    ├── __init__.py
    └── task.py

"task.py"はprint文を書いているだけです。

print("Hello World!!")

3. ローカル試行

このステップは必須ではないです。実行する場合には、ローカル環境にPythonやライブラリの準備が必要です。
まずはローカルで試行します。

# from project root directory
$ gcloud ai-platform local train \
>    --module-name trainer.task \
>    --package-path trainer/
Hello World!!

Hello World!!が出力されました。"modle-name"に実行するpythonプログラムを指定し、"package-path"はプログラムが格納されているフォルダを指定します。クラウドでの実行時には、"package-path"で指定したフォルダを圧縮してGoogle Storageに格納するようです。

4. クラウドで実行

4.1. 前準備

環境変数設定やバケット作成をしておきます。

4.1.1. ジョブ名

ジョブ名に日時を変数指定します。ジョブ名は実行後に結果確認するときに使うので日時を加えると便利です。

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

4.1.2. Google Storageバケット

Google Storageのバケット作成と環境変数作成をします。

# Create a Bucket
BUCKET_NAME="aip-test01"
gsutil mb gs://$BUCKET_NAME/

OUTPUT_PATHとして、パッケージ全体を圧縮して置くパスをGoogle Storageに設定します。

# Set output path
OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

4.2. ジョブのクラウド実行

ジョブをクラウドで実行します。使用可能なパラメータは"Configuring the job"で確認できます。

$ gcloud ai-platform jobs submit training $JOB_NAME \
>     --job-dir $OUTPUT_PATH \
>     --module-name trainer.task \
>     --package-path trainer/ 

Job [aip_test_20190615_173337] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe aip_test_20190615_173337

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs aip_test_20190615_173337
jobId: aip_test_20190615_173337

注意すべきパラメータ

以下のパラメータには注意してください。今回は、単純なプログラムなのでパラメータ指定をしないでもエラーが起きませんが、現実的には指定が必須かと思います。また、使用可能なRuntime Versionの日本語ページは古いことがあったので、英語で見ることをおすすめします。

パラメータ 内容 注意点
python-version Pythonバージョン デフォルトのpythonバージョンは2.7なので注意してください(Python Version)
runtime-version ランタイム デフォルトのランタイムは古いので注意してください(Runtime)

「後半記事」では上記パラメータを指定して実行しています。

4.3. ジョブ実行結果確認

実行したジョブ結果を確認します。ブラウザからコンソールで確認してもOKですが、今回はターミナルから確認します。
まだ、ステータスが実行中(RUNNING)となっていますが、print文だけなのですぐに終わります。

$ gcloud ai-platform jobs describe aip_test_20190615_173337
createTime: '2019-06-15T08:47:23Z'
etag: 0jJmjgUxgzk=
jobId: aip_test_20190615_173337
startTime: '2019-06-15T08:48:16Z'
state: RUNNING
trainingInput:
  jobDir: gs://aip-test01/aip_test_20190615_173337
  packageUris:
  - gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz
  pythonModule: trainer.task
  region: us-central1
trainingOutput: {}

View job in the Cloud Console at:
https://console.cloud.google.com/mlengine/jobs/aip_test_20190615_173337?project=aip-test01

View logs at:
https://console.cloud.google.com/logs?resource=ml.googleapis.com%2Fjob_id%2Faip_test_20190615_173337&project=aip-test0

ジョブのログも確認します。後ろの方に"Hello World!!"と出力されているのがわかります。

$ gcloud ai-platform jobs stream-logs aip_test_20190615_173337
INFO    2019-06-15 17:47:23 +0900   service     Validating job requirements...
INFO    2019-06-15 17:47:23 +0900   service     Job creation request has been successfully validated.
INFO    2019-06-15 17:47:23 +0900   service     Job aip_test_20190615_173337 is queued.
INFO    2019-06-15 17:47:24 +0900   service     Waiting for job to be provisioned.
INFO    2019-06-15 17:47:26 +0900   service     Waiting for training program to start.
INFO    2019-06-15 17:48:09 +0900   master-replica-0        Running task with arguments: --cluster={"master": ["127.0.0.1:2222"]} --task={"type": "master", "index": 0} --job={  "package_uris": ["gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz"],  "python_module": "trainer.task",  "region": "us-central1",  "job_dir": "gs://aip-test01/aip_test_20190615_173337",  "run_on_raw_vm": true}
INFO    2019-06-15 17:48:35 +0900   master-replica-0        Running module trainer.task.
INFO    2019-06-15 17:48:35 +0900   master-replica-0        Downloading the package: gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz
INFO    2019-06-15 17:48:35 +0900   master-replica-0        Running command: gsutil -q cp gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz trainer-0.0.0.tar.gz
INFO    2019-06-15 17:48:37 +0900   master-replica-0        Installing the package: gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz
INFO    2019-06-15 17:48:37 +0900   master-replica-0        Running command: pip install --user --upgrade --force-reinstall --no-deps trainer-0.0.0.tar.gz
ERROR   2019-06-15 17:48:42 +0900   master-replica-0        DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
INFO    2019-06-15 17:48:42 +0900   master-replica-0        Processing ./trainer-0.0.0.tar.gz
INFO    2019-06-15 17:48:42 +0900   master-replica-0        Building wheels for collected packages: trainer
INFO    2019-06-15 17:48:42 +0900   master-replica-0          Building wheel for trainer (setup.py): started
INFO    2019-06-15 17:48:43 +0900   master-replica-0        creating '/tmp/pip-wheel-NgW3Y5/trainer-0.0.0-cp27-none-any.whl' and adding '.' to it
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer/task.py'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer/__init__.py'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/DESCRIPTION.rst'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/metadata.json'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/top_level.txt'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/WHEEL'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/METADATA'
INFO    2019-06-15 17:48:43 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/RECORD'
INFO    2019-06-15 17:48:43 +0900   master-replica-0          Building wheel for trainer (setup.py): finished with status 'done'
INFO    2019-06-15 17:48:43 +0900   master-replica-0          Stored in directory: /root/.cache/pip/wheels/0d/1b/db/f8e86b296734f0b137e17e5d34862f4ae4faf8388755c6272f
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Successfully built trainer
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Installing collected packages: trainer
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Successfully installed trainer-0.0.0
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Running command: pip install --user trainer-0.0.0.tar.gz
ERROR   2019-06-15 17:48:43 +0900   master-replica-0        DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Processing ./trainer-0.0.0.tar.gz
INFO    2019-06-15 17:48:43 +0900   master-replica-0        Building wheels for collected packages: trainer
INFO    2019-06-15 17:48:43 +0900   master-replica-0          Building wheel for trainer (setup.py): started
INFO    2019-06-15 17:48:44 +0900   master-replica-0        creating '/tmp/pip-wheel-GJXs7n/trainer-0.0.0-cp27-none-any.whl' and adding '.' to it
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer/task.py'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer/__init__.py'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/DESCRIPTION.rst'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/metadata.json'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/top_level.txt'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/WHEEL'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/METADATA'
INFO    2019-06-15 17:48:44 +0900   master-replica-0        adding 'trainer-0.0.0.dist-info/RECORD'
INFO    2019-06-15 17:48:44 +0900   master-replica-0          Building wheel for trainer (setup.py): finished with status 'done'
INFO    2019-06-15 17:48:44 +0900   master-replica-0          Stored in directory: /root/.cache/pip/wheels/0d/1b/db/f8e86b296734f0b137e17e5d34862f4ae4faf8388755c6272f
INFO    2019-06-15 17:48:44 +0900   master-replica-0        Successfully built trainer
INFO    2019-06-15 17:48:44 +0900   master-replica-0        Installing collected packages: trainer
INFO    2019-06-15 17:48:44 +0900   master-replica-0          Found existing installation: trainer 0.0.0
INFO    2019-06-15 17:48:44 +0900   master-replica-0            Uninstalling trainer-0.0.0:
INFO    2019-06-15 17:48:44 +0900   master-replica-0              Successfully uninstalled trainer-0.0.0
INFO    2019-06-15 17:48:44 +0900   master-replica-0        Successfully installed trainer-0.0.0
INFO    2019-06-15 17:48:44 +0900   master-replica-0        Running command: python -m trainer.task --job-dir gs://aip-test01/aip_test_20190615_173337
INFO    2019-06-15 17:48:45 +0900   master-replica-0        Hello World!!
INFO    2019-06-15 17:48:45 +0900   master-replica-0        Module completed; cleaning up.
INFO    2019-06-15 17:48:45 +0900   master-replica-0        Clean up finished.
INFO    2019-06-15 17:48:45 +0900   master-replica-0        Task completed successfully.
INFO    2019-06-15 17:53:51 +0900   service     Job completed successfully.

ちなみに、Google Storage(実行時にパラメータ"job-dir"で指定したパス)に出力されたパッケージの内容も確認してみます。tar.gzの圧縮されたファイルがひとつだけあるのがわかります。

$ gsutil ls gs://aip-test01/**
gs://aip-test01/aip_test_20190615_173337/packages/6a16ee7a0297ae067db3aaed13ce1e4947e31010d175eada71eaf1bcf613be85/trainer-0.0.0.tar.gz

圧縮ファイルの中身を確認すると以下の内容が詰まっていました。

.
└── trainer-0.0.0
    ├── PKG-INFO
    ├── setup.py
    └── trainer
        ├── __init__.py
        └── task.py
17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18