Swift Transformers 發布:在蘋果設備上運行 On-Device LLMs
已於今日發布
Hugging Face 發布了 swift-transformers、swift-chat、已更新的 exporters、已更新的 transformers-to-coreml Space,以及 Llama 2 7B 和 Falcon 7B 的 Core ML 版本,以在蘋果設備上啟用 on-device LLMs。 The swift-transformers package is an in‑progress Swift library that aims to provide a transformers‑like API for text generation. The swift‑chat app demonstrates how to use it. The exporters Python package and the transformers-to-coreml Space have been updated to convert models such as Llama 2 and Falcon to Core ML. Ready‑to‑use Core ML models, including Llama‑2-7b-chat-coreml and Falcon-7b-instruct, are available on the Hub.
任務概覽
在蘋果設備上運行 LLM 包含將模型轉換為 Core ML、針對速度和記憶體進行優化,以及提供 Swift‑友好的 API 用於詞元化、模型載入和文本生成。 轉換是第一步,但優化和可用的 Swift 介同樣重要。本文將逐一說明這些領域,指出哪些工具已經存在,哪些工作仍需完成。
轉換為 Core ML
將類似 Llama 2 的模型轉換為 Core ML 可以使用 transformers-to-coreml Space、exporters Python 套件,或直接使用 coremltools 完成;在修復 Llama 2 程式碼中的類型不匹配問題後,該過程成功。 建議的做法是先嘗試無程式碼的 transformers-to-coreml Space;如果失敗,則使用 exporters 以獲得更多控制;若仍不行,則回退到 coremltools 以獲得最大靈活性。對於 Llama 2,在解決先前的失敗後,該轉換在所有三種方法上都成功。
重要經驗教訓
如果必須使用 coremltools,請使用最新版本:7.0b1。儘管是測試版,但它很穩定,包含修復,支援 PyTorch 2,並提供進階量化工具。 exporters 在轉換文本生成任務時不再對輸出應用 softmax,因為這對某些生成算法是必要的。 exporters 現在預設使用固定序列長度來處理文本模型。彈性形狀僅在 CPU 上運行,不在 GPU 或 Neural Engine 上運行,因此在 GPU/Neural Engine 執行時需要固定形狀。
優化
Core ML LLMs 的關鍵優化策略包括快取 key‑value 對、使用離散固定形狀取代彈性輸入,以及應用如 6‑bit 調色盤量化或混合位元量化等量化技術。 若不使用快取,模型會在每一步重新計算完整歷史的注意力分數。使用離散形狀可避免彈性輸入僅限於 CPU 的限制,並結合快取後能夠支援更大的上下文大小。量化可減少模型大小和資源使用;6‑bit 調色盤量化和混合位元量化被強調為具有前景的方法。
swift-transformers
swift-transformers 套件提供 Swift 原生的 tokenizers 模組、具 Hub 感知的模型包裝器,以及基本的生成算法(貪婪和 top‑k 抽樣),適用於不斷增長的模型集合。
Tokenizers
詞元化將文本轉換為模型就緒的 ID,並可反向轉換;swift-transformers 目前支援 GPT、Falcon 和 Llama 模型使用的 BPE 詞元器,其程式碼鏡像 Hugging Face tokenizers 庫。 範例使用:
import Tokenizers
func testTokenizer() async throws {
let tokenizer = try await AutoTokenizer.from(pretrained: "pcuenq/Llama-2-7b-chat-coreml
let inputIds = tokenizer("Today she took a train to the West
assert(inputIds == [1, 20628, 1183, 3614, 263, 7945, 304, 278, 3122])
}
Model and Hub wrappers
簡單的 LanguageModel 協議包裝用於文本生成的 Core ML 模型。Hub 模組會在轉換過程中(由 exporters 和 Space 自動添加)使用加入到 Core ML 模型的自訂中繼欄位,從 Hub 下載 tokenizer 和配置檔案。
Generation Algorithms
已實作兩種解碼策略:貪婪解碼(總是選擇機率最高的 token)和 top‑k 抽樣(從機率最高的 k 個 token 中隨機抽樣,溫度控制變異性)。此外,尚在規劃 nucleus sampling 等其他方法。
Supported Models
截至目前,該套件已測試過 Llama 2、Falcon、StarCoder(GPT 變體)以及 GPT 家族,包括 GPT2、distilgpt、GPT‑NeoX 和 GPT‑J。
swift-chat
swift-chat 示範應用展示了如何在 Swift 專案中整合 swift-transformers,從 Hub 載入 Core ML 模型並進行帶有自動中繼資料下載的文本生成。 選擇模型後,應用程式會下載所需的配置檔案,透過 Core ML 編譯模型(並快取結果),然後執行生成。UI 故意保持簡單,目前尚不支援系統提示等功能。
缺失部分 / 未來工作
未來工作將加入編碼器‑解碼器模型支援、Unigram 和 WordPiece 詞元器、額外的生成策略、key‑value 快取,以及用於更大上下文的離散形狀轉換。 團隊歡迎透過 issues、pull request 或對儲存庫的回饋來貢獻。
Conclusion
這些工具為 Swift 開發者提供了一個起點,以將 on-device LLMs 帶入蘋果應用,並且團隊邀請社區貢獻來改進它們。