⚡️探究 iPhone 的 USB 速度對開發體驗的影響:AI 模型需要高速傳輸
從 iPhone 17 這一代起,在設備上執行 AI 模型,已經從可行轉向實用。而開發 AI 應用需要頻繁傳輸幾 GB 的模型,速率瓶頸會是工作流程與開發效率的全新問題。
我之所以會發推文說 iPhone Air 與 17 的 USB 2.0 不夠用、請買支援 USB 3 的 Pro 系列,最主要原因是我留意到開發時安裝大檔案的效率瓶頸。這個需求,目前遇到的開發者很少,但是未來可能會變成一個明顯的開發效率問題。
也就是:在 iOS 上執行 AI 模型,需要放入動輒上百 MB 甚至幾 GB 的檔案。
在 iPhone 上執行 AI 模型不再是玩具
不知道讀者朋友有沒有留意到,iOS app 執行本地 AI 模型的可行性越來越高了。
首先,iPhone 的運算能力持續增加。如果你有關注 iPhone 17 系列的 A19(Pro) 的性能表現測試報告,特別是 GPU 與 AI 運算方面,應該會知道這代 SoC 相較於前代有明顯增長、記憶體也更充足。iPhone 17 Pro 甚至能夠執行 8B 的 LLM。
其次,iOS 26 開始,Apple 提供了 Foundation Models,讓開發者更容易「入門」 AI 應用。可以預見的是,許多開發者會開始接觸 AI 功能,並加入到 app 當中。一旦不滿足於 Apple 原生的方案,就會尋求第三方模型。
第三,MLX 是 Apple 的 Machine Learning 框架。它的發展,讓在 Apple 平台上執行第三方 AI 模型的難度降低。除了 C++ 與 Python,也支援 Swift。我這陣子研究了一下 MLX Swift。只要下載 mlx-swift-examples,裡面就有非常多 AI 應用的範例,包括 LLM、VLM、Chat、Stable Diffusion 等。這些範例可以跑在 Mac,也可以在 iOS 設備上執行。
從 MLX 的 Examples 發現下載模型缺乏效率
這就要說到我發現傳輸速率影響開發效率的問題。
第一次執行的時候,mlx-swift-examples app 會從 Hugging Face 下載開源的 AI 模型回來。這些模型有幾百 MB 起跳,超過幾 GB 也不罕見。下載一個模型往往需要幾分鐘的時間。
如果開發或測試流程需要反覆地刪除 app、重新安裝,就得重新傳輸模型檔案,非常浪費時間。因為 iOS app 有 sandbox,不像 Mac 可以輕鬆備份已下載的模型檔。手動從 Document browser 讀取檔案是個 workaround,但無法自動化。
不久之前, 知名開發者 Mattt 表示,他正在與 Hugging Face 合作,開發一些 Swift Package 與工具,讓開發者更容易在 Swift 使用這些模型。並且在蒐集開發者的意見。你可以看到 mlx-swift-examples 裡面下載模型使用的 Swift Transformers package,Mattt 目前是主要維護者之一。
我發現到從 example apps 下載模型檔非常花時間,對於開發與測試非常不利。所以就建議 Mattt,能否使用 Mac 當成 cache server?而要是有什麼辦法,能夠利用 USB 3 來高速傳輸就更好了。他覺得是很好的建議。
Mattt: That's a great idea! I'm thinking through an overhaul about how models are loaded and managed, so your suggestion comes at the perfect moment.
讀者如果有什麼好點子,也不妨回覆他的推文。
更多 AI 模型應用的例子
在過去,iOS 開發者很少有機會接觸到安裝容量有幾百 MB 的 app。通常只有遊戲,或是大公司沒有詳細規劃依賴與模組的時候,才會有這種可能。所以 USB 2.0 的速度不是什麼問題,甚至許多開發者習慣了使用無線開發。但是在裝置上運行 AI 模型這個需求,將會徹底改變插 USB 線開發的意義。
如果你有找一些能下載 AI 模型的 app 來玩玩看的話,就會發現,下載幾個幾 GB 的模型是很常有的事情。並不是只有 mlx-swift-examples 為了示範才會這樣做。
以下內容留給⟪13報+⟫會員。
閱讀狀態
尚未登入
已在 Patreon 成為⟪13報+⟫會員?請使用同一個 E-mail 登入。
還沒加入的朋友,請先到 Patreon 看方案。
延伸閱讀
🌸買了 MacBook Neo 才知道有這個顏色 API
買了新機,採用了平時不會使用的設定,發現 app 的 bug,也學到提升使用者體驗的 API。
🛝iOS 本地 AI:不讓使用者乾等,Foundation Models 的 Stream Response 能輕鬆實現漸進式使用者體驗
為了不讓使用者等待,App 應該漸進地顯示生成的結果。但是,為了達到這個目的,你願意自行拼湊並解析 LLM 吐出過程中的不完整 JSON 字串嗎?太痛苦了。Foundation Models framework 提供給開發者十分優雅的方式避開這個麻煩,而且能直接沿用先前文章已學過的語法。
🚦iOS 本地 AI:用 PromptBuilder 動態組合 Foundation Models 的 Prompt
既然 Foundation Models framework 具備結構化輸出的功能,那麼輸入提示詞有沒有類似的機制?有的,Apple 提供了 PromptBuilder,讓開發者輕鬆依照程式條件來調整 prompt,並且能與結構化輸出的 Generable protocol 整合。