解決超級模型部署難題

AIBigbull2050發表於2020-02-27

# 解決超級模型部署難題 # 







雖說目前尚處起步階段,但還是為解決問題提供了可行的思路。


1. 縮小模型

如果模型太大,為什麼不壓縮它們?要做到這一點,一種方法是透過“知識蒸餾”(knowledge distillation)。這一想法是,一個小型模型可以透過學習來模仿大型模型(即父模型)的效能。

換句話說,訓練 GPT-2 需要向其饋入高達 40GB 的文字,這相當於大約 27118520 頁的文字檔案。然而,訓練一個蒸餾過的 GPT-2 模型只需向其饋入 GPT-2 的輸出即可。

著名的 Transformer NLP 庫背後的 HuggingFace 公司就是這樣做的,建立了 DistilGPT2 。雖然與完整的 GPT-2 模型相比,DistilGPT2 在一些質量基準上的得分要低一些,但它比完整的 GPT-2 模型小了 33%,速度快了一倍。

速度能提高兩倍,可不是一件小事。對自動駕駛汽車來說,安全剎車和輕微碰撞之間的區別就在於此。對於一個會話智慧體來說,這就是自然談話和令人惱火的機器人電話之間的區別。



2,將模型部署到雲端


就算用了知識蒸餾,模型仍然可能很龐大。超過 25GB 的模型(NVIDIA 的 Megatron 是 GPT-2 的 5.6 倍)儘管縮小了 33%,但仍然很龐大。

在這種規模下,我們用來消費機器學習生成內容的裝置,我們的手機、電視,甚至電腦,都無法承載這些模型,它們根本就不合適。

一種解決方案是將模型作為微服務部署到雲端,我們的裝置就可以根據需要進行查詢。這稱為“實時推理”(Realtime inference),是在生產中部署大型模型的標準方法。

然而,在雲端部署也有自身的問題,尤其是在規模方面。舉個例子,我們可以看看 AI Dungeon,這是一款流行的基於 GPT-2 的冒險遊戲。

由於 GPT-2 的大小和算力需求所限,AI Dungeon 只能為單個部署模型中的幾個使用者提供服務。為了應對流量的增加,AI Dungeon 需要具備自動擴充套件的能力。

水平擴充套件 GPT-2 部署是一件非常棘手的事。它需要:

確保每個部署都是相同的。例如,使用 Docker 對模型進行容器化,並使用 Kubernetes 對容器進行編排。

自動擴充套件部署。例如,透過配置雲供應商的自動擴充套件程式,根據流量自動向上或向下旋轉例項。
最佳化資源。這意味著需要在不犧牲效能的情況下,找到並執行最便宜的例項型別和資源分配。



3. 加速硬體服務模式


最後一項使大型模型變得更容易的努力,與模型本身並沒有任何關係。相反,它必須與改進硬體有關。

更大的模型在更好的硬體上,效能更優。事實上,GPU 對模型服務很重要,為 GPT-2 提供自動更正低延遲服務的唯一方法是使用 GPU:

如果你在 CPU 上執行,每次請求耗時 925 毫秒。如果使用 GPU,在每次請求 199 毫秒的情況下,可以在大約 100 毫秒的空間時間內預測訊息的其餘部分,當你考慮到他們的瀏覽器仍然需要呈現你的預測時,這就非常有用了。

然而,隨著模型變得越來越大,我們需要更多的處理能力。

解決該問題的一些努力涉及構建全新的硬體。例如,谷歌釋出了 TPU,這是專門為與 TensorFlow 介面而設計的 ASIC,最新的 TPU 打破了模型服務基準的可擴充套件性和效能的記錄。

其他努力還包括加速和最佳化現有硬體。NVIDIA 釋出了 TensorRT,這是一個用於最佳化 NVIDIA GPU 在推理服務中利用率的 SDK。NVIDIA 已經證明,與在 GPU 上使用 TensorRT,比只使用 CPU 推理相比,效能提高了 40 倍。






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2677436/,如需轉載,請註明出處,否則將追究法律責任。

相關文章