Đám mây TensorFlow

Xem trên TensorFlow.org Chạy trong Google Colab Xem trên GitHub Tải xuống sổ ghi chép Logo KaggleChạy ở Kaggle

TensorFlow Cloud là một thư viện giúp việc đào tạo và điều chỉnh siêu tham số của các mô hình Keras trên Google Cloud trở nên dễ dàng hơn.

Sử dụng API run của TensorFlow Cloud, bạn có thể gửi mã mô hình trực tiếp đến tài khoản Google Cloud của mình và sử dụng tài nguyên tính toán của Google Cloud mà không cần đăng nhập và tương tác với Cloud UI (khi bạn đã thiết lập dự án của mình trong bảng điều khiển).

Điều này có nghĩa là bạn có thể sử dụng tài nguyên tính toán Google Cloud của mình từ bên trong trực tiếp một sổ ghi chép Python: một sổ ghi chép giống như sổ tay này! Bạn cũng có thể gửi các mô hình tới Google Cloud từ một tập lệnh Python .py đơn giản.

Ví dụ đơn giản

Đây là một ví dụ giới thiệu đơn giản để trình bày cách đào tạo mô hình từ xa bằng TensorFlow Cloud và Google Cloud.

Bạn có thể chỉ cần đọc qua nó để có ý tưởng về cách hoạt động của nó hoặc bạn có thể chạy sổ ghi chép trong Google Colab. Việc chạy sổ ghi chép yêu cầu kết nối với tài khoản Google Cloud và nhập thông tin đăng nhập và ID dự án của bạn. Xem Thiết lập và kết nối với tài khoản Google Cloud của bạn nếu bạn chưa có tài khoản hoặc không chắc chắn về cách thiết lập dự án trong bảng điều khiển.

Nhập các mô-đun bắt buộc

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

Cấu hình dự án

Đặt các thông số của dự án. Nếu bạn không biết GCP_PROJECT_ID hoặc GCS_BUCKET của mình nên là gì, hãy xem Thiết lập và kết nối với tài khoản Google Cloud của bạn .

JOB_NAME là tùy chọn và bạn có thể đặt nó thành bất kỳ chuỗi nào. Nếu bạn đang thực hiện nhiều thử nghiệm đào tạo (ví dụ) như một phần của một dự án lớn hơn, bạn có thể muốn cung cấp cho mỗi người trong số họ một JOB_NAME duy nhất.

# 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")

Xác thực sổ tay để sử dụng Google Cloud Project của bạn

Mã này xác thực sổ tay, kiểm tra thông tin xác thực và danh tính Google Cloud hợp lệ của bạn. Nó nằm bên trong khối if not tfc.remote() để đảm bảo rằng nó chỉ được chạy trong sổ ghi chép và sẽ không được chạy khi mã sổ ghi chép được gửi đến 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

Thiết lập mô hình và dữ liệu

Từ đây, chúng ta đang làm theo quy trình cơ bản để thiết lập một mô hình Keras đơn giản để chạy phân loại trên tập dữ liệu MNIST.

Tải và chia nhỏ dữ liệu

Đọc dữ liệu thô và phân chia để huấn luyện và kiểm tra các tập dữ liệu.

(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

Tạo một mô hình và chuẩn bị cho việc đào tạo

Tạo một mô hình đơn giản và thiết lập một vài lệnh gọi lại cho nó.

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'])

Đào tạo xác nhận nhanh chóng

Chúng tôi sẽ đào tạo mô hình trong một (1) kỷ nguyên chỉ để đảm bảo mọi thứ được thiết lập chính xác và chúng tôi sẽ bọc lệnh đào tạo đó if not tfc.remote , để nó chỉ xảy ra ở đây trong môi trường thời gian chạy mà bạn đang đọc nội dung này, không phải khi nó được gửi đến 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)

Chuẩn bị cho đào tạo từ xa

Mã bên dưới sẽ chỉ chạy khi mã sổ tay được gửi tới Google Cloud, không chạy trong thời gian chạy mà bạn đang đọc mã này.

Đầu tiên, chúng tôi thiết lập các lệnh gọi lại sẽ:

  • Tạo nhật ký cho TensorBoard .
  • Tạo các điểm kiểm tra và lưu chúng vào thư mục điểm kiểm tra được chỉ định ở trên.
  • Dừng đào tạo mô hình nếu tổn thất không được cải thiện đủ.

Sau đó, chúng tôi gọi model.fitmodel.save (khi mã này đang chạy trên Google Cloud) thực sự chạy toàn bộ quá trình đào tạo (100 kỷ nguyên) và sau đó lưu mô hình được đào tạo trong Nhóm GCS và thư mục được xác định ở trên.

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)

Bắt đầu đào tạo từ xa

TensorFlow Cloud lấy tất cả mã từ môi trường thực thi cục bộ của nó (sổ ghi chép này), gói nó lại và gửi đến Google Cloud để thực thi. (Đó là lý do tại sao các trình bao bọc ifif not tfc.remote lại quan trọng.)

Bước này sẽ chuẩn bị mã của bạn từ sổ tay này để thực thi từ xa và sau đó bắt đầu công việc đào tạo từ xa trên Google Cloud Platform để đào tạo mô hình.

Đầu tiên, chúng tôi thêm gói Python tensorflow-cloud vào tệp tin requirements.txt , tệp này sẽ được gửi cùng với mã trong sổ ghi chép này. Bạn có thể thêm các gói khác tại đây nếu cần.

Sau đó, một GPU và một hình ảnh CPU được chỉ định. Bạn chỉ cần xác định cái này hoặc cái kia; GPU được sử dụng trong mã sau đó.

Cuối cùng, trung tâm của đám mây TensorFlow: cuộc gọi tới tfc.run . Khi điều này được thực thi bên trong sổ ghi chép này, tất cả mã từ sổ ghi chép này và phần còn lại của các tệp trong thư mục này, sẽ được đóng gói và gửi đến Google Cloud để thực thi. Các tham số trên phương thức run chỉ định các chi tiết của hình ảnh CPU GPU được chỉ định. Bạn chỉ cần xác định cái này hoặc cái kia; GPU được sử dụng trong mã sau đó.

Cuối cùng, trung tâm của đám mây TensorFlow: cuộc gọi tới tfc.run . Khi điều này được thực thi bên trong sổ ghi chép này, tất cả mã từ sổ ghi chép này và phần còn lại của các tệp trong thư mục này, sẽ được đóng gói và gửi đến Google Cloud để thực thi. Các tham số trên phương thức run chỉ định các chi tiết của GPU và hình ảnh CPU được chỉ định. Bạn chỉ cần xác định cái này hoặc cái kia; GPU được sử dụng trong mã sau đó.

Cuối cùng, trung tâm của đám mây TensorFlow: cuộc gọi tới tfc.run . Khi điều này được thực thi bên trong sổ ghi chép này, tất cả mã từ sổ ghi chép này và phần còn lại của các tệp trong thư mục này, sẽ được đóng gói và gửi đến Google Cloud để thực thi. Các tham số trên phương thức run chỉ định chi tiết về môi trường thực thi và chiến lược phân phối (nếu có) sẽ được sử dụng.

Sau khi công việc được gửi, bạn có thể chuyển sang bước tiếp theo để theo dõi tiến độ công việc thông qua 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}
)

Kết quả đào tạo

Kết nối lại phiên bản Colab của bạn

Hầu hết các công việc đào tạo từ xa đều hoạt động lâu dài. Nếu bạn đang sử dụng Colab, nó có thể hết thời gian trước khi có kết quả đào tạo.

Trong trường hợp đó, hãy chạy lại các phần sau để kết nối lại và định cấu hình phiên bản Colab của bạn để truy cập kết quả đào tạo.

  1. Nhập các mô-đun bắt buộc
  2. Cấu hình dự án
  3. Xác thực sổ tay để sử dụng Google Cloud Project của bạn

KHÔNG chạy lại phần còn lại của mã.

Tải Tensorboard

Trong khi quá trình đào tạo đang diễn ra, bạn có thể sử dụng Tensorboard để xem kết quả. Lưu ý rằng kết quả sẽ chỉ hiển thị sau khi quá trình đào tạo của bạn đã bắt đầu. Có thể sẽ mất vài phút.

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

Tải mô hình được đào tạo của bạn

Sau khi đào tạo xong, bạn có thể truy xuất mô hình của mình từ Nhóm GCS mà bạn đã chỉ định ở trên.

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