快捷搜索:  test  as

TFX 最新博文:如何使用 TensorFlow 生态系统实现快速高效的 BERT 部署?

Transformer 模型,分外是 BERT 模型,彻底改变了 NLP,并在诸如感情阐发、实体抽取或问答等义务上开辟了新的寰宇。BERT 模型容许数据科学家站在巨人的肩膀上。当企业用这些模型在大年夜型语料库中进预练习时,数据科学家可以将迁移进修利用到这些多用途的 transformer 模型中,并针对其领域特定的问题取得冲破性的结果。

在 SAP 的 Concur 实验室,钻研职员盼望应用 BERT 办理差盘缠盘费领域的新问题。他们想简化 BERT 的推论。但不幸的是,他们不停没找到完美的办理规划。

经由过程与 TensorFlow 团队相助,并应用他们的最新成果,Concur 实验室终极实现了同等、简单、快速的 BERT 模型揣摸,可以在几毫秒内实现从原始文本的分类猜测。

那么,各类 TensorFlow 库和组件若何赞助钻研职员达到这个里程碑?作为 SAP Concur 实验室的高档机械进修工程师,Hannes Hapke 写了一篇博文分享了他们的做法。TFX 团队的钻研职员也介入了这篇博文的编辑。

这篇博客文章将向你概述若何应用 TensorFlow 生态系统来实现可伸缩、快速、高效的 BERT 支配。全文编译如下。

本文评论争论的措施将容许开拓职员应用 TensorFlow Extended(TFX)v0.21 或更高版原先练习 TensorFlow 模型。然则,对 tf.text 操作的支持尚未包孕在 TensorFlow Service(v2.1)确当前版本中,而是包孕在nightly docker版本中,并将包孕在 v2.2 版本中。

假如你想查看完备的示例,请查看Colab notebook。它展示了全部 TensorFlow 扩展(TFX)管道以天生可支配的 BERT 模型,并将预处置惩罚步骤作为模型图的一部分。

BERT 支配的现状

transformer 模型的最新进展令人吃惊。但不幸的是,将这些模型用在临盆中却并不简单或者完美。抱负环境下,我们盼望将原始文本发送到办事器,然则 BERT 模型必要对输入文本进行预处置惩罚,然后才能从实际模型中得到猜测。

有一些办理规划经由过程在客户端对文本进行预处置惩罚来办理这个问题,还有的办理规划是,在办事器端实现了一其中心步骤来处置惩罚输入数据。这两个措施都不太精确,由于它们必要额外的支配和谐,低落了推理的效率。

图 1:当前的 BERT 支配

什么是最佳支配?

在支配模型时,措施越简单越好。我们盼望支配 transformer 模型,并将预处置惩罚作为模型图的一部分。因为预处置惩罚被集成到模型图中,我们可以简单地将单个模型支配到模型办事器,删除其他支配依附项,并充分使用模型办事器的优点。例如,我们可以批处置惩罚猜测哀求,以优化推理硬件的应用。

使用 TensorFlow 生态系统支配 BERT

TensorFlow 对我们来说是一个异常高效的框架,由于它不仅是一个机械进修框架,而且还供给了一个具有广泛的支持包和对象的生态系统。TensorFlow Serving 对我们来说异常有用。它供给了简单、同等、可伸缩的模型支配。

我们亲昵关注的另一个系统项目是 TensorFlow Transform。它为我们供给了一个将模型预处置惩罚步骤构建为图的时机,然后,我们可以将这些图与实际的深度进修模型一路导出。TensorFlow Transform 要求所有预处置惩罚步骤都表示为 TensorFlow 操作。正由于如斯,TensorFlow 文本的最新成长对我们来说也异常有赞助。RaggedTensors 的实现不仅开启了新的利用,而且,其库还供给了实现自然说话预处置惩罚步骤所需的功能。

在 TensorFlowWorld 2019 上展示了 TensorFlow Text 的一个新功能,那便是完全实现一个 BERT 标记器。是以,我们可以用几行 TensorFlow 代码来表示预处置惩罚步骤。我们还经由过程应用另一个 TensorFlow 对象:TensorFlow Extended(TFX),实现了模型管道和支配同等的目标。TFX 容许我们以可重复的要领表达全部 ML 管道,是以有助于我们支配同等的机械进修模型。

图 2:附 tf.Text 的 TFX 管道

用 TensorFlow ops 编写预处置惩罚步骤

抱负的模型支配吸收原始文本作为模型的输入,并供给模型猜测作为结果。简化 BERT 支配的关键是将预处置惩罚步骤表示为 TensorFlow ops。BERT 模型要求将原始输入文本标记为标记 id、输入掩码的伴随数据布局和天生的输入类型 id。借助 TensorFlow Text,我们现在可以用更少的代码来实现这一点。在接下来的文章中,我们将评论争论从原始文本到特定于 BERT 的数据布局转换的细节,包括添加特定于 BERT 的标记。

vocab_file_path = load_bert_layer().resolved_object.vocab_file.asset_pathbert_tokenizer = text.BertTokenizer(vocab_lookup_table=vocab_file_path, token_out_type=tf.int64,lower_case=do_lower_case)...input_word_ids = tokenize_text(text)input_mask = tf.cast(input_word_ids > 0, tf.int64)input_mask = tf.reshape(input_mask, [-1, MAX_SEQ_LEN])zeros_dims = tf.stack(tf.shape(input_mask))input_type_ids = tf.fill(zeros_dims, 0)input_type_ids = tf.cast(input_type_ids, tf.int64)

图 3:BERT 标记器

使用 TensorFlow Transform 和上述代码,可以将预处置惩罚图与练习好的 TensorFlow 模型一路导出。跟着 TensorFlow Serving 的最新更新,我们支配的 BERT 模型现在可以吸收原始文本作为输入。在这里,没有其他支配依附项!

应用 TensorFlow Transform 为我们供给了一些实际的好处。一方面,我们可以在组织上划分数据预处置惩罚和模型架构事情之间的职责。另一方面,我们可以方便地调试、测试和天生预处置惩罚输出的统计信息。transform 组件输出转换后的练习集,作为 TFRecords,这些练习集易于反省。

在 Transform 输出的「调试」历程中,我们发清楚明了一些小差错,这些差错不会导致模型的练习掉败,但可能会影响其机能。例如,[SEP] 标记中的偏移量。从技巧上来讲,这里不必要 TensorFlow Transform。因为每个示例的预处置惩罚自力于全部语料库进行,我们可以很轻易地将其直接构建到模型图中。然则,我们发明用这种措施构建和调试管道会更轻易。

图 4:BERT 层

抱负的支配?

简化开拓

经由过程应用各类 TensorFlow 对象,我们能够以简单而简洁的要领支配 BERT 模型。将预处置惩罚步骤集成到模型图中可以削减练习数据和推理数据之间的倾斜风险。支配的模型不必要额外的客户机或办事器依附项,这进一步低落了模型差错的风险。我们可以将我们的 BERT 模型与 TensorFlow Serving 同等地支配,同时还可以使用模型优化——如批处置惩罚揣摸。

推理机能

我们最初的机能测试看起来很有盼望。在我们的演示 BERT 模型图上的推论,包孕预处置惩罚步骤和每个猜测模型。这些模型匀称约 15.5 ms,它们是在单个 V100 GPU、最多 128 个标记、gRPC 哀求上丈量的,由 GPU 的非优化 TensorFlow 办事构建的无根基 BERT 模型。这和曩昔在客户端应用 BERT 标记化的支配以及应用 TensorFlow Serving 托管的分类模型的匀称揣摸光阴大年夜致相同。当然,根据你的机械及其型号的不合,你可能会看到不合的结果。

懂得更多信息

假如你想深入懂得代码,请查看 Colab notebook,此中有一个应用预先练习的 BERT 模型实现感情分类模型的示例。假如你想试用我们的演示支配,请查看 Concur 实验室的演示页面,上面展示了我们的感情分类项目。

假如你对 TensorFlow Extended(TFX)和 TensorFlow Transform 的内部事情感兴趣,请进入 TFX 用户指南并查看即将出版的 O'Reilly 出版物「Building Machine Learning Pipelines, Automating Model Life Cycles With TensorFlow」。

要懂得有关 TFX 的更多信息,请造访 TFX 网站,加入 TFX 评论争论组,浏览 TFX 博客中的其他文章,或者在 YouTube 上不雅看我们的 TFX 播放列表,并订阅 TensorFlow 频道。

TFX 评论争论小组:https://groups.google.com/a/tensorflow.org/forum/#!forum/tfxTFX 博客:https://blog.tensorflow.org/search?label=TFXYouTube TFX 播放列表:https://www.youtube.com/playlist?list=PLQY2H8rRoyvxR15n04JiW0ezF5HQRs_8FTensorFlow 频道:https://goo.gle/2WtM7Akvia:https://blog.tensorflow.org/2020/03/part-1-fast-scalable-and-accurate-nlp-tensorflow-deploying-bert.html

雷锋网雷锋网雷锋网

您可能还会对下面的文章感兴趣: