このチュートリアルでは、MNIST モデルの概要、MNIST TensorFlow TPU コードサンプルのダウンロード方法、Cloud TPU でコードを実行する方法について説明します。
モデルの説明
MNIST データセットには、0 から 9 までの手書きの数字の画像と、各画像の数字を識別するラベルが含まれています。
このチュートリアルでは、MNIST データセットに基づいて画像を分類する機械学習モデルをトレーニングします。トレーニング後、このモデルは MNIST データセットの手書き画像から学習した内容に基づいて、受信画像を 10 個のカテゴリ(0〜9)のいずれかに分類します。まだ学習していない画像をモデルに送信した場合、モデルはトレーニングで学習した内容に基づいて画像内の数字を識別します。
MNIST データセットは次の 3 つの部分から構成されます。
- 55,000 例のトレーニング データ
- 10,000 例のテストデータ
- 5,000 例の検証データ
データセットの詳細については、MNIST データベース サイトをご覧ください。
モデルには 7 つの層が混在しています。
- 2 つの畳み込み層
- 2 つの最大プーリング増
- 2 つの高密度(全結合)層
- 1 つのドロップアウト層
損失は softmax によって計算されます。
このバージョンの MNIST モデルは、高レベルの TensorFlow API である tf.estimator を使用しています。tf.estimator は Tensorflow 1.x でのみ使用できます。Tensorflow 2.x を使用している場合は、Keras API を代わりに使用する MNIST チュートリアルをご覧ください。
目標
- データセットとモデルの出力を格納する Cloud Storage バケットを作成します。
- トレーニング ジョブを実行します。
- 出力結果を確認します。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
- Compute Engine
- Cloud TPU
- Cloud Storage
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
このチュートリアルを開始する前に、Google Cloud プロジェクトが正しく設定されていることを確認します。
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
このチュートリアルでは、Google Cloud の課金対象となるコンポーネントを使用します。費用を見積もるには、Cloud TPU の料金ページを確認してください。不要な課金を回避するために、このチュートリアルを完了したら、作成したリソースを必ずクリーンアップしてください。
リソースを設定する
このセクションでは、チュートリアルで使用する Cloud Storage、VM、Cloud TPU の各リソースを設定する方法を説明します。
Cloud Shell ウィンドウを開きます。
プロジェクト ID の変数を作成します。
export PROJECT_ID=project-id
Cloud TPU を作成するプロジェクトを使用するように Google Cloud CLI を構成します。
gcloud config set project ${PROJECT_ID}
このコマンドを新しい Cloud Shell VM で初めて実行すると、
Authorize Cloud Shell
ページが表示されます。ページの下部にある [Authorize
] をクリックして、gcloud
に認証情報を使用した GCP API の呼び出しを許可します。Cloud TPU プロジェクトのサービス アカウントを作成します。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
このコマンドでは、Cloud TPU サービス アカウントを次の形式で返します。
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
次のコマンドを使用して Cloud Storage バケットを作成します。
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
この Cloud Storage バケットには、モデルのトレーニングに使用するデータとトレーニング結果が格納されます。このチュートリアルで使用する
gcloud
コマンドは、Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。バケットのロケーションは、仮想マシン(VM)および TPU ノードと同じリージョンにする必要があります。VM と TPU ノードは、リージョン内のサブディビジョンである特定のゾーンに配置されます。
gcloud
コマンドを使用して、ここで必要となる Compute Engine リソースを起動します。$ gcloud compute tpus execution-groups create \ --name=mnist-tutorial \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --machine-type=n1-standard-1 \ --accelerator-type=v3-8
コマンドフラグの説明
gcloud
コマンドの詳細については、gcloud リファレンスをご覧ください。プロンプトが表示されたら、y キーを押して Cloud TPU リソースを作成します。
gcloud
コマンドの実行が終了したら、shell プロンプトが username@projectname
から username@vm-name
に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。Compute Engine インスタンスに接続していない場合は、次のコマンドを実行して接続できます。
gcloud compute ssh mnist-tutorial --zone=europe-west4-a
これ以降、接頭辞 (vm)$
は Compute Engine VM インスタンスでコマンドを実行する必要があることを意味します。
- Storage バケットとモデル ディレクトリの環境変数を作成します。
bucket-name は、使用する Cloud Storage バケットの名前に置き換えます。
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export TPU_NAME=mnist-tutorial (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
データを取得する
MNIST データセットは MNIST データベース サイトでホストされています。次の手順に従って、データをダウンロードして必要な形式に変換し、変換したデータを Cloud Storage にアップロードします。
MNIST データをダウンロードして変換する
convert_to_records.py スクリプトは、データをダウンロードし、例の MNIST モデルで想定される TFRecord 形式に変換します。
次のコマンドを使用して、スクリプトを実行し、ファイルを解凍します。
(vm)$ python3 /usr/share/tensorflow/tensorflow/examples/how_tos/reading_data/convert_to_records.py --directory=./data (vm)$ gunzip ./data/*.gz
Cloud Storage にデータをアップロードする
Cloud Storage バケットにデータをアップロードして、TPU サーバーがデータにアクセスできるようにします。
(vm)$ gsutil cp -r ./data ${DATA_DIR}
MNIST TPU モデルを実行する
MNIST TPU モデルは、Compute Engine VM の次のディレクトリにプリインストールされています。
/usr/share/tpu/models/official/mnist/
MNIST TPU モデルのソースコードは GitHub でも入手できます。モデルは Cloud TPU 上で実行できます。また、ローカルマシンでモデルを実行する方法もあります。
Cloud TPU でモデルを実行する
次の手順で、先頭が (vm)$
で始まるコマンドは、Compute Engine VM で実行することを表しています。
モデル ディレクトリに移動します。
(vm)$ cd /usr/share/tpu/models/official/mnist/
MNIST モデルを実行します。
(vm)$ python3 mnist_tpu.py \ --tpu=${TPU_NAME} \ --data_dir=${DATA_DIR} \ --model_dir=${MODEL_DIR} \ --use_tpu=True \ --iterations=500 \ --train_steps=2000
コマンドフラグの説明
tpu
- Cloud TPU の名前。Compute Engine VM と Cloud TPU の設定時に名前を指定しなかった場合は、デフォルトでユーザー名が指定されます。
data_dir
- トレーニング入力の Cloud Storage パス。この例では、fake_imagenet データセットに設定されています。
model_dir
- トレーニング中にチェックポイントとサマリーが保存される Cloud Storage バケット。既存のフォルダを使用して、同じサイズの TPU と TensorFlow バージョンで以前に生成されたチェックポイントを読み込むことができます。
use_tpu
- Cloud TPU でトレーニングするには、
true
に設定します。 iterations
- 1 エポックを完了するために必要なバッチ数。
iterations
- 1 エポックを完了するために必要なバッチの数。
ローカル(TPU 以外の)マシンでモデルを実行する
TPU 以外のマシンでモデルを実行するには、--tpu
を省略して --use_tpu=False
を設定します。
これにより、GPU が存在する場合は計算が GPU に届きます。GPU が存在しない場合、計算は CPU にフォールバックします。
期待される動作
デフォルトの場合、tf.estimator モデルは損失値とステップ時間を次の形式で報告します。
Run stats: { 'accuracy_top_1': 0.9762369990348816, 'eval_loss': 0.07863274961709976, 'loss': 0.1111728847026825, 'training_accuracy_top_1': 0.966645359992981 }
クリーンアップ
このトピックで使用したリソースについて GCP アカウントに課金されないようにする手順は次のとおりです。
Compute Engine VM との接続を解除します。
(vm)$ exit
プロンプトが
username@projectname
に変わります。これは、現在、Cloud Shell 内にいることを示しています。Cloud TPU と Compute Engine リソースを削除します。
$ gcloud compute tpus execution-groups delete mnist-tutorial \ --zone=europe-west4-a
gcloud compute tpus execution-groups list
を実行して、リソースが削除されたことを確認します。削除には数分かかることがあります。以下のようなレスポンスは、インスタンスが正常に削除されたことを示します。$ gcloud compute tpus execution-groups list \ --zone=europe-west4-a
NAME STATUS
次に示すように、
gsutil
を使用して Cloud Storage バケットを削除します。bucket-name を Cloud Storage バケットの名前に置き換えます。$ gsutil rm -r gs://bucket-name
次のステップ
TensorFlow Cloud TPU のチュートリアルでは通常、サンプル データセットを使用してモデルをトレーニングします。このトレーニングの結果は推論に使用できません。モデルを推論に使用するには、一般公開されているデータセットまたは独自のデータセットでデータをトレーニングします。Cloud TPU でトレーニングされた TensorFlow モデルは通常、データセットを TFRecord 形式にする必要があります。
データセット変換ツールのサンプルを使用して、画像分類データセットを TFRecord 形式に変換できます。画像分類モデルを使用しない場合は、自分でデータセットを TFRecord 形式に変換する必要があります。詳細については、TFRecord と tf.Example をご覧ください。
ハイパーパラメータ調整
データセットでモデルのパフォーマンスを向上させるには、モデルのハイパーパラメータを調整します。すべての TPU でサポートされているモデルに共通のハイパーパラメータに関する情報については、GitHub をご覧ください。モデルに固有のハイパーパラメータに関する情報については、各モデルのソースコードで確認できます。ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要、ハイパーパラメータ調整サービスの使用、ハイパーパラメータを調整するをご覧ください。
推論
モデルをトレーニングしたら、そのモデルを推論(予測)に使用できます。AI Platform は、機械学習モデルを開発、トレーニング、デプロイするためのクラウドベースのソリューションです。モデルをデプロイすれば、AI Platform Prediction サービスを使用できるようになります。
- ResNet サンプルを実行して、大規模モデルでのパフォーマンスを確認する。
- TensorBoard の TPU ツールを確認します。