トレーニングの概要

AI プラットフォームを使用して、TensorFlow トレーニング アプリケーションをクラウドで実行できます。さらに、カスタム コンテナを使用して、他の機械学習フレームワークでトレーニング ジョブを実行することもできます。このページでは、自身のモデル トレーニングを最大限に活用するために必要である主要なコンセプトについて説明します。今すぐトレーニング プロセスを開始したい場合は、トレーニング ジョブの開始をご覧ください。

トレーニングの仕組み

AI プラットフォームは、クラウド内のコンピューティング リソース上でトレーニング ジョブを実行します。トレーニング アプリケーションを作成しなくても、データセットに対して組み込みアルゴリズム(ベータ版)をトレーニングできます。組み込みアルゴリズムが実際のユースケースに適していない場合は、AI プラットフォーム上で実行するトレーニング アプリケーションを作成できます。

トレーニング アプリケーションの使用手順の概要は次のとおりです。

  1. モデルをトレーニングする TensorFlow アプリケーションを作成します。このアプリケーションは、開発環境でローカルに実行するときと同じようにビルドします。
  2. トレーニングと検証のデータを取得して、AI プラットフォームがアクセスできるソースを作成します。格納先は通常、Cloud Storage、Cloud Bigtable、または Cloud ML Engine で使用しているのと同じ GCP プロジェクトに関連付けられている別の Google Cloud Platform ストレージ サービスです。
  3. アプリケーションを実行する準備ができたら、アプリケーションをパッケージングし、プロジェクトからアクセスできる Cloud Storage バケットに転送する必要があります。gcloud コマンドライン ツールを使用してトレーニング ジョブを実行する場合、これは自動的に行われます。
  4. AI プラットフォーム トレーニング サービスにより、ジョブのリソースが設定されます。さらに、ジョブの構成に基づいて 1 つ以上の仮想マシン(「トレーニング インスタンス」と呼ばれます)が割り当てられます。各トレーニング インスタンスは次のようにして設定されます。
    • ジョブで使用される AI プラットフォームのバージョンに応じた標準マシンイメージを適用する。
    • アプリケーション パッケージを読み込み、pip を使用してインストールする。
    • 依存関係として指定されたその他の追加パッケージをインストールする。
  5. トレーニング サービスでアプリケーションを実行します。このとき、トレーニング ジョブの作成時に指定したコマンドライン引数が渡されます。
  6. 実行中のジョブに関する情報を得るには、次の方法があります。
    • Stackdriver Logging で表示する。
    • gcloud コマンドライン ツールを使用して、ジョブの詳細をリクエストするか、ログのストリーミングを実行する。
    • トレーニング サービスへのステータス リクエストをプログラムで実行する。
  7. トレーニング ジョブが正常に終了するか、または回復不能なエラーが発生すると、AI プラットフォームはすべてのジョブプロセスを停止してリソースをクリーンアップします。

分散トレーニング構造

AI プラットフォームで分散 TensorFlow ジョブを実行する場合は、トレーニング クラスタで複数のマシン(ノード)を指定します。トレーニング サービスは、指定されたマシンタイプに応じたリソースを割り当てて、上記のステップ 4 を各マシンに対して実行します。特定のノード上で実行中のジョブを「レプリカ」と呼びます。分散 TensorFlow モデルに従って、トレーニング クラスタ内の各レプリカには分散トレーニングにおける役割またはタスクが 1 つ割り当てられます。

  • マスター: 1 つのレプリカのみが「マスター」として指定されます。このタスクは他のレプリカを管理し、ジョブ全体のステータスを報告します。トレーニング サービスは、ジョブが成功するか回復不能なエラーが発生するまで続きます。分散トレーニングでは、マスター レプリカのステータスによって全体的なジョブ ステータスが示されます。

    シングルプロセス ジョブを実行する場合は、その唯一のレプリカがジョブのマスターとなります。

  • ワーカー: 1 つ以上のレプリカが「ワーカー」として指定されます。これらのレプリカに担当させる作業は、ジョブ構成で指定します。

  • パラメータ サーバー: 1 つ以上のレプリカが「パラメータ サーバー」として指定されます。これらのレプリカは、ワーカー間で共有されるモデルの状態を調整します。

一般的な機械学習アプリケーション

AI プラットフォーム トレーニング サービスは、ユーザーが作成するアプリケーションにできる限り影響を与えないように設計されています。つまり、決められた構造に制限されることなく、求めているモデルを定義する TensorFlow コードの記述に集中できます。

ほとんどの機械学習アプリケーションでは、以下を行います。

  • トレーニング データと評価データを取得する方法を提供する。
  • 複数のデータ インスタンスをバッチ処理する。
  • 評価データを使用してモデルの精度(正しい値を予測する頻度)をテストする。
  • プロセス中に一定間隔でチェックポイントを出力し、モデルの進行状況のスナップショットをとる方法を提供する。
  • アプリケーションが終了したときにトレーニング済みモデルをエクスポートする方法を提供する。

アプリケーションのパッケージング

AI プラットフォームでトレーニング アプリケーションを実行するには、アプリケーションと必要な依存関係をパッケージングし、Google Cloud Platform プロジェクトがアクセスできる Cloud Storage バケットにパッケージをアップロードする必要があります。

gcloud コマンドライン ツールにより、このプロセスの大部分が自動化されます。たとえば、gcloud ai-platform jobs submit training を使用すると、アプリケーション パッケージをアップロードしてトレーニング ジョブを送信できます。

トレーニング アプリケーションのパッケージングに関する詳細な手順をご覧ください。

トレーニング ジョブの送信

AI プラットフォームは、モデル トレーニングを非同期(バッチ)サービスとして実行します。トレーニング ジョブを送信するには、コマンドラインから gcloud ai-platform jobs submit training を実行するか、projects.jobs.create の API にリクエストを送信します。

トレーニング ジョブの開始に関する詳細な手順をご覧ください。

ジョブ ID

トレーニング ジョブの名前は次のルールに従う必要があります。

  • Google Cloud Platform プロジェクト内で一意にすること。
  • 使用できるのは英大文字と小文字、数字、アンダースコアのみ。
  • 先頭は文字にすること。
  • 長さは 128 文字以下にすること。

ジョブ名の付け方は自由です。実行するジョブの数があまり多くない場合は、名前の付け方が重要になることはそれほどありません。多数のジョブを実行する場合は、後で長いリストからジョブ ID を見つける必要があるため、ジョブを区別しやすいようにジョブ ID を付けることをおすすめします。

一般的な方法は、同じモデルに関連付けられているすべてのジョブに同じ基本名を付けて、それに日付と時刻の文字列を付加する方法です。このような規則にすると、同じモデルのすべてのジョブがまとめて昇順で表示されるため、ジョブのリストを名前で簡単に並べ替えることができます。

スケール階層

AI プラットフォームでトレーニング ジョブを実行する場合は、必要なマシン数とマシンタイプを指定する必要があります。このプロセスを簡単にするために、「スケール階層」と呼ばれるクラスタ仕様があらかじめいくつか定義されており、その中から選択できるようになっています。また、カスタム階層を選択して、マシンタイプを自分で指定することもできます。

スケール階層を指定するには、ジョブ構成の TrainingInput オブジェクトに追加します。トレーニング ジョブを送信するために gcloud コマンドを使用する場合は、同じ識別子を使用できます。

スケール階層とマシンタイプの詳細な定義をご覧ください。

ハイパーパラメータ調整

ハイパーパラメータ調整を使用する場合は、トレーニング ジョブを作成するときに構成の詳細を含める必要があります。ハイパーパラメータ調整のコンセプト ガイドハイパーパラメータ調整の使用方法をご覧ください。

リージョンとゾーン

GCP では、ゾーンに分割されたリージョンを使用して、物理的なコンピューティング リソースの地理的なロケーションを定義します。AI プラットフォームでジョブを実行する際に、ジョブを実行するリージョンを指定します。

トレーニング データセットを Cloud Storage に保存する場合は、トレーニング データ用に使用している Cloud Storage バケットと同じリージョンでトレーニング ジョブを実行する必要があります。データバケットとは異なるリージョンでジョブを実行する必要がある場合は、ジョブの実行に時間がかかることがあります。

モデル トレーニングやオンライン / バッチ予測など、AI プラットフォーム サービスの利用可能なリージョンを確認するには、リージョン ガイドをお読みください。

job-dir を共通の出力ディレクトリとして使用

ジョブの出力ディレクトリを指定するには、ジョブの構成時にジョブ ディレクトリを設定します。ジョブを送信すると、AI プラットフォームによって以下が実行されます。

  • ジョブの実行前に問題を修正できるように、ディレクトリを検証する。
  • ディレクトリ パスをコマンドライン引数 --job-dir としてアプリケーションに渡す。

アプリケーションは、--job-dir 引数を考慮に入れた設計にする必要があります。他のパラメータを解析するときにこの引数の値を取得し、アプリケーションの出力を保存するときに使用します。トレーニング ジョブの開始のガイドをご覧ください。

ランタイム バージョン

サポートされる AI プラットフォーム ランタイム バージョンのうち、トレーニング ジョブに使用するランタイム バージョンを指定する必要があります。ランタイム バージョンを指定すると、割り当てられたトレーニング インスタンスにインストールされる TensorFlow やその他の Python パッケージのバージョンが決まります。必要な機能を提供するバージョンを指定します。トレーニング ジョブをローカルとクラウドで実行する場合は、ローカルジョブとクラウドジョブで同じランタイム バージョンが使用されるようにしてください。

入力データ

トレーニング ジョブで使用するデータは、AI プラットフォームで実行できるように次のルールに従う必要があります。

  • 読み取り可能で TensorFlow コードに渡せるデータ形式であること。
  • コードからアクセスできる場所にあること。データの格納先には、GCP ストレージやビッグデータ サービスを使用するのが一般的です。

出力データ

一般的に、アプリケーションでは、トレーニング中のチェックポイントやトレーニング完了時に保存されるモデルなどのデータが出力されます。必要であれば、他のデータをアプリケーションで出力することもできます。トレーニング ジョブと同じ GCP プロジェクトの Cloud Storage バケットに出力ファイルを保存するのが最も簡単です。

VM の再起動に対して復元性のあるトレーニング ジョブの構築

GCP VM は再起動されることがあります。こうした再起動があってもトレーニング ジョブを復元できるように、モデル チェックポイントを定期的に保存し、最新のチェックポイントから復元するようにジョブを構成する必要があります。

通常、モデル チェックポイントの保存先は、gcloud ai-platform jobs submit training コマンドの --job-dir 引数で指定した Cloud Storage パスです。

GPU を使用するトレーニング

AI プラットフォームでトレーニング ジョブを実行するときに、GPU(グラフィック プロセッシング ユニット)を使用できます。GPU は、大量の数学的演算を高速に実行するように設計されています。テンソルデータに対して実行する演算の種類によっては、CPU コアを持つマシンを追加するよりも GPU を使用するほうが効果的です。

AI プラットフォーム トレーニング サービスには、GPU を使用するための特別なインターフェースが用意されていません。GPU 対応のマシンを指定してジョブを実行すると、自動的に GPU が割り当てられます。GPU にアクセス可能なマシンタイプを特定のタスクタイプ用に指定すると、そのタスクタイプに割り当てられた各インスタンスは同じように構成されます(これは通常の動作です)。コードの単一レプリカが各マシン上で実行されます。

モデルによっては、GPU で実行するメリットがないこともあります。GPU をおすすめするのは、大規模で複雑なモデルで多数の数学的演算を行う場合です。この場合も、GPU の効果があるかどうかをテストするために、少数のサンプルデータでトレーニングを実行してください。

トレーニング ジョブに GPU を使用する方法をご覧ください。

TPU を使用するトレーニング

AI プラットフォームでは、Cloud TPU を使用してトレーニング ジョブを実行できます。

トレーニング ジョブに TPU を使用する方法をご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

TensorFlow 用 AI Platform