TensorFlow Cloud

ดูใน TensorFlow.org เรียกใช้ใน Google Colab ดูบน GitHub ดาวน์โหลดสมุดบันทึก โลโก้ Kaggle เรียกใช้ใน Kaggle

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

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

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

อันดับแรกเราเพิ่ม tensorflow-cloud Python ไปยังไฟล์ requirements.txt ซึ่งจะถูกส่งไปพร้อมกับรหัสในสมุดบันทึกนี้ คุณสามารถเพิ่มแพ็คเกจอื่น ๆ ได้ที่นี่ตามต้องการ

จากนั้นระบุ GPU และอิมเมจ CPU คุณจะต้องระบุอย่างใดอย่างหนึ่งเท่านั้น GPU ถูกใช้ในโค้ดที่ตามมา

ในที่สุดหัวใจของ TensorFlow cloud: การเรียกร้องให้ tfc.run เมื่อดำเนินการภายในสมุดบันทึกนี้รหัสทั้งหมดจากสมุดบันทึกนี้และไฟล์ที่เหลือในไดเร็กทอรีนี้จะถูกบรรจุและส่งไปยัง Google Cloud เพื่อดำเนินการ พารามิเตอร์บนวิธีการ run ระบุรายละเอียดของอิมเมจ GPU CPU ถูกระบุ คุณจะต้องระบุอย่างใดอย่างหนึ่งเท่านั้น GPU ถูกใช้ในโค้ดที่ตามมา

ในที่สุดหัวใจของ TensorFlow cloud: การเรียกร้องให้ tfc.run เมื่อดำเนินการภายในสมุดบันทึกนี้รหัสทั้งหมดจากสมุดบันทึกนี้และไฟล์ที่เหลือในไดเร็กทอรีนี้จะถูกบรรจุและส่งไปยัง Google Cloud เพื่อดำเนินการ พารามิเตอร์ในวิธีการ run ระบุรายละเอียดของอิมเมจ GPU และ CPU ถูกระบุ คุณจะต้องระบุอย่างใดอย่างหนึ่งเท่านั้น GPU ถูกใช้ในโค้ดที่ตามมา

ในที่สุดหัวใจของ TensorFlow cloud: การเรียกร้องให้ 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

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

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

โหลดแบบจำลองที่ได้รับการฝึกฝนของคุณ

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

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