用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

來源:TensorFlow

本文約3144字,建議閱讀9分鐘

本文介紹如何通過 TensorFlow 的生態系統實現可擴展、快速且高效的 BERT 部署。

用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

Transformer 模型(尤其是 BERT 模型)為 NLP 帶來巨大的變革,並且在情感分析、實體提取和問答問題等任務的處理上也均有新的突破。BERT 模型讓數據科學家站在了巨人的肩膀上。各公司已經通過大型語料庫對模型進行預訓練,數據科學家可以對這些經過訓練的多用途 Transformer 模型應用遷移學習,針對其所在領域的特定問題達成突破性解決方案。

  • BERT 模型
    https://arxiv.org/abs/1810.04805

SAP 的 Concur Labs (www.concurlabs.com),我們希望利用 BERT 來解決差旅與費用領域中出現的一些新問題。我們希望能夠簡化 BERT 推理。遺憾的是,我們曾嘗試的解決方案都不太理想。

通過與 Google/TensorFlow 團隊合作,採用其最新的開發成果,我們最終達成了目標:一致、簡單且非常快速的 BERT 模型推理。利用他們所提議的實施方案,我們能夠在幾毫秒內完成從原始文本到分類的預測。讓我們來看一下各種 TensorFlow 庫和組件如何助力我們達成這一里程碑。

本文將為您簡單介紹如何通過 TensorFlow 的生態系統實現可擴展、快速且高效的 BERT 部署。如果您有興趣深入瞭解其實現過程,請查看本文的第二部分 (暫未發佈),瞭解有關實現步驟的詳細信息。如果想嘗試進行演示部署,請查看 Concur Labs 的演示頁面 (bert.concurlabs.com),其中有我們情感分類項目的相關展示。

關於 Serving 的一則注意事項

本文中討論的方法支持開發人員利用 TensorFlow Extended (TFX) v0.21 或更高版本來訓練 TensorFlow 模型。但是 TensorFlow Serving (v2.1) 的當前發行版中尚不包含對訓練後模型所含的 tf.text 算子的支持,Nightly docker 發行版和 v2.2 發行版中將包含此類支持。

想要直接查看代碼?

如果想轉至完整示例,請查看 Colab 筆記本,其中有生成可部署 BERT 模型的完整 TensorFlow Extended (TFX) 流水線的相關展示,且模型計算圖中還包含預處理步驟。

  • Colab 筆記本https://colab.sandbox.google.com/github/tensorflow/workshops/blob/master/blog/TFX_Pipeline_for_Bert_Preprocessing.ipynb

BERT 部署的現狀

最近,Transformer 模型的研究進展十分迅速。但很遺憾,將模型用於生產的過程十分複雜,結果也不盡如人意。理想情況下,我們會將原始文本發送到服務器,但 BERT 模型需要先對輸入文本進行預處理,然後我們才能得到實際模型的預測。一些現有解決方案已通過在客戶端對文本進行預處理解決這一問題,還有其他一些解決方案通過在服務器端執行中間步驟來處理輸入數據。這兩種做法都不太合適,因為需要額外的部署協調(如客戶端/服務器切換期間),或者會降低推理的效率(如由於中間轉換步驟需要複雜的預測批處理能力)。

用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

圖 1:當前 BERT 部署

最理想的部署是怎麼樣的?

就部署模型來說,越簡單越好。我們希望部署Transformer 模型,並將預處理作為模型計算圖的一部分。因為預處理集成到模型計算圖中,我們便可只將單個模型部署到模型服務器中,除去任何其他部署依賴關係(客戶端或中間處理),然後充分發揮模型服務器的優勢(如批處理預測請求以最充分地利用我們的推理硬件)。

通過 TensorFlow 生態系統部署 BERT

TensorFlow 是一款效率極高的框架,它不僅是機器學習框架,還提供包含各類支持包和工具在內的廣泛生態系統。對我們來說很有用的一款工具是 TensorFlow Serving。這款工具可提供簡單、一致且可擴展的模型部署

  • TensorFlow Serving
    https://tensorflow.google.cn/tfx/guide/serving
  • 可擴展的模型部署
    https://tensorflow.google.cn/tfx/serving/serving_kubernetes

我們密切關注的另一個生態系統項目是

TensorFlow Transform。藉助這款工具,我們可以計算圖方式來構建模型預處理步驟,這樣我們就能將其與真實的深度學習模型一起導出。

  • TensorFlow Transform
    https://tensorflow.google.cn/tfx/guide/tft

TensorFlow Transform 要求所有預處理步驟均表示為 TensorFlow 算子。這就是我們最近開發的TensorFlow Text 極為有幫助的原因。RaggedTensors 的實現不僅開啟新的實現,並且該庫還提供實施自然語言預處理步驟所需的功能。

  • RaggedTensors
    https://tensorflow.google.cn/guide/ragged_tensor

TensorFlowWorld 2019 中提供的 TensorFlow Text 的一項新功能就是對 BERT Tokenizer 的完全實施。正因如此,我們才能夠通過幾行 TensorFlow 代碼來表示我們的預處理步驟。我們還利用另一款 TensorFlow 工具實現了我們對於一致的模型流水線和部署的目標:TensorFlow Extended (TFX)。TFX 支持我們通過複製方式表示完整的 ML 流水線,因此有助於我們部署一致的機器學習模型。

  • TensorFlowWorld 2019 (Playlist)
    https://v.youku.com/v_show/id_XNDQyMDUyNzE4OA
  • BERT Tokenizer
    https://github.com/tensorflow/text/blob/master/tensorflow_text/python/ops/bert_tokenizer.py#L121
用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

圖 2:使用 tf.Text 的 TFX 流水線

通過 TensorFlow 算子編寫預處理步驟

理想的模型部署接受原始文本作為模型的輸入,接著會提供模型預測。我們的 BERT 部署之所以如此簡單,關鍵就是將預處理步驟表示為 TensorFlow 算子。BERT 模型要求將原始輸入文本詞條化為 token ID, 輸入掩碼 (input mask), 生成的輸入類型 ID (input type ID)。在 TensorFlow Text 的幫助下,現在我們能夠利用更少的代碼行來完成。在本文的第二部分,我們將討論從原始文本轉換到 BERT 特定數據結構的一些細節,包含添加 BERT 特定 token。

<code>

vocab_file_path

=

load_bert_layer().resolved_object.vocab_file.asset_path

bert_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)

/<code>
用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

圖 3:BERT 分詞器

使用 TensorFlow Transform 及上述代碼,可將預處理計算圖與訓練後的 TensorFlow 模型一起導出。藉助 TensorFlow Serving 的最新更新,我們部署的 BERT 模型現在可以接受原始文本作為輸入。瞧!沒有任何其他依賴關係。

使用 TensorFlow Transform 為我們帶來一些切切實實的好處。一方面,我們可以有序地劃分數據預處理和模型架構工作之間的職責。另一方面,我們能夠輕鬆地調試、測試並生成預處理輸出的數據統計信息。Transform 組件將輸出轉換後的 TFRecords 形式的訓練集,可供輕鬆檢查。“調試”Transform 輸出的過程中,我們發現幾個小問題,這些問題不會造成模型訓練失敗,但可能會影響其性能(如 [SEP] token 中出現偏移)。從技術上來講,此處不需要 TensorFlow Transform。由於每個示例預處理均獨立於完整的語料庫進行,我們可輕鬆地直接將其構建到模型計算圖中。但我們發現以這種方式構建和調試流水線更加輕鬆。

用 TensorFlow Extended 實現可擴展、快速且高效的 BERT 部署!

圖 4:BERT 層

如果有興趣深入瞭解實施過程,我們建議您閱讀文章的第二部分 (暫未發佈),其中有對實施過程的深入闡述。

何為理想部署?

簡化的開發

利用各種 TensorFlow 工具,我們能夠以簡明扼要的方式部署 BERT 模型。將預處理步驟整合到模型計算圖中,可降低訓練和推理數據之間脫節的風險。部署的模型無需任何其他客戶端或服務器依賴關係,從而進一步降低模型發生錯誤的風險。我們可以通過 TensorFlow Serving 以一致的方式來部署 BERT 模型,同時可利用像批量推理一類的模型優化。

推理性能

我們最初的性能測試讓人充滿希望。對包含預處理步驟的演示 BERT 模型計算圖進行推理,且模型的每次預測平均耗時約為 15.5 毫秒(基於單個 V100 GPU、最多 128 個 token、gRPC 請求、針對 GPU 的非優化 TensorFlow Serving 構建版本及 Uncased Base BERT 模型測量得出)。這和以前在客戶端使用 BERT 詞條化的部署以及使用 TensorFlow Serving 託管的分類模型的平均推斷時間大致相同。當然,您的機器及型號不同,得到的結果也會不一樣。

更多信息

如果有興趣深入瞭解實現過程,我們建議您閱讀文章的第二部分。如果想要深入瞭解代碼,請查看 Colab 筆記本,其中包含使用預訓練 BERT 模型實現情感分類模型的示例。如果想嘗試進行演示部署,請查看 Concur Labs 的演示頁面,其中有我們情感分類項目的相關展示。

  • Colab
    https://colab.sandbox.google.com/github/tensorflow/workshops/blob/master/blog/TFX_Pipeline_for_Bert_Preprocessing.ipynb
  • Concur Labs 的演示頁面
    https://bert.concurlabs.com/

如果對 TensorFlow Extended (TFX) 和 TensorFlow Transform 的內部工作原理感興趣,請仔細研讀 TFX 用戶指南,並查看即將出版的 O’Reilly 刊發文章《使用 TensorFlow 構建機器學習流水線及自動化模型生命週期》(Building Machine Learning Pipelines, Automating Model Life Cycles With TensorFlow),已在網上預先發布。

  • TFX 用戶指南
    https://tensorflow.google.cn/tfx/guide
  • 使用 TensorFlow 構建機器學習流水線及自動化模型生命週期

    http://www.buildingmlpipelines.com

要了解有關 TFX 的更多信息,請查看官網 (tensorflow.google.com),加入 TFX 討論組,仔細研讀公眾號中的其他文章。

  • TFX 討論組
    https://groups.google.com/a/tensorflow.org/forum/#!forum/tfx

致謝

本項目的順利開展離不開 Catherine Nelson、Richard Puckett、Jessica Park、Robert Reed 和 Concur Labs 團隊的大力支持。同樣也要感謝 Robby Neale、Robert Crowe、Irene Giannoumis、Terry Huang、Zohar Yahav、Konstantinos Katsiapis、Arno Eigenwillig 和 TensorFlow 團隊的其他成員,感謝他們參與討論項目的實施細節,並提供 TensorFlow 庫的更新。還要特別感謝來自 Talenpair 的 Cole Howard,他總是能在自然語言處理相關的討論中提出啟發性的觀點。

—完—

關注清華-青島數據科學研究院官方微信公眾平臺“ AI數據派 ”及姊妹號“ 數據派THU ”獲取更多講座福利及優質內容。


分享到:


相關文章: