Awan TensorFlow

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

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

Dengan menggunakan API yang run TensorFlow Cloud, Anda dapat mengirim kode model langsung ke akun Google Cloud Anda, dan menggunakan sumber daya komputasi Google Cloud tanpa perlu login dan berinteraksi dengan Cloud UI (setelah Anda menyiapkan proyek di konsol).

Artinya, Anda dapat menggunakan sumber daya komputasi Google Cloud langsung dari dalam buku catatan Python: buku catatan seperti ini! Anda juga dapat mengirim model ke Google Cloud dari skrip Python .py biasa.

Contoh sederhana

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

Anda cukup membacanya untuk mendapatkan gambaran tentang cara kerjanya, atau Anda dapat menjalankan notebook di Google Colab. Menjalankan notebook memerlukan koneksi ke akun Google Cloud dan memasukkan kredensial serta 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 seharusnya GCP_PROJECT_ID atau GCS_BUCKET Anda, 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 eksperimen pelatihan (misalnya) sebagai bagian dari proyek yang lebih besar, Anda mungkin ingin memberikan masing-masing eksperimen tersebut sebuah JOB_NAME yang 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 dijalankan 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

Penyiapan model dan data

Dari sini kita mengikuti prosedur dasar untuk menyiapkan model Keras sederhana untuk menjalankan klasifikasi pada kumpulan data MNIST.

Memuat dan membagi data

Membaca data mentah dan membaginya 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 atur beberapa callback untuk model tersebut.

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 sudah diatur dengan benar, dan kami akan menggabungkan perintah pelatihan tersebut if not tfc.remote , sehingga hanya terjadi di sini, di lingkungan runtime tempat Anda sedang 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)

Mempersiapkan 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 callback 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 menyiapkan kode Anda dari notebook ini untuk eksekusi jarak jauh dan kemudian memulai tugas pelatihan jarak jauh di Google Cloud Platform untuk melatih modelnya.

Pertama kita 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 di 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 di 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 di direktori ini, akan dikemas dan dikirim ke Google Cloud untuk dieksekusi. Parameter pada metode run menentukan rincian lingkungan eksekusi dan strategi distribusi (jika ada) yang akan digunakan.

Setelah tugas dikirimkan, Anda dapat melanjutkan ke langkah berikutnya untuk memantau kemajuan tugas 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 pekerjaan pelatihan jarak jauh berlangsung 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 sisa kode.

Muat Papan Tensor

Saat pelatihan sedang berlangsung, Anda dapat menggunakan Tensorboard untuk melihat hasilnya. Perhatikan bahwa hasilnya hanya akan terlihat setelah pelatihan Anda dimulai. Ini mungkin memakan waktu beberapa menit.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Muat model terlatih Anda

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

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