案例研究:使用 Hugging Face Infinity 和現代 CPU 實現毫秒級延遲
我們的開源最佳化庫,🤗 Optimum Intel 和 🤗 Optimum ONNX Runtime,可實現訓練和執行推理模型的最高效率。
Hugging Face
,一項商業服務,Hugging Face 專家將直接與您的團隊合作,加速您的機器學習路線圖和模型。
引言
遷移學習透過在自然語言處理 (NLP) 到音訊和計算機視覺任務中達到新的準確性水平,改變了機器學習。在 Hugging Face,我們努力使這些新的複雜模型和大型檢查點儘可能易於訪問和使用。但是,儘管研究人員和資料科學家已經轉向了 Transformers 的新世界,但很少有公司能夠大規模部署這些大型、複雜的模型用於生產。
主要瓶頸是預測延遲,這會使大型部署的執行成本高昂,並使即時用例不切實際。解決這個問題對任何機器學習工程團隊來說都是一個困難的工程挑戰,並且需要使用先進的技術來最佳化模型,直至硬體級別。
透過 Hugging Face Infinity,我們提供了一個容器化解決方案,可以輕鬆部署適用於最流行的 Transformer 模型的低延遲、高吞吐量、硬體加速的推理管道。公司可以同時獲得 Transformer 的準確性和大規模部署所需的效率,所有這些都封裝在一個易於使用的包中。在這篇部落格文章中,我們希望分享 Infinity 在最新一代 Intel Xeon CPU 上執行的詳細效能結果,以實現 Transformer 部署的最佳成本、效率和延遲。
什麼是 Hugging Face Infinity
Hugging Face Infinity 是一種容器化解決方案,供客戶在任何基礎設施上部署最先進 Transformer 模型的端到端最佳化推理管道。
Hugging Face Infinity 由 2 個主要服務組成
- Infinity Container 是一種硬體最佳化的推理解決方案,作為 Docker 容器提供。
- Infinity Multiverse 是一種模型最佳化服務,透過它,Hugging Face Transformer 模型針對目標硬體進行最佳化。Infinity Multiverse 與 Infinity Container 相容。
Infinity Container 專為在目標硬體架構上執行而構建,並公開 HTTP /predict 端點以執行推理。
一個 Infinity Container 設計用於服務 1 個模型和 1 個任務。任務對應於 Transformers Pipelines 文件中定義的機器學習任務。截至本文撰寫之時,支援的任務包括特徵提取/文件嵌入、排序、序列分類和令牌分類。
您可以在 hf.co/infinity 上找到有關 Hugging Face Infinity 的更多資訊,如果您有興趣親自測試,可以在 hf.co/infinity-trial 註冊免費試用。
基準測試
推理效能基準測試通常只衡量模型的執行。在這篇部落格文章中,以及在討論 Infinity 的效能時,我們總是衡量包括預處理、預測和後處理在內的端到端管道。在將這些結果與其他延遲測量進行比較時,請記住這一點。
環境
作為基準測試環境,我們將使用 Amazon EC2 C6i 例項,這些是計算最佳化例項,由第三代 Intel Xeon Scalable 處理器提供支援。這些新的基於 Intel 的例項使用 Ice-lake 處理器技術,並支援 Intel AVX-512、Intel Turbo Boost 和 Intel Deep Learning Boost。
除了在機器學習工作負載方面具有卓越效能外,Intel Ice Lake C6i 例項還具有出色的成本效能,是我們建議在 Amazon Web Services 上部署 Infinity 的最佳選擇。要了解更多資訊,請訪問 EC2 C6i 例項頁面。
方法
在對類 BERT 模型進行基準測試時,最常採用兩個指標
- 延遲:模型單次預測所需的時間(預處理、預測、後處理)
- 吞吐量:在固定時間內為一種基準測試配置執行的次數,同時考慮物理 CPU 核心數、序列長度和批大小
這兩個指標將用於在不同設定下對 Hugging Face Infinity 進行基準測試,以瞭解本部落格文章中的優勢和權衡。
結果
為了執行基準測試,我們為 EC2 C6i 例項(Ice-lake)建立了一個 infinity 容器,並使用 Infinity Multiverse 優化了一個用於序列分類的 DistilBERT 模型。
這個針對 Ice-lake 最佳化的 Infinity 容器比現有基於 Cascade-lake 的例項可實現高達 34% 的延遲和吞吐量提升,並且比在 Ice-lake 上執行的普通 Transformer 可實現高達 800% 的延遲和吞吐量提升。
我們建立的基準測試包含 192 種不同的實驗和配置。我們對以下內容進行了實驗:
- 物理 CPU 核心數:1、2、4、8
- 序列長度:8、16、32、64、128、256、384、512
- 批處理大小:1、2、4、8、16、32
在每個實驗中,我們收集以下資料:
- 吞吐量(每秒請求數)
- 延遲(最小值、最大值、平均值、P90、P95、P99)
您可以在此 Google 表格中找到基準測試的完整資料:🤗 Infinity:CPU Ice-Lake 基準測試。
在這篇部落格文章中,我們將重點介紹基準測試的一些結果,包括最佳延遲和吞吐量配置。
除此之外,我們還將在兩個物理核心上部署了我們用於基準測試的 DistilBERT 模型作為 API 端點。您可以測試它並感受一下 Infinity 的效能。下面您將找到如何向託管端點發送請求的 curl
命令。API 返回一個 x-compute-time
HTTP 頭部,其中包含端到端管道的持續時間。
curl --request POST `-i` \
--url https://infinity.huggingface.co/cpu/distilbert-base-uncased-emotion \
--header 'Content-Type: application/json' \
--data '{"inputs":"I like you. I love you"}'
吞吐量
下面您將看到在 2 個物理核心上以批次大小 1 執行 Infinity 與普通 Transformer 的吞吐量比較。
序列長度 | 無限 | 變壓器 | 改進 |
---|---|---|---|
8 | 248 請求/秒 | 49 請求/秒 | +506% |
16 | 212 請求/秒 | 50 請求/秒 | +424% |
32 | 150 請求/秒 | 40 請求/秒 | +375% |
64 | 97 請求/秒 | 28 請求/秒 | +346% |
128 | 55 請求/秒 | 18 請求/秒 | +305% |
256 | 27 請求/秒 | 9 請求/秒 | +300% |
384 | 17 請求/秒 | 5 請求/秒 | +340% |
512 | 12 請求/秒 | 4 請求/秒 | +300% |
延遲
下面是 Hugging Face Infinity 在 2 個物理核心上以批次大小 1 執行的實驗的延遲結果。Infinity 的魯棒性和穩定性令人矚目,p95、p99 或 p100(最大延遲)的偏差極小。這一結果也在基準測試中的其他實驗中得到證實。
結論
在這篇文章中,我們展示了 Hugging Face Infinity 在新型 Intel Ice Lake Xeon CPU 上的表現。我們建立了一個包含 190 多種不同配置的詳細基準測試,分享了在使用 Hugging Face Infinity on CPU 時可以預期的結果,以及最佳化您的 Infinity Container 以獲得最佳延遲和最大化吞吐量的最佳配置。
與普通的 Transformer 相比,Hugging Face Infinity 可以提供高達 800% 的吞吐量提升,並且對於最長 64 個令牌的序列長度,延遲可低至 1-4 毫秒。
Transformer 模型在吞吐量、延遲或兩者兼顧方面的靈活最佳化能力,使企業能夠為相同的工作負載減少基礎設施成本,或者實現以前不可能實現的即時用例。
如果您有興趣試用 Hugging Face Infinity,請在 hf.co/infinity-trial 註冊免費試用。