線形学習者組み込みアルゴリズムを使ってみる

は、

Cloud Machine Learning Engine(Cloud ML Engine)の組み込みアルゴリズムを使用すると、トレーニング データを送信してアルゴリズムを選択し、トレーニング アプリケーション用のコードを一切作成することなく、前処理とトレーニングを Cloud ML Engine に任せることができます。

概要

このチュートリアルでは、コードを一切作成せずに線形学習者モデルをトレーニングします。国勢調査所得データセットを Cloud ML Engine に送信して前処理とトレーニングを行ってから、そのモデルを Cloud ML Engine にデプロイして予測を取得します。具体的には、個人の年収が $50,000 を超える確率を予測します。

始める前に

コマンドラインでこのチュートリアルを進めるには、Cloud Shell、または Cloud SDK がインストールされている環境を使用してください。

次の手順に従って、GCP アカウントの設定、必要な API の有効化、Cloud SDK のインストールと有効化を行います。

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console で [リソースの管理] ページに移動し、既存のプロジェクトを選択するか、新しいプロジェクトを作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. Cloud Machine Learning Engine と Compute Engine API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。

Cloud ML Engine で使用するアカウントをすでに設定していて、Cloud SDK のインストールも完了している場合は、gcloud beta を更新します。

gcloud components install beta

設定

組み込みアルゴリズムを使用するには、CSV ファイルからヘッダー行を削除し、ターゲット値を最初の列に移動する必要があります。このチュートリアルでの使用のために、元の国勢調査データセットは変更されていて、Cloud Storage の公開バケット gs://cloud-samples-data/ml-engine/census/algorithms/data/ でホストされています。

Console

トレーニング ジョブを開始する前に、Cloud Storage の公開バケットからご使用の Cloud Storage バケットにデータをコピーする必要があります。

サンプルデータを Cloud Storage バケットにコピーする

  1. まず、Cloud Storage の公開バケットからトレーニング データとテストデータをダウンロードします。

    1. Cloud Storage の公開バケットに移動します。

      サンプルデータを取得する

    2. 各ファイルの名前(test.csvtrain.csv)をクリックします。前者は ml-engine_census_algorithms_data_test.csv、後者は ml-engine_census_algorithms_data_train.csv としてローカル環境にダウンロードされます。

  2. 次に、トレーニング データとテストデータをご使用の Cloud Storage バケットにアップロードします。

    1. Cloud Storage バケットの [ブラウザ] ページに移動します。[プロジェクトを選択] プルダウン リストからプロジェクトを選択するか、新しいタブでプロジェクトを開きます。

      Cloud Storage の [ブラウザ] ページ

    2. 使用するバケットの名前をクリックします。バケットが存在しない場合は、新しいバケットを作成します(新しいバケットを作成する場合は必ずリージョン バケットにして、Cloud ML Engine トレーニング ジョブを実行するリージョンと同じリージョンを選択してください)。

    3. (省略可)[フォルダを作成] をクリックし、ファイルをアップロードするフォルダを作成します。フォルダの名前(「data」など)を入力して [作成] をクリックします。次に、フォルダ名をクリックして新しいフォルダに移動します。

    4. [ファイルをアップロード] をクリックして、トレーニング ファイルとテストファイルの両方(ml-engine_census_algorithms_data_train.csvml-engine_census_algorithms_data_test.csv)をバケットにアップロードします。

これでデータがバケットにコピーされたので、使用するアルゴリズムの種類を選択してトレーニング ジョブを開始できます。

アルゴリズムを選択する

  1. Google Cloud Platform Console で、Cloud ML Engine の [ジョブ] ページに移動します。

    Cloud ML Engine の [ジョブ] ページ

  2. [新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。[新しいトレーニング ジョブの作成] ページが表示されます。

  3. トレーニング ジョブの作成は 4 つのステップに分かれています。最初のステップはトレーニング アルゴリズムです。[Linear Learner] を選択して [次へ] をクリックします。

gcloud

プロジェクト ID、Cloud Storage バケット、Cloud Storage 上のトレーニング データへのパス、使用するアルゴリズムのそれぞれを格納する環境変数を設定します。

Cloud ML Engine の組み込みアルゴリズムは、Container Registry でホストされている Docker コンテナにあります。

PROJECT_ID="[YOUR-PROJECT-ID]"
BUCKET_NAME="[YOUR-BUCKET-NAME]"
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Copy the training data into your Cloud Storage bucket, and set the path
# to your copy of the training data.
TRAINING_DATA_SOURCE="gs://cloud-samples-data/ml-engine/census/algorithms/data/train.csv"
TRAINING_DATA_PATH="gs://$BUCKET_NAME/algorithms-demo/data/train.csv"
gsutil cp $TRAINING_DATA_SOURCE $TRAINING_DATA_PATH

# Specify the Docker container URI specific to the algorithm.
IMAGE_URI="gcr.io/cloud-ml-algos/linear_learner_cpu:latest"

トレーニング ジョブを送信する

ジョブを送信するには、基本的なトレーニング引数と、線形学習者アルゴリズムに関する基本的な引数を指定する必要があります。

トレーニング ジョブの一般的な引数:

トレーニング ジョブの引数
引数 説明
job-id トレーニング ジョブの一意の ID。トレーニング ジョブを送信した後、この ID を使用してログを検索しトレーニング ジョブのステータスを確認できます。
job-dir トレーニング ジョブが正常に完了した後に Cloud ML Engine がトレーニング ファイルを保存する Cloud Storage のパス。
scale-tier トレーニングに使用する Cloud ML Engine マシンタイプを指定します。BASIC を使用して単一マシンの構成を選択します。
master-image-uri トレーニング ジョブに使用する Docker コンテナを指定するための Container Registry URI。すでに IMAGE_URI として定義されている線形学習者組み込みアルゴリズムのコンテナを使用します。
region トレーニング ジョブを実行するために利用可能なリージョンを指定します。このチュートリアルでは、リージョン us-central1 を使用できます。

線形学習者組み込みアルゴリズムに固有の引数:

アルゴリズムの引数
引数 説明
preprocess Cloud ML Engine にデータの前処理を行わせるかどうかを示すブール引数。
model_type トレーニングするモデルのタイプ(分類または回帰)を示します。
training_data_path Cloud Storage 上のトレーニング データの場所。トレーニング データは CSV ファイルでなければなりません。
learning_rate 線形オプティマイザーによって使用される学習率。
max_steps トレーニングを実行するステップの数。
batch_size トレーニング ステップあたりの使用するサンプル数。

線形学習者アルゴリズムのその他すべてのフラグの詳細なリストについては、線形学習者組み込みアルゴリズムのリファレンスをご覧ください。

Console

  1. [自動データ前処理を有効にする] をオンのままにします。

  2. [トレーニング データパス] の [参照] をクリックします。右側のパネルでトレーニング データをアップロードしたバケットの名前をクリックし、ml-engine_census_algorithms_data_train.csv ファイルに移動します。

  3. [検証データ] と [テストデータ] のフィールドはデフォルト設定のままにします。

  4. [出力ディレクトリ] に、トレーニング ジョブからの出力を保存する Cloud Storage バケットへのパスを入力します。Cloud Storage バケットのパスを直接入力するか、[参照] ボタンをクリックしてパスを選択します。

    ストレージを整理するため、このトレーニング ジョブ用の新しいディレクトリを Cloud Storage バケットに作成します。これは [参照] パネルで行うことができます。

    [次へ] をクリックします。

  5. [モデルタイプ] として [分類] を選択します。

  6. 他のフィールドはすべてデフォルト設定のままにして、[次へ] をクリックします。

  7. [ジョブの設定] ページで次の操作を行います。

    1. [ジョブ ID] に一意の ID(「linear_example」など)を入力します。
    2. [リージョン] に使用可能なリージョン(「us-central1」など)を入力します。
    3. [スケール階層] で [BASIC] を選択します。

    [完了] をクリックしてトレーニング ジョブを送信します。

gcloud

  1. gcloud を使用してジョブを送信する前に、トレーニング ジョブとアルゴリズムのすべての引数を設定します。

    DATASET_NAME="census"
    ALGORITHM="linear"
    MODEL_TYPE="classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. ジョブを送信します。

    gcloud beta ml-engine jobs submit training $JOB_ID \
      --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
      -- \
      --preprocess --model_type=$MODEL_TYPE --batch_size=250 \
      --learning_rate=0.1 --max_steps=1000 --training_data_path=$TRAINING_DATA_PATH
    
  3. ジョブが正常に送信された後、次の gcloud コマンドを使用してログを表示できます。

    gcloud ml-engine jobs describe $JOB_ID
    gcloud ml-engine jobs stream-logs $JOB_ID
    

ジョブ ディレクトリについて

トレーニング ジョブが正常に完了すると、トレーニング済みのモデルとその他の成果物が Cloud Storage バケットに作成されます。JOB_DIR 内のディレクトリ構造は次のようになっています。

  • model/
    • model.pkl
    • deployment_config.yaml
  • artifacts/
    • metadata.json
  • processed_data/
    • training.csv
    • validation.csv
    • test.csv

JOB_DIR のディレクトリ構造が上記と一致していることを確認します。

gsutil ls -a $JOB_DIR/*

トレーニング済みモデルをデプロイする

Cloud ML Engine は、モデルとバージョンのリソースを使用して、トレーニング済みのモデルを編成します。Cloud ML Engine モデルとは、機械学習モデルの複数のバージョンを格納するコンテナに相当します。

モデルをデプロイするには、Cloud ML Engine でモデルリソースを作成し、そのモデルのバージョンを作成してから、そのモデルとバージョンを使用してオンライン予測をリクエストします。

モデルを Cloud ML Engine にデプロイする方法の詳細については、TensorFlow モデルをデプロイする方法をご覧ください。

Console

  1. [ジョブ] ページには、すべてのトレーニング ジョブが一覧表示されます。先ほど送信したトレーニング ジョブの名前(「linear_example」または実際に使用したジョブ名)をクリックします。

  2. [ジョブの詳細] ページでは、ジョブの全般的な進行状況を確認できます。[ログを表示] をクリックすると、進行状況の詳細が表示されます。

  3. ジョブが成功すると、[モデルをデプロイ] ボタンが上部に表示されます。[モデルをデプロイ] をクリックします。

  4. [新しいモデルとしてデプロイ] を選択し、モデル名(「algorithms_linear_model」など)を入力します。次に、[確認] をクリックします。

  5. [バージョンの作成] ページでバージョン名(「v1」など)を入力します。他のフィールドはすべてデフォルト設定のままにします。[保存] をクリックします。

gcloud

線形学習者組み込みアルゴリズムを使用してトレーニングを行うと、deployment_config.yaml というファイルが生成されます。これを使用して、予測用のモデルを Cloud ML Engine に簡単にデプロイできます。

  1. ファイルをローカル ディレクトリにコピーし、その内容を表示します。

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    deployment_config.yaml ファイルの内容は次のようなものです。

    deploymentUri: gs://BUCKET_NAME/algorithms_training/census_linear_classification/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: census_linear_classification_20190227060114
    runtimeVersion: '1.12'
    
  2. Cloud ML Engine でモデルとバージョンを作成します。

    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    gcloud ml-engine models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ml-engine versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    バージョンの作成には数分かかります。

オンライン予測を取得する

予測をリクエストするときは、入力データをトレーニング データと同じような形式にする必要があります。Cloud ML Engine はトレーニングの前に、metadata.json に示されたコーパスにデータを変換し、データの前処理を行います。

TensorFlow Estimator モデルは、予測を行う前に同様の前処理を入力データに適用します。

  1. トレーニング成果物ファイルをダウンロードし、metadata.json を確認します。

    gsutil cp $JOB_DIR/artifacts/* .
    
    # Let's look at the metadata.json file
    head metadata.json
    
  2. 予測入力として 1 つのデータ インスタンスを準備します。

     # A sample record from census dataset. Ground truth is >50K
    RAW_DATA_POINT="44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States"
    
     # Create a prediction request file
    echo $RAW_DATA_POINT > sample_input.csv
    
    # Check the prediction request file.
    cat sample_input.csv
    
  3. 予測リクエストを送信します。

    gcloud ml-engine predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --text-instances sample_input.csv
    

予測の結果は 0.5 より大きい値になるはずです。これは、この個人の年収が $50,000 を超える可能性が高いことを示しています。

データについて

このサンプルでトレーニングに使用している国勢調査所得データセットは、UC Irvine Machine Learning Repository でホストされています。

国勢調査データ転載元: Lichman, M. (2013). UCI Machine Learning Repository http://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science.

次のステップ

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

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