本教程包含 MNIST 模型的简要说明、有关下载 MNIST TensorFlow TPU 代码示例的说明,以及在 Cloud TPU 上运行代码的指南。
免责声明
本教程使用第三方数据集。对于此数据集的有效性或任何其他方面,Google 不提供任何代理、担保或其他保证。
模型说明
MNIST 数据集包含大量 0 到 9 之间的手写数字图片,以及标识每个图片中数字的标签。
本教程将训练一个机器学习模型,以根据 MNIST 数据集。训练完成后,模型将传入的图片分为 10 张 分类(0 到 9)。 MNIST 数据集。然后,您可以向模型发送它之前未曾见过的图像,之后模型会根据其在训练期间学到的内容来识别图像中的数字。
MNIST 数据集分为以下三个部分:
- 60000 个训练数据示例
- 10000 个测试数据示例
- 5000 个验证数据示例
此模型包含 7 个层:
- 2 个卷积
- 2 个池化
- 2 个密集(全连接)
- 1 个漏失
损失是使用分类交叉熵计算得出的。
此版本的 MNIST 模型使用 Keras API,这是在 Cloud TPU 上构建和运行机器学习模型的推荐方法。
Keras 通过隐藏大部分低级实现来简化模型开发流程,从而让您更轻松在 TPU 和其他测试平台(例如 GPU 或 CPU)之间切换。
目标
- 创建 Cloud Storage 存储分区以保存数据集和模型输出。
- 运行训练作业。
- 验证输出结果。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Compute Engine
- Cloud TPU
- Cloud Storage
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
本部分介绍如何设置 Cloud Storage 存储分区和 Compute Engine 虚拟机。
打开一个 Cloud Shell 窗口。
为项目 ID 创建一个变量。
export PROJECT_ID=project-id
配置 Google Cloud CLI 以使用要在其中创建项目的项目 Cloud TPU。
gcloud config set project ${PROJECT_ID}
当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示
Authorize Cloud Shell
页面。点击页面底部的Authorize
以允许gcloud
使用您的凭据进行 Google Cloud API 调用。为 Cloud TPU 项目创建服务账号。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
该命令将返回以下格式的 Cloud TPU 服务账号:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
使用以下命令创建 Cloud Storage 存储分区:
gcloud storage buckets create gs://bucket-name \ --project=${PROJECT_ID} \ --location=us-central1
此 Cloud Storage 存储分区存储您用于训练模型的数据和训练结果。本教程中使用的
gcloud
命令会设置 您在 Cloud TPU 和 Cloud TPU 中 上一步。如果您需要更精细的权限,请查看访问级层权限。使用
gcloud
命令创建 TPU 虚拟机。$ gcloud compute tpus tpu-vm create mnist-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.17.0-pjrt \
命令标志说明
如需详细了解
gcloud
命令,请参阅 gcloud 参考文档。使用 SSH 连接到 Compute Engine 实例。连接到网络后 您的 Shell 提示符会从
username@projectname
更改为username@vm-name
:gcloud compute tpus tpu-vm ssh mnist-tutorial --zone=us-central1-b
为 TPU 名称创建环境变量。
(vm)$ export TPU_NAME=local
安装 TensorFlow 要求。
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
训练模型
MNIST TPU 模型的源代码可在 GitHub 上找到。
设置以下变量。将 bucket-name 替换为您的存储分区名称。
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
设置
PYTHONPATH
环境变量。(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
创建 TPU 时,如果您将
--version
参数设置为以-pjrt
时,请设置以下环境变量以启用 PJRT 运行时:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
切换至存储模型的目录。
(vm)$ cd /usr/share/tpu/models/official/legacy/image_classification
运行 MNIST 训练脚本:
(vm)$ python3 mnist_main.py \ --tpu=${TPU_NAME} \ --model_dir=${MODEL_DIR} \ --data_dir=${DATA_DIR} \ --train_epochs=10 \ --distribution_strategy=tpu \ --download
命令标志说明
tpu
- Cloud TPU 的名称。如果在设置时未指定 Compute Engine 虚拟机和 Cloud TPU,默认为您的用户名。
model_dir
- 在训练期间存储检查点和摘要的 Cloud Storage 存储分区。您可以使用现有文件夹加载之前的内容 在相同大小的 TPU 上创建的检查点 版本。
data_dir
- 训练输入的 Cloud Storage 路径。在此示例中,该路径设置为 fake_imagenet 数据集。
train_epochs
- 训练模型的周期数。
distribution_strategy
- 如需在 Cloud TPU 上训练 ResNet 模型,请设置
distribution_strategy
发送至tpu
。 download
- 如果设置为
true
,脚本会下载和预处理 MNIST 数据集(如果尚未下载)。
训练脚本在 v3-8 Cloud TPU 上运行的时间不到 5 分钟,并显示类似以下内容的输出:
Run stats: { 'accuracy_top_1': 0.9762369990348816, 'eval_loss': 0.07863274961709976, 'loss': 0.1111728847026825, 'training_accuracy_top_1': 0.966645359992981 }
清除数据
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit
您的提示符现在应为
username@projectname
,表明您位于 Cloud Shell 中。删除您的 Cloud TPU 和 Compute Engine 资源。
$ gcloud compute tpus tpu-vm delete mnist-tutorial \ --zone=us-central1-b
通过运行
gcloud compute tpus tpu-vm list
验证资源是否已删除。删除操作可能需要几分钟时间才能完成。以下命令的输出 不应包含本教程中创建的任何资源:$ gcloud compute tpus tpu-vm list --zone=us-central1-b
使用以下命令删除 Cloud Storage 存储桶。将 bucket-name 替换为您的 Cloud Storage 存储分区的名称。
$ gcloud storage rm gs://bucket-name --recursive
后续步骤
TensorFlow Cloud TPU 教程通常使用示例数据集来训练模型。此训练的结果不能用于推断。接收者 使用模型进行推理,就可以使用公开可用的 或您自己的数据集。在 Cloud TPU 上训练的 TensorFlow 模型 通常需要将数据集 TFRecord 格式。
您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您使用的不是图片 分类模型,您需要将数据集转换为 TFRecord 格式 。如需了解详情,请参阅 TFRecord 和 tf.Example。
超参数调节
如需使用数据集提升模型的性能,您可以调节模型的超参数。您可以在 GitHub 上寻找所有 TPU 支持模型通用的超参数的相关信息。如需了解特定于模型的超参数,请参阅源代码 每个代码 模型。如需详细了解超参数调优,请参阅概览 超参数调优 和 Tune 超参数。
推断
训练模型后,即可将其用于推理(也称为 预测)。您可以使用 Cloud TPU 推理转换器工具准备和优化 TensorFlow 模型,以便在 Cloud TPU v5e 上进行推理。如需详细了解 Cloud TPU v5e 上的推理,请参阅 Cloud TPU v5e 推理简介。
- 运行 Cloud TPU colab,演示如何使用您自己的图片数据训练图片分类模型。
- 浏览其他 Cloud TPU 教程。
- 学习 TensorBoard 中 TPU 监控工具的使用方法。
- 运行 ResNet 示例以验证大型模型的性能。