本教程介绍如何使用 Librispeech ASR 语料公开数据集和 Tensor2Tensor 在 Cloud TPU 上训练自动语音识别 (ASR) 模型。
语音识别模型只是 Tensor2Tensor 库中的模型之一。Tensor2Tensor (T2T) 是一个库,其中包含深度学习模型和数据集,还包含一组用于训练这些模型以及下载和准备数据的脚本。此模型用于将语音转换为文字。
目标
- 创建 Cloud Storage 存储分区以保存数据集和模型输出。
- 下载并准备 Tensor2Tensor 库数据集。
- 运行训练作业。
- 验证输出结果。
费用
本教程使用 Google Cloud 的以下收费组件:
- Compute Engine
- Cloud TPU
- Cloud Storage
请使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用。
准备工作
在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
本演示使用 Google Cloud 的收费组件。请查看 Cloud TPU 价格页面估算您的费用。请务必在使用完您创建的资源以后清理这些资源,以免产生不必要的费用。
设置资源
本部分介绍如何为教程设置 Cloud Storage 存储空间、虚拟机和 Cloud TPU 资源。
打开一个 Cloud Shell 窗口。
为项目 ID 创建一个变量。
export PROJECT_ID=project-id
配置
gcloud
命令行工具,以使用要在其中创建 Cloud TPU 的项目。gcloud config set project ${PROJECT_ID}
当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示
Authorize Cloud Shell
页面。点击页面底部的Authorize
以允许gcloud
使用您的凭据进行 GCP 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 存储分区:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
此 Cloud Storage 存储分区存储您用于训练模型的数据和训练结果。本教程中使用的
ctpu up
工具会为 Cloud TPU 服务帐号设置默认权限。如果您需要更精细的权限,请查看访问级层权限。存储分区位置必须与虚拟机 (VM) 和 TPU 节点位于同一区域。虚拟机和 TPU 节点位于特定地区,即区域内的细分。
使用
ctpu up
命令启动本教程所需的 Compute Engine 和 Cloud TPU 资源。ctpu up --project=${PROJECT_ID} \ --zone=europe-west4-a \ --vm-only \ --disk-size-gb=300 \ --machine-type=n1-standard-8 \ --tf-version=1.15.4 \ --name=auto-speech-recog-tutorial
命令标志说明
如需详细了解 CTPU 实用程序,请参阅 CTPU 参考。
在出现提示时,按 y 创建 Cloud TPU 资源。
当 ctpu up
命令执行完毕后,验证 shell 提示符已从 username@projectname
更改为 username@vm-name
。此变化表明您现已登录 Compute Engine 虚拟机。如果您未连接到 Compute Engine 实例,则可通过运行以下命令进行连接:
gcloud compute ssh auto-speech-recog-tutorial --zone=europe-west4-a
从现在开始,前缀 (vm)$
表示您应该在 Compute Engine 虚拟机实例上运行该命令。
为目录创建以下环境变量:
(vm)$ STORAGE_BUCKET=gs://bucket-name
(vm)$ TPU_NAME=auto-speech-recog-tutorial (vm)$ DATA_DIR=$STORAGE_BUCKET/data/ (vm)$ OUT_DIR=$STORAGE_BUCKET/output (vm)$ export TMP_DIR=~/tmp
生成训练和评估数据集
T2T 将适用于许多常用开源数据集的数据生成功能打包在其 t2t-datagen
脚本中,使您可以非常方便地应用。该脚本会下载数据,对其进行预处理,并针对训练对其进行准备。
在您的 Compute Engine 虚拟机上:
使用
t2t-datagen
脚本生成完整数据集和用于评估的较小纯净数据集。t2t-datagen
中的音频导入使用sox
生成标准化波形。将其安装在 Compute Engine 虚拟机上,然后运行以下t2t-datagen
命令。(vm)$ sudo apt-get install sox
(vm)$ t2t-datagen --problem=librispeech --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR (vm)$ t2t-datagen --problem=librispeech_clean --data_dir=$DATA_DIR --tmp_dir=$TMP_DIR
librispeech_train_full_test_clean
问题虽然使用完整数据集进行训练,但使用纯净数据集进行评估。
您还可以使用 librispeech_clean_small
,这是纯净数据集的较小版本。
您可以访问 Google Cloud Console 并从左侧菜单中选择存储,来查看 Cloud Storage 上的数据。点击您为本教程创建的存储分区的名称。
训练模型
如需在 Cloud TPU 上训练模型,请使用大批量和截断序列运行训练程序。
(vm)$ t2t-trainer \
--model=transformer \
--hparams_set=transformer_librispeech_tpu \
--problem=librispeech_train_full_test_clean \
--train_steps=210000 \
--eval_steps=3 \
--local_eval_frequency=100 \
--data_dir=$DATA_DIR \
--output_dir=$OUT_DIR \
--use_tpu \
--cloud_tpu_name=$TPU_NAME
完成此步骤后,使用较小批量和完整序列通过更多步骤再次运行训练。此训练在 v3-8
TPU 节点上大约需要 11 个小时。
(vm)$ t2t-trainer \
--model=transformer \
--hparams_set=transformer_librispeech_tpu \
--hparams=max_length=295650,max_input_seq_length=3650,max_target_seq_length=650,batch_size=6 \
--problem=librispeech_train_full_test_clean \
--train_steps=230000 \
--eval_steps=3 \
--local_eval_frequency=100 \
--data_dir=$DATA_DIR \
--output_dir=$OUT_DIR \
--use_tpu \
--cloud_tpu_name=$TPU_NAME
清理
为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:
断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit
您的提示符现在应为
username@projectname
,表明您位于 Cloud Shell 中。在您的 Cloud Shell 中,使用您在设置 Cloud TPU 时所用的 --zone 标志运行
ctpu delete
,以删除 Compute Engine 虚拟机和 Cloud TPU:$ ctpu delete --project=${PROJECT_ID} \ --zone=europe-west4-a \ --name=auto-speech-recog-tutorial
运行
ctpu status
以确保未分配任何实例,避免产生不必要的 TPU 使用费。删除操作可能需要几分钟时间才能完成。 如下所示的响应表明不再有已分配的实例:2018/04/28 16:16:23 WARNING: Setting zone to "europe-west4-a" No instances currently exist. Compute Engine VM: -- Cloud TPU: --
如下所示运行
gsutil
,将 bucket-name 替换为您为本教程创建的 Cloud Storage 存储分区的名称:$ gsutil rm -r gs://bucket-name
后续步骤
在本教程中,您已使用示例数据集训练了自动语音识别模型。此训练的结果(在大多数情况下)不能用于推断。要使用模型进行推断,您可以在公开提供的数据集或您自己的数据集上训练数据。在 Cloud TPU 上训练的模型要求数据集采用 TFRecord 格式。
您可以使用数据集转换工具示例将图片分类数据集转换为 TFRecord 格式。如果您未使用图片分类模型,则必须自行将数据集转换为 TFRecord 格式。如需了解详情,请参阅 TFRecord 和 tf.Example
超参数调节
如需使用数据集提升模型的性能,您可以调节模型的超参数。您可以在 GitHub 上寻找所有 TPU 支持模型通用的超参数的相关信息。您可以在每个模型的源代码中寻找模型专用超参数的相关信息。如需详细了解超参数调节,请参阅超参数调节概览、使用超参数调节服务和调节超参数。
推理
训练模型后,您可以使用该模型进行推断(也称为预测)。AI Platform 是一款基于云的解决方案,用于开发、训练和部署机器学习模型。部署模型后,您可以使用 AI Platform Prediction 服务。
- 详细了解
ctpu
,包括如何在本地机器上安装。 - 浏览更多面向 TPU 的 Tensor2Tensor 模型。
- 使用更多 TPU 示例进行实验。
- 探索 TensorBoard 中的 TPU 工具。