AI学习者 · 8月6日

在 Cloud TPU 上运行 MNIST (TF 2.x)

本教程包含 MNIST 模型的简要说明、有关下载 MNIST TensorFlow TPU 代码示例的说明,以及在 Cloud TPU 上运行代码的指南。

注意:Cloud TPU 快速入门也包含此信息。
重要提示:本教程适用于 TPU 虚拟机和旧版 TPU 节点这两种 TPU 配置。您使用的 gcloud 命令取决于您使用的 TPU 配置。每个 gcloud 命令都显示在标签式部分中。选择您要使用的 TPU 配置的标签页,网页会显示相应的 gcloud 命令。除非您知道需要使用旧版 TPU 节点,否则我们建议您使用 TPU 虚拟机。如需详细了解 TPU 配置,请参阅系统架构。

免责声明

本教程使用第三方数据集。Google 不对此数据集的有效性或任何其他方面提供任何表示、担保或其他保证。

模型说明

MNIST 数据集包含大量 0 到 9 之间的手写数字图片,以及标识每个图片中数字的标签。

本教程将训练一个机器学习模型作为示例,以根据 MNIST 数据集对图片进行分类。经过训练之后,该模型根据从 MNIST 数据集中获取的手写图像而学到的内容,将输入图像分为 10 个类别(0 到 9)。然后,您可以向模型发送它之前未曾见过的图像,之后模型会根据其在训练期间学到的内容来识别图像中的数字。

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

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

本部分介绍如何设置 Cloud Storage 存储桶和 Compute Engine 虚拟机。

重要提示:在同一区域/地区设置 Compute Engine 虚拟机、Cloud TPU 节点和 Cloud Storage 存储桶,以减少网络延迟和网络费用。
  1. 打开一个 Cloud Shell 窗口。

打开 Cloud Shell

  1. 为项目 ID 创建一个变量。
export PROJECT_ID=project-id
  1. 配置 Google Cloud CLI 以使用要在其中创建 Cloud TPU 的项目。
gcloud config set project ${PROJECT_ID}

当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示 Authorize Cloud Shell 页面。点击页面底部的 Authorize 以允许 gcloud 使用您的凭据进行 Google Cloud API 调用。

  1. 为 Cloud TPU 项目创建服务账号。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

该命令会返回以下格式的 Cloud TPU 服务帐号:

service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
  1. 使用以下命令创建 Cloud Storage 存储桶:
注意:在以下命令中,将 bucket-name 替换为您要分配给存储桶的名称。
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name

此 Cloud Storage 存储桶存储您用于训练模型的数据和训练结果。本教程中使用的 gcloud 命令会为您在上一步中设置的 Cloud TPU 服务账号设置默认权限。如果您需要更精细的权限,请查看访问级层权限

  1. 使用 gcloud 命令启动 Compute Engine 虚拟机和 Cloud TPU。 使用的命令取决于您使用的是 TPU 虚拟机还是 TPU 节点。如需了解详情,请参阅系统架构

TPU虚拟机

gcloud compute tpus tpu-vm create mnist-tutorial \
--zone=us-central1-b \
--accelerator-type=v3-8 \
--version=tpu-vm-tf-2.16.1-pjrt \

TPU节点

gcloud compute tpus execution-groups create \
--name=mnist-tutorial \
--zone=us-central1-b \
--tf-version=2.12.0 \
--machine-type=n1-standard-1 \
--accelerator-type=v3-8 \

如需详细了解 gcloud 命令,请参阅 gcloud 参考文档

  1. gcloud compute tpus 命令执行完毕后,验证 shell 提示符已从 username@projectname 更改为 username@vm-name。此变化表明您现已登录 Compute Engine 虚拟机。

如果未连接到 Compute Engine 实例,您可以通过运行以下命令进行连接:

TPU虚拟机

gcloud compute tpus tpu-vm ssh mnist-tutorial --zone=us-central1-b

TPU节点

gcloud compute ssh mnist-tutorial --zone=us-central1-b

在您继续按照这些说明操作时,请在虚拟机会话窗口中运行以 (vm)$ 开头的每个命令。

  1. 为 TPU 名称创建环境变量。

TPU虚拟机

export TPU_NAME=local

TPU节点

export TPU_NAME=mnist-tutorial
  1. 安装 TensorFlow 要求。

使用的命令取决于您使用的是 TPU 虚拟机还是 TPU 节点。

TPU虚拟机

pip3 install -r /usr/share/tpu/models/official/requirements.txt

TPU节点

pip3 install --user tensorflow-model-optimization>=0.1.3

训练模型

MNIST TPU 模型的源代码可在 GitHub 上找到。

  1. 设置以下变量。将 bucket-name 替换为您的存储桶名称。
export STORAGE_BUCKET=gs://bucket-name
export MODEL_DIR=${STORAGE_BUCKET}/mnist
export DATA_DIR=${STORAGE_BUCKET}/data
  1. 设置 PYTHONPATH 环境变量。

TPU虚拟机

export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"

TPU节点

export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
  1. 创建 TPU 时,如果将 --version 参数设置为以 -pjrt 结尾的版本,请设置以下环境变量以启用 PJRT 运行时:
  export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
  export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
  1. 切换至存储模型的目录。

TPU虚拟机

cd /usr/share/tpu/models/official/legacy/image_classification

TPU节点

cd /usr/share/models/official/legacy/image_classification
  1. 运行 MNIST 训练脚本:
python3 mnist_main.py \
  --tpu=${TPU_NAME} \
  --model_dir=${MODEL_DIR} \
  --data_dir=${DATA_DIR} \
  --train_epochs=10 \
  --distribution_strategy=tpu \
  --download

训练脚本在 v3-8 Cloud TPU 上运行的时间不到 5 分钟,并显示类似以下内容的输出:

image.png

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

  1. 断开与 Compute Engine 实例的连接(如果您尚未这样做):
exit
  1. 删除您的 Cloud TPU 和 Compute Engine 资源。 用于删除资源的命令取决于您使用的是 TPU 虚拟机还是 TPU 节点。如需了解详情,请参阅系统架构系统架构。

TPU虚拟机

gcloud compute tpus tpu-vm delete mnist-tutorial \
--zone=us-central1-b

TPU节点

gcloud compute tpus execution-groups delete mnist-tutorial \
--zone=us-central1-b

3.通过运行 gcloud compute tpus execution-groups list 验证资源是否已删除。删除操作可能需要几分钟时间才能完成。以下命令的输出不应包含本教程中创建的任何资源:

TPU虚拟机

gcloud compute tpus tpu-vm list --zone=us-central1-b

TPU节点

gcloud compute tpus execution-groups list --zone=us-central1-b
  1. 使用 gsutil 删除 Cloud Storage 存储桶,如以下示例所示。将 bucket-name 替换为您的 Cloud Storage 存储桶的名称。
gsutil rm -r gs://bucket-name
注意 :如需了解免费存储限制和其他价格信息,请参阅 Cloud Storage 价格指南。

后续步骤

TensorFlow Cloud TPU 教程通常使用示例数据集来训练模型。此训练的结果无法用于推理。如需使用模型进行推理,您可以在公开数据集或您自己的数据集上训练模型。在 Cloud TPU 上训练的 TensorFlow 模型通常需要数据集采用 TFRecord 格式。

您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您使用的不是图片分类模型,则必须自行将数据集转换为 TFRecord 格式。如需了解详情,请参阅 TFRecord 和 tf.Example

超参数调优

如需使用数据集提高模型的性能,您可以调整模型的超参数。您可以在 GitHub 上找到所有 TPU 支持模型通用的超参数信息。您可以在每个模型的源代码中找到有关模型特有超参数的信息。如需详细了解超参数调节,请参阅超参数调节概览和调节超参数。

推理

训练完模型后,您可以使用它进行推理(也称为预测)。您可以使用 Cloud TPU 推理转换器工具准备和优化 TensorFlow 模型,以在 Cloud TPU v5e 上进行推断。如需详细了解 Cloud TPU v5e 上的推断,请参阅 Cloud TPU v5e 推断简介

  • 运行 Cloud TPU colab,演示如何使用您自己的图片数据训练图片分类模型。
  • 浏览其他 Cloud TPU 教程。
  • 学习 TensorBoard 中 TPU 监控工具的使用方法。
  • 运行 ResNet 示例以验证大型模型的性能。
文章来源:google cloud

推荐阅读

更多芯擎AI开发板干货请关注芯擎AI开发板专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
7949
内容数
55
搭载基于安谋科技自研“周易”NPU的芯擎科技工业级“龍鹰一号”SE1000-I处理器
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息