データの操作

Cloud Machine Learning Engine を使用するには、データと、そのデータで動作するモデルの 2 つが必要です。Cloud Machine Learning Engine API には、データの準備に必要なタスクに役立つサービスはありませんが、代わりに利用できるデータ サイエンス ツールが多数あります。このトピックでは、Cloud ML Engine で使用できるように準備済みのデータを扱う方法について説明します。

Cloud ML Engine のデータ操作を理解する

Cloud ML Engine は、機械学習における 2 つのタスク、つまりモデルのトレーニングとモデルからの予測の取得に役立ちます。サービスとの間でのデータ相互作用の種類は、それぞれ異なります。

トレーニング中のデータ

Cloud ML Engine トレーニング サービスが直接データと相互作用することはありません。トレーニングに関わるデータを管理するのは、トレーナーと、その開発に使用される TensorFlow のオブジェクトです。ただし、慣例的な設計パターンでは、以下のデータがプロセスの一部と見なされます。

トレーニングと評価のデータ

モデルをトレーニングするには、大量の既存データ インスタンスが必要です。このデータには、次のような特性があります。

  • 問題空間内のデータを代表する。
  • モデルが予測を行うために必要なすべての特徴が含まれるほか、新しいインスタンスで推測したいターゲット値が含まれている。
  • TensorFlow による受け入れ可能な形式でシリアル化されている(通常は CSV または TFRecords)。
  • Google Cloud Platform プロジェクトがアクセスできる場所に格納されている必要がある(一般的には Google Cloud Storage 上の場所または Google BigQuery)。
  • 2 つのデータセットに分割されている(モデルをトレーニングするためのデータセットと、トレーニング済みモデルの精度と一般化可能性を評価するデータセット)。

トレーナー パッケージとカスタム依存関係

Cloud ML Engine によるトレーニングを開始するには、トレーニング アプリケーションから Python パッケージを作成して Cloud Storage 上の場所でステージングする必要があります。カスタム依存関係がある場合にそのパッケージ ファイルを Cloud Storage に置いておき、トレーナー実行前にそのパッケージをトレーニング インスタンスにインストールするようにトレーナーを設定することもできます。

gcloud コマンドライン ツールを使用すると、トレーニング ジョブを開始するときにこのステップを自動的に処理できます。

詳細については、パッケージ作成方法のページをご覧ください。

トレーニングの出力ファイル

ほとんどのトレーナーは、トレーニング中にチェックポイントを保存し、トレーニング済みのモデルをジョブ終了時に TensorFlow SavedModel ファイルに書き込みます。これらを保存するための Cloud Storage 上の場所が必要であり、プロジェクトにその場所への書き込みアクセス権が付与されている必要があります。

特別なジョブ ディレクトリ オプションを、トレーニング ジョブの開始時に使用できます。ジョブ ディレクトリのパスを設定しておくと、そのパスが自動的に job_dir というコマンドライン引数としてトレーナーに渡されます。この引数を、アプリケーションの他の引数と一緒に解析してコード内で使用することができます。ジョブ ディレクトリの利点は、トレーナーを開始する前にトレーニング サービスがディレクトリを検証することです。

ジョブ ディレクトリを指定するには、ジョブの設定に使用する TrainingInput オブジェクトで値を "jobDir" キーとともに指定します。gcloud ツールを使って、--job-dir フラグを gcloud ml-engine jobs submit training に追加します。

ハイパーパラメータ調整データ

ハイパーパラメータ設定を使用するときは、トレーナーとトレーニング サービスとの相互作用が、トレーニング プロセス内の他の場所よりも緊密にできるようにする必要があります。詳しい説明については、ハイパーパラメータ調整のコンセプトのページをご覧ください。関係するデータの簡単な要約を次に示します。

  • 調整するハイパーパラメータは、トレーナーのコマンドライン引数として定義する必要があります。
  • 最適化しようとしているターゲット変数はトレーナーで定義され、ハイパーパラメータ指定オブジェクトに含まれています。
  • 個々の調整試行の結果は TF_CONFIG 環境変数にまとめられ、この変数にはサービスとアプリケーションの両方がアクセスできます。

トレーニングのログ

イベントのロギングをトレーナーの中で行うには、標準の Python ライブラリ(たとえば logging)を使用します。stderr に送信されたメッセージはすべて、Stackdriver Logging のそのジョブのエントリに記録されます。

予測中のデータ

トレーニング プロセス中とは異なり、予測に使用するデータについては Cloud ML Engine の厳密な要件があります。入力インスタンスのデータ形式は、予測のコンセプトのページで説明しています。関係するデータの要約を次に示します。

  • 入力インスタンス、つまり推論対象の新しいデータレコードは、予測のタイプに応じた形式であることが必要です。

    • オンライン予測入力は、リクエスト メッセージで送信される JSON 文字列の中でシリアル化されます。
    • バッチ予測入力データは、アクセス可能な Cloud Storage 上の場所にあるファイルに格納されます。
  • 予測自体もタイプによって異なります。

    • オンライン予測の結果は、レスポンス メッセージで返されます。
    • バッチ予測の結果は、指定された Cloud Storage 上の場所にあるファイルに書き込まれます。

Cloud Storage を使用する

モデル(とモデル トレーナー)と Cloud ML Engine の間のデータ交換のほとんどは、プロジェクトからアクセスできる Cloud Storage 上の場所を介して行われます。

プロセスの中で、Cloud Storage の使用が必須であるか推奨される部分は次のとおりです。

  • トレーナー パッケージとカスタム依存関係をステージングする。
  • トレーニングの入力データを保存する。
  • トレーニングの出力データを保存する。
  • SavedModel をモデル バージョンにするためにステージングする。
  • バッチ予測の入力ファイルを保存する。
  • バッチ予測の出力を保存する。

Cloud Storage バケットを設定する

Cloud ML Engine で使用するバケットを作成するときは、以下を実行する必要があります。

  • マルチリージョン値ではなく、特定のコンピューティング リージョンに割り当てます。
  • トレーニング ジョブを実行するのと同じリージョンを使用します。
  • モデルの多数の反復に対応できるようなフォルダ構造にします。

さまざまなプロジェクトからの Cloud Storage バケットの使用

Cloud ML Engine は、Google Cloud Storage での入力ファイル(トレーニング コード、トレーニング データ、予測データ)の読み取りと出力ファイル(トレーニング済みモデルとバッチ予測結果)の書き込みのアクセス権が必要です。このセクションでは、自分のプロジェクトの外部の Cloud Storage バケットに Cloud ML Engine ジョブからアクセスできるように設定する方法を説明します。

ステップ 1: クラウド プロジェクトから必要な情報を取得

Console

  1. Google Cloud Platform Console で IAM ページを開きます。

    [IAM] ページを開く

  2. [IAM] ページには、プロジェクトで関連する役割を持つすべてのメンバーが表示されます。Cloud ML Engine プロジェクトに複数のサービス アカウントがあります。リストで、Cloud ML サービス アカウント役割を持つサービス アカウントを探し、このサービス アカウントの ID をコピーします。ID は次のような形式です。

    "service-111111111111@cloud-ml.google.com.iam.gserviceaccount.com"

    以降のステップで、Cloud Console のページにこのサービス アカウントの ID を貼り付けます。

gcloud

このセクションの手順では、Google Cloud Platform プロジェクトに関する情報を取得します。この情報は、プロジェクトの Cloud ML Engine サービス アカウントのアクセス制御を変更するために使用されます。環境変数で後で使用するために、値を保存する必要があります。

  1. プロジェクトを選択して gcloud コマンドライン ツールを使用し、プロジェクト ID を取得します。

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    
  2. gcloud を使用して、プロジェクト用のアクセス トークンを取得します。

    AUTH_TOKEN=$(gcloud auth print-access-token)
    
  3. サービス アカウント情報を、プロジェクト設定のリクエストにより、REST サービスから取得します。

    SVC_ACCOUNT=$(curl -X GET -H "Content-Type: application/json" \
        -H "Authorization: Bearer $AUTH_TOKEN" \
        https://ml.googleapis.com/v1/projects/${PROJECT_ID}:getConfig \
        | python -c "import json; import sys; response = json.load(sys.stdin); \
        print response['serviceAccount']")
    

ステップ 2: Cloud Storage バケットへのアクセスの設定

Console

  1. Google Cloud Platform Console で [ストレージ] ページを開きます。

    [ストレージ] ページを開く

  2. バケット名の左側にあるボックスをオンにして、モデルのデプロイに使用する Cloud Storage バケットを選択します。

  3. 右上隅にある [情報パネルを表示] ボタンをクリックして、[権限] タブを表示します。

  4. サービス アカウントの ID を [メンバーを追加] フィールドに貼り付けます。このフィールドの右側で必要な役割(Storage Legacy Bucket Reader など)を選択します。

    選択する役割が不明な場合、複数の役割を選択すると、役割に設定された権限の簡単な説明が [メンバーを追加] フィールドの下に表示されます。

  5. サービス アカウントに目的の役割を割り当てるには、[メンバーを追加] フィールドの右側にある [追加] ボタンをクリックします。

gcloud

プロジェクトとサービス アカウントの情報があるので、Cloud Storage バケットのアクセス権を更新する必要があります。以下の手順では、前のセクションで使用したものと同じ変数名を使用します。

  1. バケットの名前を、BUCKET_NAME と言う名前の環境変数内に設定します。

    BUCKET_NAME="your_bucket_name"
    
  2. Cloud Storage バケットに対する読み取りアクセスをサービス アカウントに付与します。

    gsutil -m defacl ch -u $SVC_ACCOUNT:R gs://$BUCKET_NAME
    
  3. アクセスすることが必要なオブジェクトがすでにバケットに保存されている場合は、それらにも読み取りアクセス権を明示的に許可する必要があります。

    gsutil -m acl ch -u $SVC_ACCOUNT:R -r gs://$BUCKET_NAME
    
  4. 書き込みアクセス権を許可します。

    gsutil -m acl ch -u $SVC_ACCOUNT:W gs://$BUCKET_NAME
    

次のステップ

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

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

Cloud Machine Learning Engine(Cloud ML Engine)