如果您不熟悉 Cloud TPU,建议您浏览quickstart,了解如何创建 TPU 虚拟机。
本教程介绍了如何在 Cloud TPU 上训练 HuggingFace GPT2 模型。
目标
- 创建 Cloud TPU
- 安装依赖项
- 运行训练作业
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Compute Engine
- Cloud TPU
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
本演示使用 Google Cloud 的收费组件。请查看 Cloud TPU 价格页面估算您的费用。请务必在使用完您创建的资源以后清理这些资源,以免产生不必要的费用。
使用 Cloud TPU 训练 HuggingFace GPT2
打开一个 Cloud Shell 窗口。
为项目 ID 创建环境变量。
export PROJECT_ID=your-project-id
配置 Google Cloud CLI,以使用要在其中创建 Cloud TPU 的 Google Cloud 项目。
gcloud config set project ${PROJECT_ID}
当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示
Authorize Cloud Shell
页面。点击页面底部的Authorize
,以允许gcloud
使用您的凭据进行 Google Cloud API 调用。为 Cloud TPU 项目创建服务账号。
服务帐号允许 Cloud TPU 服务访问其他 Google Cloud 服务。
$ gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
该命令将返回以下格式的 Cloud TPU 服务账号:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
创建 Cloud TPU
使用
gcloud
命令创建 Cloud TPU 虚拟机。以下命令会创建一个v4-8
TPU。您还可以通过将--accelerator-type
标志设置为 Podslice 类型(例如v4-32
)来创建 TPU PodSlice。$ gcloud compute tpus tpu-vm create hf-gpt2 \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.16.1-pjrt
运行以下
ssh
命令以连接到 Cloud TPU 虚拟机。gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
安装依赖项
克隆 HuggingFace Transformers 代码库:
(vm)$ cd /tmp (vm)$ git clone https://github.com/huggingface/transformers.git (vm)$ cd transformers
安装依赖项:
(vm)$ pip install . (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling (vm)$ pip install -r requirements.txt
创建临时目录:
(vm)$ mkdir /tmp/gpt2-wikitext
创建 TPU 时,如果将
--version
参数设置为以-pjrt
结尾的版本,请设置以下环境变量以启用 PJRT 运行时:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
运行训练脚本
(vm)$ python3 run_clm.py \
--model_name_or_path distilgpt2 \
--max_train_samples 1000 \
--max_eval_samples 100 \
--num_train_epochs 1 \
--output_dir /tmp/gpt2-wikitext \
--dataset_name wikitext \
--dataset_config_name wikitext-103-raw-v1
命令标志说明
model_name_or_path
- 要训练的模型的名称。
max_train_samples
- 用于训练的样本数量上限。
max_eval_samples
- 用于评估的样本数量上限。
num_train_epochs
- 训练模型的周期数。
output_dir
- 训练脚本的输出目录。
dataset_name
- 要使用的数据集的名称。
dataset_config_name
- 数据集配置名称
训练完成后,系统会显示类似以下内容的消息:
125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations. 125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233 Configuration saved in /tmp/gpt2-wikitext/config.json Configuration saved in /tmp/gpt2-wikitext/generation_config.json Model weights saved in /tmp/gpt2-wikitext/tf_model.h5 D0707 21:38:45.640973681 12027 init.cc:191] grpc_shutdown starts clean-up now
清理
断开与 TPU 虚拟机实例的连接:
(vm)$ exit
您的提示符现在应为
username@projectname
,表明您位于 Cloud Shell 中。删除 TPU 资源。
$ gcloud compute tpus tpu-vm delete hf-gpt2 \ --zone=us-central2-b
后续步骤
请尝试使用其他受支持的参考模型。