ดูบน 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 อีกครั้งเพื่อเข้าถึงผลการฝึก
- นำเข้าโมดูลที่จำเป็น
- การกำหนดค่าโครงการ
- กำลังตรวจสอบสมุดบันทึกเพื่อใช้ 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()