語言模型秒變API,一文了解如何部署DistilGPT-2
- 2019 年 12 月 5 日
- 筆記
選自towardsdatascience
作者:Celeb Kaiser
機器之心編譯
參與:高璇、Geek AI
模型又大又複雜,部署和使用就成了難題。本文是一篇教程,告訴你如何利用HuggingFace推出的DistilGPT-2實現模型部署和使用的願望。
在過去一年的大部分時間裡,OpenAI 的 GPT-2 一直是機器學習領域中最熱門的話題之一,這是有原因的。這個文本生成模型最初被認為「太危險」而無法完全發布,它能夠產生不可思議的輸出。如果你還沒有看過任何示例,我推薦你參閱 OpenAI 的官方示例,真的令人難以置信:

由於在機器學習社區的部分人對 GPT-2 的狂熱,有大量工具可用來在不同的用例中實現 GPT-2:
- 想上手GPT-2 嗎?OpenAI已發布了預訓練的模型:https://github.com/openai/gpt-2。
- 想用不同的文本訓練GPT-2嗎?可以使用 Max Woolf 的 gpt-2-simple:https://github.com/minimaxir/gpt-2-simple。
- 想要更快的壓縮版 GPT-2 嗎?可以使用 Hugging Face 的 DistilGPT-2:https://github.com/huggingface/transformers。
使用這些工具,在本地運行 GPT-2 就變得相當簡單。但是,在生產中部署 GPT-2 仍然很困難。 為了使用 GPT-2 構建真實的軟體——從聊天機器人到帶有特定 GIF 動圖的卡片生成器,你需要在生產中部署模型。最常見的方法是將模型部署為可通過應用程式查詢的 Web 應用程式介面(API)。 在本教程中,我們將在 AWS 上將 Hugging Face 的 DistilGPT-2 部署為 Web API。我們的 API 將建立在可自動縮放,監控,更新和記錄日誌的基礎上。 讓我們開始吧。
載入 Hugging Face 的 DistilGPT-2
首先,我們將創建一個 Python 腳本來載入我們的模型並處理響應。在本教程中,我們將改腳本稱為「predictor.py」。 如你所見,Hugging Face 的 Transformers 庫可以使僅用幾行程式碼就能載入 DistilGPT-2:

現在,你有了一個經過初始化的 DistilGPT-2 模型。另外,Hugging Face 的 Transformers 庫使得初始化幾乎所有目前最優的 NLP 模型(不僅是DistilGPT-2)變得很容易。 在「predictor.py」腳本中,還將需要一個函數來提供預測,我們將該函數稱為「predict()」。當傳進輸入時,「predict()」應對輸入進行分詞,在模型中運行它,解碼輸出,並使用生成的文本進行響應。在這種情況下,我們的「predict()」函數很簡單,可以只需 6 行程式碼就能實現:

這段程式碼中調用了一些函數,我們對此不做詳細介紹,但你可以通過下面的鏈接查看/複製完整的「predictor.py」文件:
https://github.com/cortexlabs/cortex/blob/master/examples/pytorch/text-generator/predictor.py 通過編寫與預測相關的程式碼,我們就可以部署模型。
將 DistilGPT-2 部署為API
這通常是機器學習基礎架構中的一個主要難點。負責地部署模型意味著實施自動縮放,進行結構化更新以使它們不會破壞 API,監控模型的性能以及處理日誌記錄。 除了手動完成上述所有操作外,我們將使用 Cortex 將其抽象化。你可以點擊鏈接通過下面的鏈接閱讀有關 Cortex 的更多資訊:https://github.com/cortexlabs/cortex,但從本質上講,它是一個工具,使用簡單的配置文件並在 AWS 上自動執行模型部署。 首先,安裝Cortex(https://www.cortex.dev/install)。一旦安裝了 Cortex,你就可以創建部署配置文件,該文件應該被命名為「cortex.yaml」。該文件可能是這樣的:

保存好配置後,可以通過命令行簡單運行「cortex deploy」。這將從「cortex.yaml」中獲取聲明式配置,並在集群上創建它:
$ cortex deploydeployment started
實質上,Cortex 包含了我們的實現,使其可以使用 Flask 進行服務,使用具有負載均衡器的公開終端,並在 Kubernetes 上協調工作負載。 現在,我們可以查詢我們的 API。
實時查詢你的 DistilGPT-2 API
在任何時候,你都可以通過運行「cortex get generator」來檢索 API 端點的統一資源定位符(URL)。有了終端後,你可以使用curl 來測試部署:
$ cortex get generatorurl: http://***.amazonaws.com/text/generator$ curl http://***.amazonaws.com/text/generator -X POST -H 「Content-Type: application/json」 -d 『{「text」: 「Machine learning (ML) is the scientific study of algorithms and statistical models that computer systems use to perform a specific task without using explicit instructions, relying on patterns and inference instead. It is seen as a subset of artificial intelligence.」}』"Machine learning (ML) is the scientific study of algorithms and statistical models that computer systems use to perform a specific task without using explicit instructions, relying on patterns and inference instead. It is seen as a subset of artificial intelligence.nnnnThe iFrame top was inspired by several prominent advances in machine learning u2013 vision, machine learning, machine learning and machine learning u2013 that were widely accepted. One well-known example was intuition u2013 used by many computer scientists to predict which"
現在,你可以使用任何能夠查詢終端的服務來訪問端點,就像使用其它 Web API 一樣。 瞧!你已將 DistilGPT-2 部署為可擴展的 Web API,而所需的只是一個簡單的配置文件。
進階操作
有許多方法可以將 DistilGPT-2 支援的 API 實現到軟體項目中。想要構建一個自動完成功能嗎?想要使用電子郵件回復的 Chrome擴展程式嗎?或者構建更實用的——你的網站的聊天機器人? 你甚至可以嘗試修改其它經過預訓練的模型,這要歸功於 Hugging Face 通過非常簡單的方式使用 Transformers 實現了它們。使用 Cortex,你就可以按照上述步驟來部署它們。
參考鏈接:
https://towardsdatascience.com/deploy-a-text-generating-api-with-hugging-faces-distilgpt-2-9791b9f356f9