在您的裝置上享受 Phi-3 與 ONNX Runtime 的強大功能

社群文章 釋出於 2024 年 5 月 22 日

Emma Ning (微軟), Scott McKay (微軟), Guenther Schmuelling (微軟), Joshua Lochner (Hugging Face)

Phi-3 模型是微軟開發的一系列開放式 AI 模型,它們是目前功能最強大、成本效益最高的小型語言模型 (SLM),在各種語言、推理、編碼和數學基準測試中,其效能均優於同等規模和更高規模的模型。

Phi-3 系列包含不同大小的變體。Phi-3-mini 是一個擁有 38 億引數、透過 3.3 萬億個 token 訓練而成的語言模型,其效能可與 Mixtral 8x7B 和 GPT-3.5 等模型媲美。值得注意的是,它足夠小巧,可以在客戶端裝置上部署。在客戶端裝置上離線執行 Phi-3-mini 為連線受限或隱私敏感的場景下的資訊檢索提供了眾多機會。

客戶端裝置的計算、記憶體和功耗都受到高度限制。為了將大型語言模型 (LLM) 引入這些裝置,壓縮和最佳化模型與輕量級執行時至關重要。在這篇部落格中,我們將展示如何利用 ONNX Runtime 在手機和瀏覽器中執行 Phi-3-mini。

獲取壓縮和最佳化的 Phi-3-mini 模型

量化涉及降低神經網路權重和啟用的精度。這種技術可以顯著減小模型大小和推理時間,但會以一定程度的精度下降為代價。圖融合是另一種實現高效能的有效方法,透過最大限度地減少基本計算並充分利用執行時內的核心最佳化和硬體加速。

我們對網頁和移動模型都應用了 4 位塊量化。由於平臺和實現特性,這兩個版本在圖融合和資料型別上略有不同。例如,網頁模型使用多頭注意力融合,而移動模型使用 組查詢注意力 融合。此外,由於 JavaScript 不支援 float16,網頁模型的輸出 logits 仍為 float32。與原始 PyTorch 版本相比,針對移動和網頁最佳化的模型明顯更小,尺寸減小了 2.5 倍以上。

image/png

我們將所有這些提前量化和最佳化整合到 Olive 中,這是一個硬體感知的模型最佳化工具,允許使用者輕鬆生成針對各種硬體目標量身定製的壓縮和最佳化模型。這是一個 Phi-3 最佳化的 Olive 示例。同時,我們已將預最佳化的 移動模型網頁模型 上傳到 Hugging Face。歡迎直接下載。

在移動裝置和網頁上使用 ONNX Runtime 執行 Phi-3

ONNX Runtime 是一個跨平臺的推理引擎,用於開放標準 ONNX 格式的機器學習模型。它支援廣泛的硬體平臺,並提供各種最佳化和加速技術,以提高效能和效率。在這裡,我們重點關注其用於裝置端推理的兩種解決方案:ONNX Runtime Mobile 和 ONNX Runtime Web。這兩種解決方案還允許客戶自定義構建,以根據模型定製,從而減小二進位制大小和執行時記憶體佔用。

Phi-3 與 ONNX Runtime Mobile

ONNX Runtime Mobile 提供了一個輕量級推理引擎,可將 ONNX 模型輕鬆整合到 Android、iOS、React Native 和 MAUI/Xamarin 上的移動應用程式中。它支援各種針對移動裝置量身定製的硬體加速器,例如所有移動平臺上都可用的預設 CPU 加速器和 XNNPACK 加速器,以及特定於平臺的加速器,如 iOS 的 CoreML 和 Android 的 NNAPI 和 QNN。為了便於整合到不同的移動開發環境,它還提供了豐富的語言繫結,包括 C、C++、Java、Objective-C 和 C#。

我們利用 ONNX Runtime Mobile 預設的 CPU 加速器在手機上推斷 4 位量化的 Phi-3 模型。在 ONNX Runtime 內部,已經開發了最佳化的 ARM64 核心以加速 INT4 量化矩陣乘法。此外,它還可以適應輸入端的量化 8 位整數,進一步提高 INT4 量化矩陣乘法的效能,同時保持可接受的精度損失。此外,ONNX Runtime 還支援分組查詢注意力,這是一種專門設計用於高效執行注意力同時允許過去和現在的 KV 共享相同緩衝區的運算子。這些最佳化共同實現了 ONNX Runtime 在移動裝置上的高效能 CPU 執行。在這裡,我們展示了 Phi-3-mini 在三星 Galaxy S21 上生成 token 的效能。在提示長度和要生成的 token 較短的場景中,ONNX Runtime Mobile 優於 llama.cpp,在其他情況下則保持可比性。

image/png

注意:這些效能基準測試是在三星 Galaxy S21 上使用四個執行緒執行的。

這是 一個 E2E 示例,用於在 Android 上使用 ONNX Runtime Mobile 執行 Phi-3-mini。它利用 ONNX Runtime Generate() API,該 API 可以加速 ONNX 模型生成式 AI 迴圈的推理過程。這包括使用 ONNX Runtime 進行推理、處理 logits、進行搜尋和取樣以及管理 KV 快取。由於 ONNX Runtime Generate() API 的官方移動繫結仍在進行中,因此該示例利用了 C API。它透過建立 JNI 包裝器來實現生成式 API 的 C API 和 Java 級別呼叫之間的通訊。請繼續關注 ONNX Runtime Generate() API 官方移動繫結的更新。有關 ONNX Runtime Generate() API 的更多詳細資訊,請參閱文件

Phi-3 與 ONNX Runtime Web

ONNX Runtime Web 是一個 JavaScript 庫,可以在瀏覽器和其他 Web 平臺中執行 ONNX 模型。對於 CPU 推理,ORT Web 使用 Emscripten 將原生 ONNX Runtime CPU 引擎編譯為 WASM 後端。此外,ONNX Runtime Web 支援 WebGPU 和 WebNN 等多個後端,以進一步利用底層硬體加速來加速推理。ONNX Runtime Web 可以輕鬆整合到 Web 應用程式和框架中,例如 ReactJS 和漸進式 Web 應用程式。

由於 Phi3 的龐大尺寸和計算需求,在瀏覽器中使用 CPU 執行它效率不高。WebGPU 引入了一個現代 Web API,允許開發人員利用 GPU 算力進行高效能計算,這在基於 CPU 的瀏覽器內機器學習不足的場景中提供了顯著優勢。微軟和英特爾一直在合作完善 ONNX Runtime Web 中的 WebGPU 功能。在 ONNX Runtime 1.17 版本中,我們引入了 WebGPU 後端,現在又添加了 4 位塊量化支援量化的 Phi-3 Web 模型。我們還實現了融合的 WebGPU 運算子,例如多頭注意力和旋轉嵌入,這些運算子簡化了計算圖並顯著提高了效能。為了在執行具有動態形狀的 Phi-3 時減少記憶體使用,我們應用了一種分桶空閒列表方法,並針對 80 個流行模型進行了調整,以平衡效能和記憶體效率。大型語言模型受益於在生成過程中透過使用鍵值快取快取先前 token 的計算結果來儲存狀態。為了支援這一點,我們引入了在模型輸入和輸出中傳遞 GPU 緩衝區引用的能力,從而無需跨裝置複製並提高了整體效能。透過所有這些最佳化,ONNX Runtime Web 能夠在 Nvidia RTX 4090 上以每秒超過 70 個 token 的速度執行 Phi-3-mini!不要錯過 這個 E2E 示例,它展示了 ONNX Runtime Web 在瀏覽器中執行 Phi-3-mini 的情況。

ONNX Runtime Web 還支援 Transformers.js,這是一個用於直接在瀏覽器中執行 Hugging Face Transformers 的庫。該庫是開發人員在瀏覽器中執行最先進的預訓練模型的流行選擇,只需 3 行程式碼即可。利用 ONNX Runtime Web 和 WebAssembly 後端,Transformers.js 已支援自然語言處理、視覺、音訊、表格和多模態領域的 眾多模型。現在,Hugging Face 和 Microsoft 正在合作,透過 ONNX Runtime Web 在 Transformers.js 中啟用 WebGPU 支援,以進一步加速效能,團隊在取得進展時將釋出新的演示。Phi-3-mini 的最新演示為使用者提供了私密(且強大)的聊天機器人體驗。您可以在 Hugging Face Spaces 上試用。

image/gif

在您的裝置上享受 Phi-3

您是否對在裝置上擁有一個私密且強大的聊天機器人感到興奮?無需擔心資料隱私或網際網路連線,即可進行無縫通訊。您可以下載預最佳化的 Phi-3 模型,或使用 Olive 最佳化您的定製版本,然後使用 ONNX Runtime 在手機或直接在瀏覽器中部署最佳化後的模型!快來試試吧!歡迎在 ONNX Runtime Github 上分享您的反饋!

社群

此評論已被隱藏(標記為無關話題)

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.