Cloud TensorFlow

Lihat di TensorFlow.org Jalankan di Google Colab Lihat di GitHub Unduh buku catatan Logo KaggleJalankan di Kaggle

TensorFlow Cloud adalah library yang memudahkan pelatihan dan penyesuaian hyperparameter model Keras di Google Cloud.

Menggunakan run API TensorFlow Cloud, Anda dapat mengirim kode model Anda langsung ke akun Google Cloud Anda, dan menggunakan resource komputasi Google Cloud tanpa perlu login dan berinteraksi dengan Cloud UI (setelah Anda menyiapkan project di konsol).

Ini berarti Anda dapat menggunakan sumber daya komputasi Google Cloud Anda langsung dari dalam notebook Python: notebook seperti ini! Anda juga dapat mengirim model ke Google Cloud dari skrip Python .py biasa.

Contoh sederhana

Ini adalah contoh pengantar sederhana untuk mendemonstrasikan cara melatih model dari jarak jauh menggunakan TensorFlow Cloud dan Google Cloud.

Anda dapat membacanya untuk mendapatkan gambaran tentang cara kerjanya, atau Anda dapat menjalankan notebook di Google Colab. Menjalankan notebook perlu menghubungkan ke akun Google Cloud dan memasukkan kredensial dan ID proyek Anda. Lihat Menyiapkan dan Menghubungkan ke Akun Google Cloud Anda jika Anda belum memiliki akun atau tidak yakin cara menyiapkan proyek di konsol.

Impor modul yang diperlukan

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

Konfigurasi Proyek

Tetapkan parameter proyek. Jika Anda tidak tahu seperti apa GCP_PROJECT_ID atau GCS_BUCKET , lihat Menyiapkan dan Menghubungkan ke Akun Google Cloud Anda .

JOB_NAME bersifat opsional, dan Anda dapat menyetelnya ke string apa pun. Jika Anda melakukan beberapa pengalaman pelatihan (misalnya) sebagai bagian dari proyek yang lebih besar, Anda mungkin ingin memberikan masing-masing pengalaman JOB_NAME unik.

# 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")

Mengautentikasi notebook untuk menggunakan Proyek Google Cloud Anda

Kode ini mengautentikasi notebook, memeriksa kredensial dan identitas Google Cloud Anda yang valid. Itu ada di dalam blok if not tfc.remote() untuk memastikan bahwa itu hanya berjalan di notebook, dan tidak akan dijalankan ketika kode notebook dikirim ke 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

Model dan penyiapan data

Dari sini kami mengikuti prosedur dasar untuk menyiapkan model Keras untuk menjalankan klasifikasi pada dataset MNIST.

Muat dan pisahkan data

Baca data mentah dan pisahkan untuk melatih dan menguji kumpulan data.

(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

Buat model dan persiapkan untuk pelatihan

Buat model sederhana dan siapkan beberapa callback untuk itu.

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'])

Pelatihan validasi cepat

Kami akan melatih model untuk satu (1) epoch hanya untuk memastikan semuanya telah disiapkan dengan benar, dan kami akan tfc.remote perintah pelatihan itu if not tfc.remote , sehingga itu hanya terjadi di sini di lingkungan runtime tempat Anda membaca ini, bukan saat dikirim ke 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)

Persiapkan untuk pelatihan jarak jauh

Kode di bawah ini hanya akan berjalan ketika kode notebook dikirim ke Google Cloud, bukan di dalam runtime saat Anda membaca ini.

Pertama, kami menyiapkan panggilan balik yang akan:

  • Buat log untuk TensorBoard .
  • Buat pos pemeriksaan dan simpan ke direktori pos pemeriksaan yang ditentukan di atas.
  • Hentikan pelatihan model jika kerugian tidak cukup membaik.

Kemudian kita memanggil model.fit dan model.save , yang (saat kode ini berjalan di Google Cloud) yang benar-benar menjalankan pelatihan penuh (100 epoch) dan kemudian menyimpan model yang dilatih di Bucket GCS dan direktori yang ditentukan di atas.

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)

Mulai pelatihan jarak jauh

TensorFlow Cloud mengambil semua kode dari lingkungan eksekusi lokalnya (notebook ini), membungkusnya, dan mengirimkannya ke Google Cloud untuk dieksekusi. (Itulah mengapa pembungkus if dan if not tfc.remote penting.)

Langkah ini akan mempersiapkan kode Anda dari notebook ini untuk eksekusi jarak jauh, lalu memulai tugas pelatihan jarak jauh di Google Cloud Platform untuk melatih model.

Pertama kami menambahkan paket tensorflow-cloud Python ke file requirements.txt , yang akan dikirim bersama dengan kode di notebook ini. Anda dapat menambahkan paket lain di sini sesuai kebutuhan.

Kemudian GPU dan gambar CPU ditentukan. Anda hanya perlu menentukan satu atau lainnya; GPU digunakan dalam kode berikut.

Terakhir, inti dari cloud TensorFlow: panggilan ke tfc.run . Saat ini dijalankan di dalam notebook ini, semua kode dari notebook ini, dan file lainnya dalam direktori ini, akan dikemas dan dikirim ke Google Cloud untuk dieksekusi. Parameter pada metode run menentukan detail gambar CPU GPU yang ditentukan. Anda hanya perlu menentukan satu atau lainnya; GPU digunakan dalam kode berikut.

Terakhir, inti dari cloud TensorFlow: panggilan ke tfc.run . Saat ini dijalankan di dalam notebook ini, semua kode dari notebook ini, dan file lainnya dalam direktori ini, akan dikemas dan dikirim ke Google Cloud untuk dieksekusi. Parameter pada metode run menentukan detail gambar GPU dan CPU yang ditentukan. Anda hanya perlu menentukan satu atau lainnya; GPU digunakan dalam kode berikut.

Terakhir, inti dari cloud TensorFlow: panggilan ke tfc.run . Saat ini dijalankan di dalam notebook ini, semua kode dari notebook ini, dan file lainnya dalam direktori ini, akan dikemas dan dikirim ke Google Cloud untuk dieksekusi. Parameter pada metode run menentukan detail lingkungan eksekusi dan strategi distribusi (jika ada) yang akan digunakan.

Setelah pekerjaan dikirim, Anda dapat melanjutkan ke langkah berikutnya untuk memantau kemajuan pekerjaan melalui 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}
)

Hasil Pelatihan

Hubungkan kembali instance Colab Anda

Sebagian besar tugas pelatihan jarak jauh berjalan lama. Jika Anda menggunakan Colab, mungkin waktu habis sebelum hasil pelatihan tersedia.

Jika demikian, jalankan kembali bagian berikut untuk menyambungkan kembali dan mengonfigurasi instance Colab Anda untuk mengakses hasil pelatihan.

  1. Impor modul yang diperlukan
  2. Konfigurasi Proyek
  3. Mengautentikasi notebook untuk menggunakan Proyek Google Cloud Anda

JANGAN jalankan kembali kode lainnya.

Muat Tensorboard

Selama pelatihan berlangsung, Anda dapat menggunakan Tensorboard untuk melihat hasilnya. Perhatikan bahwa hasil hanya akan ditampilkan setelah pelatihan Anda dimulai. Ini mungkin membutuhkan waktu beberapa menit.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Muat model terlatih Anda

Setelah pelatihan selesai, Anda dapat mengambil model Anda dari Bucket GCS yang Anda tentukan di atas.

trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()
.dll