如何在 Cloud TPU v2 中使用 SQUAD 2.0 训练 BERT 模型?

Posted

技术标签:

【中文标题】如何在 Cloud TPU v2 中使用 SQUAD 2.0 训练 BERT 模型?【英文标题】:How to train BERT model with SQUAD 2.0 in Cloud TPU v2? 【发布时间】:2019-10-26 13:07:09 【问题描述】:

免责声明:我对神经网络和 Tensorflow 非常陌生。

我正在尝试创建一个 QA 应用程序,用户提出问题,应用程序给出答案。我尝试的大多数传统方法都不起作用或不够准确或需要人工干预。我在研究无监督 QA 应用时,遇到了BERT。

BERT 谷歌声称是最先进的神经网络模型,并在 Squad 2.0 排行榜中获得最高分。我希望将此模型用于我的应用程序并测试其性能。

我在Compute Engine. 创建了一个Windows 2012 Datacenter 版虚拟机我使用ctpu. 创建了Cloud TPU

我在 Cloud Storage 中有 BERT large uncased model。

如何使用SQUAD 2.0 训练 BERT 大型无壳模型?

如果我错了,请随时纠正我,我理解 Cloud TPU 只是一个类似于 CPU 或 GPU 的设备。但是,如果您阅读 this,他们会解释说 Cloud TPU 是一个虚拟机(“在 Cloud TPU 上,您可以使用 BERT-Large 作为...”)。

如here 中所述,我应该在哪里运行run_squad.py?

python run_squad.py \
  --vocab_file=$BERT_LARGE_DIR/vocab.txt \
  --bert_config_file=$BERT_LARGE_DIR/bert_config.json \
  --init_checkpoint=$BERT_LARGE_DIR/bert_model.ckpt \
  --do_train=True \
  --train_file=$SQUAD_DIR/train-v2.0.json \
  --do_predict=True \
  --predict_file=$SQUAD_DIR/dev-v2.0.json \
  --train_batch_size=24 \
  --learning_rate=3e-5 \
  --num_train_epochs=2.0 \
  --max_seq_length=384 \
  --doc_stride=128 \
  --output_dir=gs://some_bucket/squad_large/ \
  --use_tpu=True \
  --tpu_name=$TPU_NAME \
  --version_2_with_negative=True

对于这个参数vocab_file,如何从虚拟机访问存储桶文件?

外部 IP 地址是 $TPU_NAME 环境变量的值吗?

【问题讨论】:

【参考方案1】:

因此,TPU 目前只能从 GCS 中读取。您下载的模型应上传到您自己创建的另一个 GCS 存储桶。这就是 TPU 访问vocab_file 和其他文件的方式。

【讨论】:

如何在 VM 中说这个 gs://example 是我要访问的存储桶?我试图通过创建一个值为“gs://example”的环境变量来做到这一点。它抛出了一个错误。 您应该尝试访问由环境变量定义的存储桶。如果你去这里,github.com/google-research/bert,你应该看到你需要做export BERT_BASE_DIR=gs://bert_models/2018_10_18/uncased_L-12_H-768_A-12,例如,如果你试图使用基本模型。

以上是关于如何在 Cloud TPU v2 中使用 SQUAD 2.0 训练 BERT 模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Cloud TPU 与 Tensorflow Lite Model Maker 结合使用?

无法删除 Cloud TPU

存储在 Google Cloud 上的大量 TF 记录文件

我如何在谷歌云 TPU 上将 COCO 数据集转换为一组 TFRecords

将 Colab 连接到付费 TPU

深度学习硬件:TPU, DSP, FPGA, AI ASIC, Systolic Array 动手学深度学习v2