Engine上でTensorFlowを動かしてみよう藤原秀平(著者)第8回では○×ゲームを題材にTensorFlowのサンプルコードを動かしてみました。Engine)を使ってみましょう。Platform)のサービスのひとつで、TensorFlowの実行環境を提供してくれるというものです。大きく以下の2つの機能を持っています。APIを生成するまず初めに、それぞれの機能についていったい何が便利なのかというところを簡単に説明しておきましょう。学習アルゴリズム実行のためのマシンリソース機械学習のアルゴリズムを回すためには大量のマシンリソースが必要である、という話は最近よく耳にするのではないでしょうか。Learningなどはネットワークの構造が大きく複雑になるほど計算が重くなり、相当なマシンリソースが必要になります。最近では計算の高速化のためにGPUを使うことが多く、本格的に学習をさせたい場合はそのための環境を構築しなければなりません。高速化したい場合は分散学習をさせるためのクラスタを作る必要もあります。Engineを使うと、これらの手間を飛ばして実行環境をすべて用意してもらうことができます。学習済みモデルのデプロイ学習済みのモデルをどうやって呼び出すかというのも難しい問題です。APIとして切り離してしまうという方法があります。APIを作成することが可能です。APIなどのGCPで提供されている機械学習APIとほぼ同じように扱うことができます。大量のリクエストを送っても自動でスケールしてくれますし、新しいモデルを作成して切り替えるときのバージョン管理も簡単にできるようになっています。Shell上で行います。本稿で使用するサンプルコードは以下のGitHubのリポジトリで公開されています。Storageのバケットを作成しましょう。今回は学習用データや学習済みのモデルを置くバケットと、TensorFlowのコードをアップロードするためのバケットを作成します。Shell上で次のコマンドを実行してください。ID>-ml-stagingの2つのバケットが作成されます。Storageのバケットサンプルコードの内容まずは以下のコマンドを実行してサンプルコードをダウンロードしてください。Engineに渡すTensorFlowのコードの最小構成は以下のようになります。本稿で使用するサンプルコードも同様の構成です。trainer以下はPythonの一般的なパッケージと同じ構成になっていれば自由に変えても問題ありません。Engine上で、pipでインストールされるという仕組みです。Engineの役割はあくまで実行環境を用意することなので、学習用のコードは自由に書くことができます。Engineに用意してもらいたいマシンの情報を記述する設定ファイルです。今回は以下のような設定ファイルでGPUインスタンスを使用しています。Engineなどを使って環境構築を行うよりもずっと楽をすることができます。設定ファイルの詳細な書き方については公式のドキュメントに詳しく掲載されているので、そちらを確認してください。TensorFlowはCPUを使う場合とGPUを使う場合でコードを変更しなくて済むような書き方ができるので、実は本稿で使用するサンプルコードは第8回のものとほとんど変わっていません。Engineにジョブを送ってみましょう。以下のコマンドを実行してみてください。Engineが用意したインスタンスはそのパッケージをインストールしてtask.pyを実行するという一連の作業が自動で行われます。--output_pathと--csv_fileはtask.pyが実行されるときに渡されるコマンドライン引数です。今回は学習済みのモデルなどを保存する場所と、学習に使用するデータの場所を渡しています。task.pyでは以下のようにコマンドライン引数の値を受け取れるように記述しています。Engineのコンソールを表示してみましょう。図3のようにジョブのステータスが表示されるはずです。ジョブIDの左側のアイコンが図のように作成済みを示すチェックマークになるまで待ちましょう。Loggingからログを確認することができます。設定をしなくても学習中のログを一箇所に集約してくれる便利な機能です。これらのログをBigQueryに保存することも可能です。APIを生成することができます。gs://${PROJECT_ID}-ml/tictactoe/${JOB_NAME}/model図5のようにtictactoeというModelと、その下にv1というVersionが作成されているはずです。Engineの管理画面からデプロイしたモデルを確認このVersionがTensorFlowの学習済みモデルに対応しているものです。ひとつのModelの下に複数のVersionを作成して、この管理画面から新しいVersionに切り替えたり古いVersionに戻したりという作業を簡単に行うことができます。APIなど他のGCPの機械学習APIとほぼ同じです。クライアントライブラリをインストールしましょう。google-api-python-clientクライアントライブラリを使ってモデルを呼び出すサンプルとしてprediction.pyを用意しておきましたので、実行してみましょう。prediction.py以下のように予測の結果が返ってきます。配列yの要素がそれぞれ勝確率・負ける確率・引き分けの確率に対応しています。デプロイしたモデルを使用する例prediction.pyの内容について少し補足の解説をしておきましょう。Engineにデプロイしたモデルに渡しています。indent=2))"instances"の各要素がデータ1個分に対応しています。この例では1つしか送っていませんが、同時に複数送信することも可能です。送られるデータは"x"と"key"を持っています。"x"は盤面の状態を表す長さ9の配列です(盤面の表し方については第8回の記事を参考にしてください)。"key"は、今回は任意の整数を渡せるようにしてあります。複数のデータに対してまとめて予測の処理を行う場合、返ってくる結果が渡したときと同じ順番になっていることが保証されていないので、後で対応関係を調べるために存在しているものです。次のステップ今回は1つのGPUインスタンスを使って学習をさせましたが、TensorFlowを使うと複数インスタンスを使った分散学習を実装することも可能です。Engineでも設定を変えれば簡単に分散学習用のクラスタを用意することができるので、興味がある方は挑戦してみてください。Engineにはハイパーパラメータを自動でチューニングする機能など紹介しきれなかった便利な機能も存在しているので、ぜひ試してみてください。著者プロフィール藤原秀平(著者)株式会社トップゲート所属。リリース直後からTensorFlowを触り続けて、気がつけばTensorFlowについて喋ることとTensorFlowを使ってコードを書くことが仕事に。本書は、機械学習やデータ分析を専門とはしない、一般の方を対象とした書籍です。言っても、ディープラーニングの歴史や人工知能の将来展望を語る啓蒙書ではありません。福島真太朗(監訳)機械学習の考え方とPython実装法がわかる!分類/回帰問題や深層学習の導入を解説。Corporation。