Đám mây TenorFlow

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.

Bằng cách 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 điện toán Google Cloud mà không cần đăng nhập và tương tác với Cloud UI (sau 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 điện toán Google Cloud của mình ngay từ bên trong sổ ghi chép Python: một sổ ghi chép giống như sổ ghi chép này! Bạn cũng có thể gửi mô hình tới Google Cloud từ tập lệnh Python .py đơn giản.

Ví dụ đơn giản

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

Bạn chỉ cần đọc qua nó để biết cách thức hoạt động của nó hoặc bạn có thể chạy sổ ghi chép trong Google Colab. 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 xác thực cũng như 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 cần thiết

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

Thiết lập các thông số dự án. Nếu bạn không biết GCP_PROJECT_ID hoặc GCS_BUCKET của mình 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 (chẳng hạn) như một phần của dự án lớn hơn, bạn có thể muốn cấp cho mỗi thử nghiệm đó 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ổ ghi chép để sử dụng Dự án Google Cloud của bạn

Mã này xác thực sổ ghi chép, 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 trong khối if not tfc.remote() để đảm bảo rằng nó chỉ chạy trong sổ ghi chép và sẽ không chạy khi mã sổ ghi chép được gửi tới 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 sẽ làm theo quy trình cơ bản để thiết lập 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 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ô hình và chuẩn bị đà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 tôi sẽ huấn luyện mô hình cho 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ẽ gói lệnh huấn luyện đó và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 chứ không phải khi nó được gửi tới 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ổ ghi chép được gửi tới Google Cloud chứ không phải 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 cuộc gọi lại sẽ:

  • Tạo nhật ký cho TensorBoard .
  • Tạo đ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 đã đào tạo vào 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ổ tay này), gói lại và gửi đến Google Cloud để thực thi. (Đó là lý do tại sao các hàm bao ifif not tfc.remote quan trọng.)

Bước này sẽ chuẩn bị mã của bạn từ sổ ghi chép này để thực thi từ xa, 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 ta thêm gói Python tensorflow-cloud vào tệp requirements.txt Tệp này sẽ được gửi cùng với mã trong sổ tay này. Bạn có thể thêm các gói khác ở đây nếu cần.

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

Cuối cùng, trọng tâm của đám mây TensorFlow: lệnh gọi tới tfc.run . Khi thao tác 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 tệp trong thư mục này sẽ được đóng gói và gửi tới Google Cloud để thực thi. Các tham số trong phương thức run chỉ định chi tiết hình ảnh GPU CPU được chỉ định. Bạn chỉ cần chỉ định cái này hay cái kia; GPU được sử dụng trong đoạn mã sau.

Cuối cùng, trọng tâm của đám mây TensorFlow: lệnh gọi tới tfc.run . Khi thao tác 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 tệp trong thư mục này sẽ được đóng gói và gửi tới Google Cloud để thực thi. Các tham số trên phương thức run chỉ định chi tiết về GPU và hình ảnh CPU được chỉ định. Bạn chỉ cần chỉ định cái này hay cái kia; GPU được sử dụng trong đoạn mã sau.

Cuối cùng, trọng tâm của đám mây TensorFlow: lệnh gọi tới tfc.run . Khi thao tác 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 tệp trong thư mục này sẽ được đóng gói và gửi tới 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 diễn ra trong thời gian dài. Nếu bạn đang sử dụng Colab thì có thể sẽ hết thời gian chờ 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 nhằm truy cập vào kết quả đào tạo.

  1. Nhập các mô-đun cần thiết
  2. Cấu hình dự án
  3. Xác thực sổ ghi chép để sử dụng Dự án Google Cloud của bạn

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

Tải bảng kéo

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 quá trình đào tạo hoàn tất, 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()