TFX 最新博文:如何使用 TensorFlow 生態系統實現快速高效的 BERT...

2020-12-09 雷鋒網

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

雷鋒網雷鋒網雷鋒網

相關焦點

  • 玩轉TensorFlow?你需要知道這30功能
    如果你關心如何使模型保持最新並監控它們,那麼你可以了解一下這個產品、看看它的論文。地址是:tensorflow.org/tfx/?hl=zh-cnhttps://www.tensorflow.org/tfx/data_validation/?hl=zh-cn
  • 是什麼讓BERT與眾不同?如何使用BERT?
    此次發布的版本中,世界上任何人都可以在一個雲 TPU 上花費大約 30 分鐘,或使用單個 GPU 在幾個小時內訓練他們自己最先進的問答系統(或各種其他模型)。該版本包括在 TensorFlow 之上構建的原始碼和許多預先訓練的語言表示模型。在我們的相關論文中,展示了包括斯坦福問答數據集(SQUAD v1.1)在內 11 個 NLP 任務的最新結果。 是什麼讓 BERT 與眾不同?
  • kubeflow系列(三):模型即服務,關於tensorflow serving的使用
    模型即服務(Model as a service)作為算法模型最優雅的價值變現,也是最佳的tf算法部署實踐,Tensorflow Serving 作為Tensorflow官方的模型部署方案,也是kubeflow默認的一種tensorflow部署形式,本文介紹如何用 Tensorflow Serving 部署算法模型。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    TensorFlow Serving 是應用於機器學習模型的靈活的高性能服務系統,而 NVIDIA TensorRT 則是一個用以實現高性能深度學習推理的平臺,將二者相結合後,用戶可以輕鬆地實現最佳性能的 GPU 推理。
  • NLP在TensorFlow 2.x中的最佳實戰
    其實我們自己也可以實現這個功能,這就要說到TensorFlow的字符串類型和相關的各種算子。,我們就需要使用tf.lookup.StaticHashTablekeys_tensor = tf.constant(['你', '好', '啊'])vals_tensor
  • 什麼是TensorFlow,TensorFlow教程
    閱讀本文以了解更多關於TensorFlow的知識,並了解如何在項目中使用它。TensorFlow教程目的:在今天的TensorFlow教程中,我們將學習什麼是TensorFlow,它在哪裡使用,它的不同特性,TensorFlow應用程式,最新版本及其優缺點,以及如何在項目中使用它。
  • 深度解讀TensorFlow,了解它的最新發展!
    以下是TensorFlow的生態系統:  TensorFlow生態系統Tensorboard是tensorflow內置的一個可視化工具,它通過將tensorflow程序輸出的日誌文件的信息可視化,使得tensorflow程序的理解、調試和優化更加簡單高效。Tensorboard的可視化依賴於tensorflow程序運行輸出的日誌文件,因而tensorboard和tensorflow程序在不同的進程中運行。
  • tensorflow極速入門
    首先是一些基礎概念,包括計算圖,graph 與 session,基礎數據結構,Variable,placeholder 與 feed_dict 以及使用它們時需要注意的點。最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、 tensorflow是什麼?
  • 模型秒變API只需一行代碼,支持TensorFlow等框架
    這一工具無疑能夠幫助開發者在實際的生產應用中快速部署模型。項目地址:https://github.com/cortexlabs/cortex項目特點和原理該項目名為 Cortex,是一個命令行工具。/examples/tensorflow/image-classifier基於 PyTorch 和 DistilGPT2 進行文本生成:https://github.com/cortexlabs/cortex/tree/0.10/examples/pytorch/text-generator基於 XGBoost / ONNX 進行虹膜分類:https://github.com/cortexlabs/
  • 如何提升Tensorflow服務性能
    首先,從Tensorflow Docker hub中提取最新的服務鏡像:docker pull tensorflow/serving:latest出於本文的目的,所有容器都在4核15GB Ubuntu 16.04主機上運行。
  • 最新 Tensorflow 2.3 極簡安裝,五分鐘搞定
    2020年8月初,tensorflow 2.3版本發布,Tensorflow的安裝一直是困擾初學者的一個坎,下面我們來看一下如何用五分鐘安裝最新版本的Tensorflow 2.3 。第一步,要檢查和搭建環境。
  • 如何在AMD的GPU上運行TensorFlow?
    ROCm 即 Radeon 開放生態系統 (Radeon Open Ecosystem),是我們在 Linux 上進行 GPU 計算的開源軟體基礎。而 TensorFlow 實現則使用了 MIOpen,這是一個適用於深度學習的高度優化 GPU 例程庫。 AMD 提供了一個預構建的 whl 軟體包,安裝過程很簡單,類似於安裝 Linux 通用 TensorFlow。
  • 谷歌BERT 在環信 NLP 中的應用
    模型使用  通過調研,主要有兩種方式:  Java JNI:基於我們的 GPU 編譯[1]一個合適的 libtensorflow 和libtensorflow_jni_gpu(如果你的配置和官方一致就不需要自己編譯 了,自己編譯太多坑,這裡有一份經過驗證的編譯環境配置[2])打成 jar 包並加入到工程依賴,使用 TensorFlow 提供的 Java
  • 令人困惑的TensorFlow!
    我是在 2017 年夏天加入該項目的,儘管已經擁有了豐富的編程經驗,並且對機器學習的理解也很深刻,但此前我從未使用過 TensorFlow。當時我覺得憑我的能力應該很快就能上手。但讓我沒想到的是,學習曲線相當的陡峭,甚至在加入該項目幾個月後,我還偶爾對如何使用 TensorFlow 代碼來實現想法感到困惑。我把這篇博文當作瓶中信寫給過去的自己:一篇我希望在學習之初能被給予的入門介紹。
  • 小白,用bert進行字符類數據斷言,效果怎樣
    背景接口返回數據因業務實際需求變動時,我們要花較多時間去修改檢測點的基準數據,當業務前期變動返回數據頻繁時,很讓人頭疼;如果檢測點的基準數據與接口返回數據只是語言描述上存在細微差異,但是語義還是很大程度接近時,是否可以利用文本相似度來對結果進行評估,從而減少頻繁修改檢測點的基準數據以前嘗試過用replace方法將類似說法進行統一化處理(維護成本高、如何評估類似說法存在一定風險
  • TensorFlow 2.0姿態估計快速入門
    這是有關如何在Linux上安裝、設置和測試 OpenPose的Tensorflow 2.0實現的快速入門教程。要進行測試請安裝Anaconda / Miniconda(Miciconda3)。步驟1:創建一個新的虛擬環境conda create — name AIMachine步驟2:激活您的虛擬環境conda activate AIMachine步驟3:安裝Pythonconda install python==3.7.6步驟4:安裝最新版本的Tensorflowconda
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    她在 Insight 工作的時候,在安卓系統上用 TensorFlow 部署了一個 WaveNet 模型。本文詳細介紹了部署和實現過程。對於個人和公司來說,存在許多狀況是更希望在本地設備上做深度學習推斷的:想像一下當你在旅行途中沒有可靠的網際網路連結時,或是要處理傳輸數據到雲服務的隱私問題和延遲問題時。
  • TensorFlow 2.0——開發者測試版來了!
    因此,谷歌TF團隊不保證其穩定性,也知道這一版還欠缺一些功能 (例如,僅支持某些分發機制,特別是TPU支持還不完整),此外TensorFlow生態系統中相關的項目 (例如TFHub) 也還沒有更新到能夠和TensorFlow 2.0一起使用。 Wicke表示,他們將在 TF2.0-alpha 版本發布之前解決這些問題。
  • 使用Amazon SageMaker 運行基於 TensorFlow 的中文命名實體識別
    FROM tensorflow/tensorflow:1.15.2-gpu-py3ENV PATH="/opt/ml/code:${PATH}"COPY ./ /opt/ml/codeWORKDIR /opt/ml/code這裡我們需要了解Amazon SageMaker對於容器內目錄結構的要求,具體如下圖所示,訓練所需代碼放到/
  • Fast-SCNN的解釋以及使用Tensorflow 2.0的實現
    首先,我們安裝Tensorflow 2.0。我們可以簡單地使用谷歌Colab並開始我們的實現。你可以簡單地使用以下命令安裝:!pip install tensorflow-gpu==2.0.0這裡,&39;說明我的谷歌Colab筆記本使用GPU,而在你的情況下,如果你不喜歡使用它,你可以簡單地刪除&39;,然後Tensorflow安裝將利用系統的cpu。