Tham dự Hội nghị chuyên đề Women in ML vào ngày 7 tháng 12 Đăng ký ngay

Đào tạo mô hình Keras với TensorFlow Cloud

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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

Giới thiệu

TensorFlow đám mây là một gói Python cung cấp các API cho một sự chuyển đổi liền mạch từ gỡ lỗi địa phương để đào tạo được phân phối trong Google Cloud. Nó đơn giản hóa quá trình đào tạo các mô hình TensorFlow trên đám mây thành một lệnh gọi hàm đơn giản, yêu cầu thiết lập tối thiểu và không có thay đổi nào đối với mô hình của bạn. TensorFlow Cloud xử lý các tác vụ dành riêng cho đám mây như tạo các phiên bản VM và chiến lược phân phối cho các mô hình của bạn một cách tự động. Hướng dẫn này sẽ trình bày cách giao tiếp với Google Cloud thông qua TensorFlow Cloud và nhiều chức năng được cung cấp trong TensorFlow Cloud. Chúng ta sẽ bắt đầu với trường hợp sử dụng đơn giản nhất.

Thành lập

Chúng tôi sẽ bắt đầu bằng cách cài đặt TensorFlow Cloud và nhập các gói chúng tôi sẽ cần trong hướng dẫn này.

pip install -q tensorflow_cloud
import tensorflow as tf
import tensorflow_cloud as tfc

from tensorflow import keras
from tensorflow.keras import layers
2021-07-27 22:07:16.348453: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0

Tổng quan về API: một ví dụ end-to-end đầu tiên

Hãy bắt đầu với một kịch bản đào tạo mô hình Keras, chẳng hạn như CNN sau:

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

model = keras.Sequential(
    [
        keras.Input(shape=(28, 28)),
        # Use a Rescaling layer to make sure input values are in the [0, 1] range.
        layers.experimental.preprocessing.Rescaling(1.0 / 255),
        # The original images have shape (28, 28), so we reshape them to (28, 28, 1)
        layers.Reshape(target_shape=(28, 28, 1)),
        # Follow-up with a classic small convnet
        layers.Conv2D(32, 3, activation="relu"),
        layers.MaxPooling2D(2),
        layers.Conv2D(32, 3, activation="relu"),
        layers.MaxPooling2D(2),
        layers.Conv2D(32, 3, activation="relu"),
        layers.Flatten(),
        layers.Dense(128, activation="relu"),
        layers.Dense(10),
    ]
)

model.compile(
    optimizer=keras.optimizers.Adam(),
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=keras.metrics.SparseCategoricalAccuracy(),
)

model.fit(x_train, y_train, epochs=20, batch_size=128, validation_split=0.1)

Đào tạo mô hình này trên Google Cloud chúng ta chỉ cần thêm một cuộc gọi đến run() vào đầu của kịch bản, trước khi nhập khẩu:

tfc.run()

Bạn không cần phải lo lắng về các tác vụ dành riêng cho đám mây như tạo phiên bản VM và chiến lược phân phối khi sử dụng TensorFlow Cloud. API bao gồm các giá trị mặc định thông minh cho tất cả các tham số - mọi thứ đều có thể định cấu hình, nhưng nhiều mô hình có thể dựa vào các giá trị mặc định này.

Khi gọi run() , TensorFlow đám mây sẽ:

  • Làm cho tập lệnh Python hoặc bản phân phối sổ ghi chép của bạn sẵn sàng.
  • Chuyển đổi nó thành một hình ảnh Docker với các phụ thuộc bắt buộc.
  • Chạy công việc đào tạo trên máy ảo hỗ trợ GPU GCP.
  • Phát trực tiếp nhật ký và thông tin công việc có liên quan.

Cấu hình VM mặc định là 1 trưởng và 0 công nhân với 8 nhân CPU và 1 GPU Tesla T4.

Cấu hình Google Cloud

Để tạo điều kiện thuận lợi cho các lộ trình đào tạo trên Cloud phù hợp, bạn sẽ cần thực hiện một số thiết lập lần đầu tiên. Nếu bạn là người dùng Google Cloud mới, có một số bước sơ bộ bạn sẽ cần thực hiện:

  1. Tạo một Dự án GCP;
  2. Bật Dịch vụ Nền tảng AI;
  3. Tạo Tài khoản Dịch vụ;
  4. Tải xuống khóa ủy quyền;
  5. Tạo nhóm Lưu trữ đám mây.

Hướng dẫn chi tiết cài đặt lần đầu có thể được tìm thấy trong TensorFlow Mây README , và một thiết lập thêm ví dụ được hiển thị trên Blog TensorFlow .

Quy trình công việc chung và lưu trữ đám mây

Trong hầu hết các trường hợp, bạn sẽ muốn truy xuất mô hình của mình sau khi đào tạo trên Google Cloud. Đối với điều này, điều quan trọng là phải chuyển hướng lưu và tải sang Cloud Storage trong khi đào tạo từ xa. Chúng tôi có thể hướng TensorFlow Cloud tới nhóm Cloud Storage của mình cho nhiều tác vụ khác nhau. Bộ chứa lưu trữ có thể được sử dụng để lưu và tải tập dữ liệu đào tạo lớn, lưu trữ nhật ký gọi lại hoặc trọng số mô hình và lưu các tệp mô hình được đào tạo. Để bắt đầu, chúng ta hãy cấu hình fit() để lưu các mô hình để một lưu trữ đám mây, và thiết lập TensorBoard giám sát để theo dõi tiến độ đào tạo.

def create_model():
    model = keras.Sequential(
        [
            keras.Input(shape=(28, 28)),
            layers.experimental.preprocessing.Rescaling(1.0 / 255),
            layers.Reshape(target_shape=(28, 28, 1)),
            layers.Conv2D(32, 3, activation="relu"),
            layers.MaxPooling2D(2),
            layers.Conv2D(32, 3, activation="relu"),
            layers.MaxPooling2D(2),
            layers.Conv2D(32, 3, activation="relu"),
            layers.Flatten(),
            layers.Dense(128, activation="relu"),
            layers.Dense(10),
        ]
    )

    model.compile(
        optimizer=keras.optimizers.Adam(),
        loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=keras.metrics.SparseCategoricalAccuracy(),
    )
    return model

Hãy lưu nhật ký TensorBoard và các điểm kiểm tra mô hình được tạo trong quá trình đào tạo trong nhóm lưu trữ đám mây của chúng tôi.

import datetime
import os

# Note: Please change the gcp_bucket to your bucket name.
gcp_bucket = "keras-examples"

checkpoint_path = os.path.join("gs://", gcp_bucket, "mnist_example", "save_at_{epoch}")

tensorboard_path = os.path.join(  # Timestamp included to enable timeseries graphs
    "gs://", gcp_bucket, "logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
)

callbacks = [
    # TensorBoard will store logs for each epoch and graph performance for us.
    keras.callbacks.TensorBoard(log_dir=tensorboard_path, histogram_freq=1),
    # ModelCheckpoint will save models after each epoch for retrieval later.
    keras.callbacks.ModelCheckpoint(checkpoint_path),
    # EarlyStopping will terminate training when val_loss ceases to improve.
    keras.callbacks.EarlyStopping(monitor="val_loss", patience=3),
]

model = create_model()
2021-07-27 22:07:18.825259: I tensorflow/core/profiler/lib/profiler_session.cc:126] Profiler session initializing.
2021-07-27 22:07:18.825306: I tensorflow/core/profiler/lib/profiler_session.cc:141] Profiler session started.
2021-07-27 22:07:18.826514: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcuda.so.1
2021-07-27 22:07:19.524654: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1611] Profiler found 1 GPUs
2021-07-27 22:07:19.569799: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcupti.so.11.2
2021-07-27 22:07:19.574795: I tensorflow/core/profiler/lib/profiler_session.cc:159] Profiler session tear down.
2021-07-27 22:07:19.574958: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1743] CUPTI activity buffer flushed
2021-07-27 22:07:19.590994: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.592061: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-27 22:07:19.592100: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-07-27 22:07:19.595897: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-07-27 22:07:19.595991: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
2021-07-27 22:07:19.597230: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcufft.so.10
2021-07-27 22:07:19.597581: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcurand.so.10
2021-07-27 22:07:19.598756: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusolver.so.11
2021-07-27 22:07:19.599746: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcusparse.so.11
2021-07-27 22:07:19.599930: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-07-27 22:07:19.600043: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.601088: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.602037: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-27 22:07:19.602416: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-07-27 22:07:19.603033: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.604024: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties: 
pciBusID: 0000:00:05.0 name: Tesla V100-SXM2-16GB computeCapability: 7.0
coreClock: 1.53GHz coreCount: 80 deviceMemorySize: 15.78GiB deviceMemoryBandwidth: 836.37GiB/s
2021-07-27 22:07:19.604096: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.605089: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:19.606005: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2021-07-27 22:07:19.606052: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
2021-07-27 22:07:20.242028: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2021-07-27 22:07:20.242067: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0 
2021-07-27 22:07:20.242076: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N 
2021-07-27 22:07:20.242317: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:20.243478: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:20.244412: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-07-27 22:07:20.245277: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14646 MB memory) -> physical GPU (device: 0, name: Tesla V100-SXM2-16GB, pci bus id: 0000:00:05.0, compute capability: 7.0)
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.
WARNING:tensorflow:Please add `keras.layers.InputLayer` instead of `keras.Input` to Sequential model. `keras.Input` is intended to be used by Functional model.

Tại đây, chúng tôi sẽ tải trực tiếp dữ liệu của mình từ Keras. Nói chung, cách tốt nhất là lưu trữ tập dữ liệu của bạn trong nhóm Cloud Storage, tuy nhiên, TensorFlow Cloud cũng có thể chứa tập dữ liệu được lưu trữ cục bộ. Điều đó được đề cập trong phần Nhiều tệp của hướng dẫn này.

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

Các TensorFlow Mây API cung cấp remote() chức năng để xác định xem đang được thực hiện tại địa phương hoặc trên đám mây. Điều này cho phép chỉ định riêng fit() thông số để thực hiện ở địa phương và từ xa, và cung cấp phương tiện để dễ dàng gỡ lỗi mà không quá tải máy tính cục bộ của bạn.

if tfc.remote():
    epochs = 100
    callbacks = callbacks
    batch_size = 128
else:
    epochs = 5
    batch_size = 64
    callbacks = None

model.fit(x_train, y_train, epochs=epochs, callbacks=callbacks, batch_size=batch_size)
2021-07-27 22:07:21.458608: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)
2021-07-27 22:07:21.459072: I tensorflow/core/platform/profile_utils/cpu_utils.cc:114] CPU Frequency: 2000170000 Hz
Epoch 1/5
2021-07-27 22:07:21.885085: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudnn.so.8
2021-07-27 22:07:23.986122: I tensorflow/stream_executor/cuda/cuda_dnn.cc:359] Loaded cuDNN version 8100
2021-07-27 22:07:29.307903: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublas.so.11
2021-07-27 22:07:29.684317: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcublasLt.so.11
938/938 [==============================] - 12s 3ms/step - loss: 0.2065 - sparse_categorical_accuracy: 0.9374
Epoch 2/5
938/938 [==============================] - 3s 3ms/step - loss: 0.0577 - sparse_categorical_accuracy: 0.9822
Epoch 3/5
938/938 [==============================] - 3s 3ms/step - loss: 0.0415 - sparse_categorical_accuracy: 0.9868
Epoch 4/5
938/938 [==============================] - 3s 3ms/step - loss: 0.0332 - sparse_categorical_accuracy: 0.9893
Epoch 5/5
938/938 [==============================] - 3s 3ms/step - loss: 0.0275 - sparse_categorical_accuracy: 0.9915
<tensorflow.python.keras.callbacks.History at 0x7f7b0c66a390>

Hãy lưu mô hình trong GCS sau khi quá trình đào tạo hoàn tất.

save_path = os.path.join("gs://", gcp_bucket, "mnist_example")

if tfc.remote():
    model.save(save_path)

Chúng tôi cũng có thể sử dụng nhóm lưu trữ này để xây dựng hình ảnh Docker, thay vì phiên bản Docker cục bộ của bạn. Đối với điều này, chỉ cần thêm xô của bạn vào docker_image_bucket_name tham số.

# docs_infra: no_execute
tfc.run(docker_image_bucket_name=gcp_bucket)

Sau khi đào tạo mô hình, chúng tôi có thể tải mô hình đã lưu và xem nhật ký TensorBoard của chúng tôi để theo dõi hiệu suất.

# docs_infra: no_execute
model = keras.models.load_model(save_path)
#docs_infra: no_execute
tensorboard dev upload --logdir "gs://keras-examples-jonah/logs/fit" --name "Guide MNIST"

Các dự án quy mô lớn

Trong nhiều trường hợp, dự án của bạn có chứa mô hình Keras có thể bao gồm nhiều hơn một tập lệnh Python hoặc có thể liên quan đến dữ liệu bên ngoài hoặc các phần phụ thuộc cụ thể. TensorFlow Cloud hoàn toàn linh hoạt để triển khai trên quy mô lớn và cung cấp một số chức năng thông minh để hỗ trợ các dự án của bạn.

Điểm đầu vào: hỗ trợ tập lệnh Python và sổ ghi chép Jupyter

Cuộc gọi của bạn đến run() API sẽ không luôn luôn được chứa bên trong các kịch bản Python tương tự như mã đào tạo mô hình của bạn. Với mục đích này, chúng tôi cung cấp một entry_point tham số. Các entry_point tham số có thể được dùng để xác định kịch bản Python hoặc máy tính xách tay trong đó mô hình cuộc sống đang đào tạo của bạn. Khi gọi run() từ kịch bản tương tự như mô hình của bạn, sử dụng entry_point mặc định của None .

pip phụ thuộc

Nếu cuộc gọi dự án của bạn trên thêm pip phụ thuộc, nó có thể chỉ định các thư viện cần bổ sung bằng cách bao gồm một requirements.txt tập tin. Trong tệp này, chỉ cần đặt một danh sách tất cả các phần phụ thuộc bắt buộc và TensorFlow Cloud sẽ xử lý việc tích hợp những phần này vào bản dựng đám mây của bạn.

Sổ ghi chép Python

TensorFlow Cloud cũng có thể chạy được từ máy tính xách tay Python. Thêm vào đó, bạn đã xác định entry_point có thể là một máy tính xách tay nếu cần thiết. Có hai điểm khác biệt chính cần lưu ý giữa TensorFlow Cloud trên notebook so với script:

  • Khi gọi run() từ bên trong một máy tính xách tay, một cái xô Cloud Storage phải được xác định để xây dựng và lưu trữ hình ảnh Docker của bạn.
  • Xác thực trên đám mây diễn ra hoàn toàn thông qua khóa xác thực của bạn, không có đặc điểm kỹ thuật của dự án. Quy trình làm việc mẫu sử dụng TensorFlow Cloud từ sổ tay được cung cấp trong phần "Tập hợp tất cả lại với nhau" của hướng dẫn này.

Dự án nhiều tệp

Nếu mô hình của bạn phụ thuộc vào các tệp bổ sung, bạn chỉ cần đảm bảo rằng các tệp này nằm trong cùng một thư mục (hoặc thư mục con) của điểm nhập được chỉ định. Mỗi tập tin được lưu trữ trong thư mục tương tự như quy định entry_point sẽ được bao gồm trong hình ảnh Docker, cũng như bất kỳ tập tin được lưu trữ trong thư mục con giáp với entry_point . Điều này cũng đúng đối với phụ thuộc bạn có thể cần mà không thể được mua thông qua pip

Đối với một ví dụ về một phong tục nhập cảnh điểm và dự án đa tập tin với phụ thuộc pip bổ sung, hãy nhìn vào ví dụ này đa tập tin trên TensorFlow Mây Repository . Cho ngắn gọn, chúng tôi sẽ chỉ bao gồm của dụ run() gọi:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    entry_point="train_model.py",
    requirements="requirements.txt"
)

Cấu hình máy và đào tạo phân tán

Việc đào tạo mô hình có thể yêu cầu nhiều loại tài nguyên khác nhau, tùy thuộc vào kích thước của mô hình hoặc tập dữ liệu. Khi chiếm cấu hình với nhiều GPU, nó trở nên quan trọng để lựa chọn một phù hợp chiến lược phân phối . Ở đây, chúng tôi phác thảo một vài cấu hình có thể có:

Phân phối nhiều nhân viên

Ở đây, chúng ta có thể sử dụng COMMON_MACHINE_CONFIGS để chỉ 1 trưởng GPU CPU và 4 công nhân.

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS['CPU'],
    worker_count=2,
    worker_config=tfc.COMMON_MACHINE_CONFIGS['T4_4X']
)

Theo mặc định, TensorFlow Mây chọn chiến lược phân phối tốt nhất cho cấu hình máy tính của bạn với một công thức đơn giản bằng cách sử dụng chief_config , worker_configworker_count thông số được cung cấp.

Phân phối TPU

Hãy đào tạo cùng một mô hình trên TPU, như được hiển thị:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS["CPU"],
    worker_count=1,
    worker_config=tfc.COMMON_MACHINE_CONFIGS["TPU"]
)

Chiến lược phân phối tùy chỉnh

Để xác định một chiến lược phân phối tùy chỉnh, định dạng mã của bạn bình thường như bạn làm theo hướng dẫn đào tạo phân phối và thiết lập distribution_strategy để None . Dưới đây, chúng tôi sẽ chỉ định chiến lược phân phối của riêng mình cho cùng một mô hình MNIST.

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
  model = create_model()

if tfc.remote():
    epochs = 100
    batch_size = 128
else:
    epochs = 10
    batch_size = 64
    callbacks = None

model.fit(
    x_train, y_train, epochs=epochs, callbacks=callbacks, batch_size=batch_size
)

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    chief_config=tfc.COMMON_MACHINE_CONFIGS['CPU'],
    worker_count=2,
    worker_config=tfc.COMMON_MACHINE_CONFIGS['T4_4X'],
    distribution_strategy=None
)

Hình ảnh Docker tùy chỉnh

Theo mặc định, TensorFlow Cloud sử dụng một hình ảnh Docker cơ sở được cung cấp bởi Google và tương ứng với phiên bản TensorFlow hiện tại của bạn. Tuy nhiên, bạn cũng có thể chỉ định hình ảnh Docker tùy chỉnh để phù hợp với yêu cầu xây dựng của mình, nếu cần. Đối với ví dụ này, chúng tôi sẽ chỉ định hình ảnh Docker từ phiên bản TensorFlow cũ hơn:

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    base_docker_image="tensorflow/tensorflow:2.1.0-gpu"
)

Các chỉ số bổ sung

Bạn có thể thấy hữu ích khi gắn thẻ các công việc trên Đám mây của mình bằng các nhãn cụ thể hoặc phát trực tuyến nhật ký của mô hình của bạn trong quá trình đào tạo về Đám mây. Thực hành tốt để duy trì việc ghi nhãn thích hợp trên tất cả các công việc trên Đám mây, để lưu trữ hồ sơ. Với mục đích này, run() chấp nhận một cuốn từ điển của nhãn lên tới 64 cặp khóa-giá trị, trong đó có thể nhìn thấy từ Cloud xây dựng các bản ghi. Logs như hiệu suất kỷ nguyên và internals tiết kiệm mô hình có thể được truy cập bằng cách sử dụng liên kết bằng cách thực hiện cung cấp tfc.run hoặc in đến thiết bị đầu cuối tại địa phương của bạn bằng cách sử dụng stream_logs cờ.

job_labels = {"job": "mnist-example", "team": "keras-io", "user": "jonah"}

tfc.run(
    docker_image_bucket_name=gcp_bucket,
    job_labels=job_labels,
    stream_logs=True
)

Để tất cả chúng cùng nhau

Đối với một chiều sâu Colab trong đó sử dụng nhiều tính năng được mô tả trong hướng dẫn này, hãy làm theo cùng ví dụ này để đào tạo một mô hình nhà nước-of-the-art để nhận giống chó từ các bức ảnh sử dụng khai thác tính năng.