Unity ML-AgentsをDockerで実行するにはイメージを作成する必要がありますが、Google Cloud Buildを利用するようにしてみました。

今回はトリガーを利用せず、ローカルでgcloudコマンドを利用してビルドしてみました。

Google Cloud Buildについては以下をご参考ください。

Google Cloud Build
https://cloud.google.com/cloud-build/?hl=ja

Google Cloud Buildとは一体何者なのか
https://swet.dena.com/entry/2018/08/20/170836

手順

GCPのプロジェクトとgcloudコマンドが利用できる前提となります。
コマンドのインストール方法は下記が参考になります。

Cloud SDK のインストール | Cloud SDK のドキュメント | Google Cloud
https://cloud.google.com/sdk/downloads?hl=JA

cloudbuild.yamlの用意

Google Cloud BuildでDockerイメージが作成できるようにcloudbuild.yamlファイルを用意します。

> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> touch cloudbuild.yaml

gitでリポジトリを取得後、リポジトリに含まれているDockerfileからイメージを作成します。

cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/git'
  args: ['clone', 'https://github.com/Unity-Technologies/ml-agents.git', '-b', $TAG_NAME, '--depth', '1']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/unity-ml-agents:$TAG_NAME', './ml-agents']
images: ['gcr.io/$PROJECT_ID/unity-ml-agents:$TAG_NAME']

$TAG_NAMEを利用して、Unity ML-Agentsのバージョンを指定するようにしました。$TAG_NAMEはコマンド実行時にパラメータ指定します。

他に利用できる変数については下記をご参考ください。

Cloud Build 変数値の置換
https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values

git cloneで取得したリポジトリにあるDockerfileが参照されるように./ml-agentsを指定します。

イメージ名unity-ml-agentsは任意の名称でOKです。

ビルド実行

準備ができたので、Google Cloud Buildにジョブ開始のコマンドを実行します。

> gcloud builds submit \
  --config=cloudbuild.yaml \
  --substitutions=TAG_NAME="0.9.1"

Creating temporary tarball archive of 1 file(s) totalling 413 bytes before compression.
Uploading tarball of [.] to [gs://GCPのプロジェクトID_cloudbuild/source/1566436194.89-b50bc19f2aec4fafa922c3b61ca9e8ce.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/GCPのプロジェクトID/builds/2860d702-303d-4c55-a5ff-fbfd6bc27e25].
Logs are available at [https://console.cloud.google.com/gcr/builds/2860d702-303d-4c55-a5ff-fbfd6bc27e25?project=xxxxxxxxxxxx].
----------------------------------------------------- REMOTE BUILD OUTPUT -----------------------------------------------------
starting build "2860d702-303d-4c55-a5ff-fbfd6bc27e25"

FETCHSOURCE
Fetching storage object: gs://GCPのプロジェクトID_cloudbuild/source/1566436194.89-b50bc19f2aec4fafa922c3b61ca9e8ce.tgz#1566436196515961
Copying gs://GCPのプロジェクトID_cloudbuild/source/1566436194.89-b50bc19f2aec4fafa922c3b61ca9e8ce.tgz#1566436196515961...
/ [1 files][  391.0 B/  391.0 B]
Operation completed over 1 objects/391.0 B.
BUILD
Starting Step #0
Step #0: Already have image (with digest): gcr.io/cloud-builders/git
Step #0: Cloning into 'ml-agents'...
Step #0: Note: checking out 'd11229820f3d7f090341c76edea7bad83fc0eeec'.
Step #0:
Step #0: You are in 'detached HEAD' state. You can look around, make experimental
Step #0: changes and commit them, and you can discard any commits you make in this
Step #0: state without impacting any branches by performing another checkout.
Step #0:
Step #0: If you want to create a new branch to retain commits you create, you may
Step #0: do so (now or later) by using -b with the checkout command again. Example:
Step #0:
Step #0:   git checkout -b <new-branch-name>
Step #0:
Finished Step #0
Starting Step #1
Step #1: Already have image (with digest): gcr.io/cloud-builders/docker
Step #1: Sending build context to Docker daemon  199.6MB
Step #1: Step 1/20 : FROM ubuntu:16.04
(略)
0.9.1: digest: sha256:3573056b2abca07328ac0ec7179e7625793aea9721d58d641898a45ff6cecb2b size: 3259
DONE
-------------------------------------------------------------------------------------------------------------------------------

ID                                    CREATE_TIME                DURATION  SOURCE                                                                                        IMAGES                                           STATUS
2860d702-303d-4c55-a5ff-fbfd6bc27e25  2019-08-22T01:09:58+00:00  7M53S     gs://GCPのプロジェクトID_cloudbuild/source/1566436194.89-b50bc19f2aec4fafa922c3b61ca9e8ce.tgz  gcr.io/GCPのプロジェクトID/unity-ml-agents:0.9.1  SUCCESS

GCP管理コンソールでもジョブの実行が確認できます。

Google Container RegistryにもイメージがPushされていることも確認できます。

これでローカルにDockerがインストールされていなくても、イメージ作成ができるようになりました。

参考

Google Cloud Build
https://cloud.google.com/cloud-build/?hl=ja

Google Cloud Buildとは一体何者なのか
https://swet.dena.com/entry/2018/08/20/170836

Cloud Build 変数値の置換
https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values

Cloud SDK のインストール | Cloud SDK のドキュメント | Google Cloud
https://cloud.google.com/sdk/downloads?hl=JA)

元記事はこちら

Google Cloud Buildを利用してUnity ML-AgentsのDockerイメージを作成する(v0.9.1対応)