![]() | ![]() | ![]() | ![]() | ![]() |
TensorFlow Cloud は、Google Cloud での Keras モデルのトレーニングとハイパーパラメータ調整を容易にするライブラリです。
TensorFlow Cloud のrun
API を使用すると、モデル コードを直接 Google Cloud アカウントに送信し、ログインして Cloud UI を操作しなくても (コンソールでプロジェクトを設定したら)、Google Cloud コンピューティング リソースを使用できます。
これは、Google Cloud コンピューティング リソースを Python ノートブック内から直接使用できることを意味します。このようなノートブックです!プレーンな.py
Python スクリプトからモデルを Google Cloud に送信することもできます。
簡単な例
これは、 TensorFlow Cloudと Google Cloud を使用してモデルをリモートでトレーニングする方法を示す簡単な入門例です。
これを読んでこれがどのように機能するかを理解することも、Google Colab でノートブックを実行することもできます。ノートブックを実行するには、Google Cloud アカウントに接続し、認証情報とプロジェクト ID を入力する必要があります。アカウントをまだ持っていない場合、またはコンソールでプロジェクトを設定する方法がわからない場合は、 Google Cloud アカウントの設定と接続をご覧ください。
必要なモジュールをインポートする
import tensorflow as tf
tf.version.VERSION
'2.6.0'
! pip install -q tensorflow-cloud
import tensorflow_cloud as tfc
print(tfc.__version__)
import sys
プロジェクト構成
プロジェクト パラメータを設定します。 GCP_PROJECT_ID
またはGCS_BUCKET
が何であるかわからない場合は、 Google Cloud アカウントの設定と接続を参照してください。
JOB_NAME
はオプションで、任意の文字列に設定できます。大規模なプロジェクトの一部として (たとえば) 複数のトレーニング実験を行っている場合、それぞれに一意のJOB_NAME
を指定することができます。
# Set Google Cloud Specific parameters
# TODO: Please set GCP_PROJECT_ID to your own Google Cloud project ID.
GCP_PROJECT_ID = 'YOUR_PROJECT_ID'
# TODO: set GCS_BUCKET to your own Google Cloud Storage (GCS) bucket.
GCS_BUCKET = 'YOUR_GCS_BUCKET_NAME'
# DO NOT CHANGE: Currently only the 'us-central1' region is supported.
REGION = 'us-central1'
# OPTIONAL: You can change the job name to any string.
JOB_NAME = 'mnist'
# Setting location were training logs and checkpoints will be stored
GCS_BASE_PATH = f'gs://{GCS_BUCKET}/{JOB_NAME}'
TENSORBOARD_LOGS_DIR = os.path.join(GCS_BASE_PATH,"logs")
MODEL_CHECKPOINT_DIR = os.path.join(GCS_BASE_PATH,"checkpoints")
SAVED_MODEL_DIR = os.path.join(GCS_BASE_PATH,"saved_model")
Google Cloud プロジェクトを使用するためのノートブックの認証
このコードはノートブックを認証し、有効な Google Cloud 認証情報と ID を確認します。これはif not tfc.remote()
ブロック内にあり、ノートブックでのみ実行され、ノートブック コードが Google Cloud に送信されたときに実行されないようにします。
# Using tfc.remote() to ensure this code only runs in notebook
if not tfc.remote():
# Authentication for Kaggle Notebooks
if "kaggle_secrets" in sys.modules:
from kaggle_secrets import UserSecretsClient
UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)
# Authentication for Colab Notebooks
if "google.colab" in sys.modules:
from google.colab import auth
auth.authenticate_user()
os.environ["GOOGLE_CLOUD_PROJECT"] = GCP_PROJECT_ID
モデルとデータのセットアップ
ここからは、単純な Keras モデルをセットアップして MNIST データセットで分類を実行するための基本的な手順に従います。
データの読み込みと分割
生データを読み取り、データセットをトレーニングおよびテストするために分割します。
(x_train, y_train), (_, _) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape((60000, 28 * 28))
x_train = x_train.astype('float32') / 255
モデルを作成してトレーニングの準備をする
単純なモデルを作成し、いくつかのコールバックを設定します。
from tensorflow.keras import layers
model = tf.keras.Sequential([
tf.keras.layers.Dense(512, activation='relu', input_shape=(28 * 28,)),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(loss='sparse_categorical_crossentropy',
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy'])
クイック検証トレーニング
すべてが正しく設定されていることを確認するためだけに、モデルを 1 エポックトレーニングします。トレーニング コマンドをif not
tfc.remote
にラップします。 Google Cloud に送信されたときではなく、これを読んでいます。
if not tfc.remote():
# Run the training for 1 epoch and a small subset of the data to validate setup
model.fit(x=x_train[:100], y=y_train[:100], validation_split=0.2, epochs=1)
リモートトレーニングの準備
以下のコードは、これを読んでいるランタイム内ではなく、ノートブック コードが Google Cloud に送信されたときにのみ実行されます。
まず、次のようなコールバックを設定します。
- TensorBoardのログを作成します。
- チェックポイントを作成し、上記で指定したチェックポイント ディレクトリに保存します。
- 損失が十分に改善されていない場合は、モデルのトレーニングを停止します。
次に、 model.fit
とmodel.save
を呼び出します。これらは (このコードが Google Cloud で実行されている場合) 実際に完全なトレーニング (100 エポック) を実行し、トレーニング済みのモデルを上で定義した GCS バケットとディレクトリに保存します。
if tfc.remote():
# Configure Tensorboard logs
callbacks=[
tf.keras.callbacks.TensorBoard(log_dir=TENSORBOARD_LOGS_DIR),
tf.keras.callbacks.ModelCheckpoint(
MODEL_CHECKPOINT_DIR,
save_best_only=True),
tf.keras.callbacks.EarlyStopping(
monitor='loss',
min_delta =0.001,
patience=3)]
model.fit(x=x_train, y=y_train, epochs=100,
validation_split=0.2, callbacks=callbacks)
model.save(SAVED_MODEL_DIR)
リモートトレーニングを開始
TensorFlow Cloud は、ローカル実行環境(このノートブック)からすべてのコードを取得してラップし、実行のために Google Cloud に送信します。 (そのため、 if
およびif not
tfc.remote
ラッパーが重要です。)
このステップでは、このノートブックからコードをリモート実行用に準備し、Google Cloud Platform でリモート トレーニング ジョブを開始してモデルをトレーニングします。
まず、 tensorflow-cloud
Python パッケージをrequirements.txt
ファイルに追加します。このファイルは、このノートブックのコードと共に送信されます。必要に応じて、ここに他のパッケージを追加できます。
次に、GPU と CPU イメージを指定します。どちらか一方のみを指定する必要があります。 GPU は次のコードで使用されます。
最後に、TensorFlow クラウドの心臓部: tfc.run
の呼び出しです。これがこのノートブック内で実行されると、このノートブックのすべてのコードと、このディレクトリ内の残りのファイルがパッケージ化され、実行のために Google Cloud に送信されます。 run
メソッドのパラメーターは、GPU CPU イメージの詳細を指定します。どちらか一方のみを指定する必要があります。 GPU は次のコードで使用されます。
最後に、TensorFlow クラウドの心臓部: tfc.run
の呼び出しです。これがこのノートブック内で実行されると、このノートブックのすべてのコードと、このディレクトリ内の残りのファイルがパッケージ化され、実行のために Google Cloud に送信されます。 run
メソッドのパラメーターは、GPU の詳細を指定し、CPU イメージが指定されます。どちらか一方のみを指定する必要があります。 GPU は次のコードで使用されます。
最後に、TensorFlow クラウドの心臓部: tfc.run
の呼び出しです。これがこのノートブック内で実行されると、このノートブックのすべてのコードと、このディレクトリ内の残りのファイルがパッケージ化され、実行のために Google Cloud に送信されます。 run
メソッドのパラメーターは、使用する実行環境と分散戦略 (ある場合) の詳細を指定します。
ジョブが送信されたら、次のステップに進み、Tensorboard を介してジョブの進行状況を監視できます。
# If you are using a custom image you can install modules via requirements
# txt file.
with open('requirements.txt','w') as f:
f.write('tensorflow-cloud\n')
# Optional: Some recommended base images. If you provide none the system
# will choose one for you.
TF_GPU_IMAGE= "tensorflow/tensorflow:latest-gpu"
TF_CPU_IMAGE= "tensorflow/tensorflow:latest"
# Submit a single node training job using GPU.
tfc.run(
distribution_strategy='auto',
requirements_txt='requirements.txt',
docker_config=tfc.DockerConfig(
parent_image=TF_GPU_IMAGE,
image_build_bucket=GCS_BUCKET
),
chief_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
job_labels={'job': JOB_NAME}
)
トレーニング結果
Colab インスタンスを再接続する
ほとんどのリモート トレーニング ジョブは長時間実行されます。 Colab を使用している場合、トレーニング結果が利用可能になる前にタイムアウトすることがあります。
その場合は、トレーニング結果にアクセスするように Colab インスタンスを再接続して構成するために、次のセクションを再実行してください。
- 必要なモジュールをインポートする
- プロジェクト構成
- Google Cloud プロジェクトを使用するためのノートブックの認証
残りのコードを再実行しないでください。
テンソルボードを読み込む
トレーニングの進行中は、Tensorboard を使用して結果を表示できます。結果は、トレーニングが開始された後にのみ表示されることに注意してください。これには数分かかる場合があります。
%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR
トレーニング済みモデルを読み込む
トレーニングが完了すると、上で指定した GCS バケットからモデルを取得できます。
trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()