![]() | ![]() | ![]() | ![]() | ![]() |
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.fit
và model.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 if
và if 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.
- Nhập các mô-đun bắt buộc
- Cấu hình dự án
- 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()