เทนเซอร์โฟลว์ คลาวด์

ดูบน TensorFlow.org ดูบน GitHub ดาวน์โหลดสมุดบันทึก โลโก้คักเกิล วิ่งใน Kaggle

TensorFlow Cloud เป็นไลบรารีที่ทำให้การฝึกฝนและการปรับแต่งไฮเปอร์พารามิเตอร์ของโมเดล Keras บน Google Cloud ง่ายขึ้น

เมื่อใช้ API run ของ TensorFlow Cloud คุณสามารถส่งโค้ดโมเดลของคุณโดยตรงไปยังบัญชี Google Cloud ของคุณ และใช้ทรัพยากรการประมวลผลของ Google Cloud โดยไม่จำเป็นต้องเข้าสู่ระบบและโต้ตอบกับ Cloud UI (เมื่อคุณตั้งค่าโปรเจ็กต์ในคอนโซลแล้ว)

ซึ่งหมายความว่าคุณสามารถใช้ทรัพยากรการประมวลผล Google Cloud จากภายในสมุดบันทึก Python ได้โดยตรง: สมุดบันทึกแบบเดียวกับอันนี้! คุณยังสามารถส่งโมเดลไปยัง Google Cloud จากสคริปต์ .py Python ธรรมดาได้

ตัวอย่างง่ายๆ

นี่เป็นตัวอย่างเบื้องต้นง่ายๆ เพื่อสาธิตวิธีฝึกโมเดลจากระยะไกลโดยใช้ TensorFlow Cloud และ Google Cloud

คุณสามารถอ่านอย่างละเอียดเพื่อทำความเข้าใจวิธีการทำงาน หรือคุณสามารถเรียกใช้โน้ตบุ๊กใน Google Colab ก็ได้ การใช้งานโน้ตบุ๊กจำเป็นต้องเชื่อมต่อกับบัญชี Google Cloud และป้อนข้อมูลประจำตัวและรหัสโปรเจ็กต์ของคุณ โปรดดู การตั้งค่าและการเชื่อมต่อกับบัญชี 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 Project ของคุณ

รหัสนี้จะตรวจสอบสมุดบันทึก โดยตรวจสอบข้อมูลประจำตัวและข้อมูลประจำตัว Google Cloud ที่ถูกต้องของคุณ ซึ่งอยู่ภายในบล็อก 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 epochs) จากนั้นจึงบันทึกโมเดลที่ได้รับการฝึกใน GCS Bucket และไดเร็กทอรีที่กำหนดไว้ข้างต้น

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 เพื่อดำเนินการ (นั่นคือเหตุผลว่าทำไม wrappers if และ if not tfc.remote จึงมีความสำคัญ)

ขั้นตอนนี้จะเตรียมโค้ดของคุณจากสมุดบันทึกนี้สำหรับการดำเนินการระยะไกล จากนั้นเริ่มงานการฝึกอบรมระยะไกลบน Google Cloud Platform เพื่อฝึกโมเดล

ขั้นแรก เราเพิ่มแพ็กเกจ Python tensorflow-cloud ลงในไฟล์ 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 อีกครั้งเพื่อเข้าถึงผลการฝึก

  1. นำเข้าโมดูลที่จำเป็น
  2. การกำหนดค่าโครงการ
  3. กำลังตรวจสอบสมุดบันทึกเพื่อใช้ Google Cloud Project ของคุณ

อย่า รันโค้ดที่เหลืออีกครั้ง

โหลดเทนเซอร์บอร์ด

ขณะที่การฝึกอบรมกำลังดำเนินอยู่ คุณสามารถใช้ Tensorboard เพื่อดูผลลัพธ์ได้ โปรดทราบว่าผลลัพธ์จะแสดงหลังจากการฝึกของคุณเริ่มต้นแล้วเท่านั้น การดำเนินการนี้อาจใช้เวลาสักครู่

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

โหลดโมเดลที่ผ่านการฝึกอบรมของคุณ

เมื่อการฝึกเสร็จสิ้น คุณจะดึงโมเดลได้จาก GCS Bucket ที่คุณระบุไว้ข้างต้น

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