เมฆ TensorFlow

ดูบน TensorFlow.org ทำงานใน Google Colab ดูบน GitHub ดาวน์โหลดโน๊ตบุ๊ค โลโก้ Kaggle วิ่งใน Kaggle

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

เมื่อใช้ run API ของ 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 ยุค) แล้วบันทึกโมเดลที่ผ่านการฝึกอบรมใน 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 cloud: การเรียกไปที่ tfc.run เมื่อดำเนินการนี้ภายในสมุดบันทึกนี้ โค้ดทั้งหมดจากสมุดบันทึกนี้ และไฟล์ที่เหลือในไดเรกทอรีนี้ จะถูกจัดแพคเกจและส่งไปยัง Google Cloud เพื่อดำเนินการ พารามิเตอร์ในวิธีการ run จะระบุรายละเอียดของอิมเมจ CPU GPU ที่ระบุ คุณต้องระบุอย่างใดอย่างหนึ่งเท่านั้น 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 เพื่อดูผลลัพธ์ได้ โปรดทราบว่าผลลัพธ์จะแสดงหลังจากเริ่มการฝึกของคุณแล้วเท่านั้น นี้อาจใช้เวลาไม่กี่นาที.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

โหลดโมเดลการฝึกอบรมของคุณ

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

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