天天看點

MLC-LLM:讓手機也能運作大語言模型

作者:ChatGPT掃地僧
MLC-LLM:讓手機也能運作大語言模型

MLC-LLM 是一種通用 AI 模型本地化部署解決方案,可以在各種硬體平台和本地應用程式上原生部署任何語言模型,并為每個人提供一個高效的架構,以進一步優化模型性能,滿足他們自己的用例需求。

它的使命是讓每個人都能在自己的裝置上本地開發、優化和部署AI模型。

MLC-LLM:讓手機也能運作大語言模型

MLC-LLM 在本地運作,無需伺服器支援,并且可以利用手機和筆記本電腦上的本地GPU進行加速。支援的平台包括:

  • iPhone、iPad
  • Android 手機
  • Apple Silicon 和 x86 MacBook
  • 通過 Vulkan 在 Windows 和 Linux 上的AMD、Intel 和 NVIDIA GPU
  • 通過 CUDA 在 Windows 和 Linux 上的 NVIDIA GPU
  • 通過浏覽器的WebGPU(通過WebLLM項目實作)

MLC-LLM 是什麼❓

近年來,在生成式人工智能(AI)和大型語言模型(LLM)方面取得了顯著進展,這些模型越來越普遍。由于開源倡議,現在可以使用開源模型開發個人AI助手。然而,LLM往往對資源要求較高,需要大量計算資源。為了建立可擴充的服務,開發人員可能需要依賴強大的叢集和昂貴的硬體來運作模型推斷。此外,部署LLM也面臨着一些挑戰,如不斷創新的模型、記憶體限制和潛在的優化技術需求。

這個項目的目标是在各種裝置上進行AI模型的開發、優化和推斷部署,包括不僅僅是伺服器級硬體,還包括使用者的浏覽器、筆記本電腦和移動應用。為了實作這一目标,需要解決計算裝置和部署環境的多樣性。一些關鍵挑戰包括:

  • 支援不同型号的CPU、GPU和其他協處理器和加速器。
  • 在使用者裝置的本地環境上部署,這些裝置可能沒有Python或其他必要的依賴庫。
  • 通過仔細規劃記憶體配置設定和積極壓縮模型參數來解決記憶體限制的問題。

MLC LLM 提供了一個可重複、系統化和可定制的工作流程,使開發人員和AI系統研究人員能夠以 Python 為中心的高效方法來實作模型和優化。這種方法使得可以快速嘗試新模型、新思路和新編譯器傳遞,然後将其本地部署到所需的目标上。此外,它還通過擴充TVM後端來不斷擴充 LLM 加速,使模型編譯更加透明和高效。

MLC如何實作通用本地部署❓

解決方案的核心是機器學習編譯(MLC),利用它來高效地部署AI模型。它基于開源生态系統建構,包括Hugging Face和Google的标記器以及像 Llama、Vicuna、Dolly、MOSS、RWKV等開源LLM模型。我們的主要工作流程基于Apache TVM Unity,這是Apache TVM社群的一個令人興奮的持續發展項目。

以下是它的一些關鍵方法:

  • 動态形狀(dynamic shape):将語言模型作為TVM IRModule進行編譯,支援本地動态形狀,避免了對最大長度的額外填充,減少了計算量和記憶體使用。
  • 組合式 ML 編譯優化:執行許多模型部署優化,如更好的編譯代碼轉換、融合、記憶體規劃、庫解除安裝和手動代碼優化,這些優化可以輕松地作為TVM的IRModule轉換暴露為Python API。
  • 量化:利用低位量化來壓縮模型權重,并利用TVM的循環級TensorIR快速定制不同壓縮編碼方案的代碼生成。
  • 運作時:生成的最終庫在本地環境中運作,使用TVM運作時,具有最小的依賴性,支援各種GPU驅動程式API和本地語言綁定(C、JavaScript等)。
MLC-LLM:讓手機也能運作大語言模型

此外,它還提供了一個基于輕量級C++的示例CLI應用程式,展示了如何打包編譯的元件以及必要的預處理/後處理過程,這将幫助了解将它們嵌入到本地應用程式的工作流程。

作為起點,MLC 為 CUDA、Vulkan 和 Metal 生成GPU着色器。通過改進 TVM 編譯器和運作時,可以添加更多支援,如 OpenCL、sycl和webgpu-native。MLC 還通過 LLVM 支援 ARM 和 x86 等各種CPU目标。

它在很大程度上依賴于開源生态系統,特别是TVM Unity,這是TVM項目中令人興奮的最新發展,它實作了以 Python 為中心的互動式MLC 開發體驗,使我們能夠輕松地在 Python 中組合新的優化政策,并逐漸将我們的應用程式引入感興趣的環境。還利用了一些優化技術,如融合量化核心、一流的動态形狀支援和多樣的GPU後端。

從源代碼建構

有兩種方法可以從源代碼建構 MLC-LLM。第一種,方法是使用Hugging Face的URL直接下載下傳模型參數,第二種,方法是使用包含參數的本地目錄。

使用Hugging Face URL:

# 建立一個新的conda環境并安裝依賴項
conda create -n mlc-llm-env python
conda activate mlc-llm-env
pip install torch transformers  # 安裝PyTorch和Hugging Face transformers
pip install -I mlc_ai_nightly -f https://mlc.ai/wheels  # 安裝TVM


# 如果尚未安裝Git和Git-LFS,請安裝它們。
# 它們用于從Hugging Face下載下傳模型權重。
conda install git git-lfs
git lfs install


# 克隆MLC LLM倉庫
git clone --recursive https://github.com/mlc-ai/mlc-llm.git
cd mlc-llm


# 建立本地建構目錄并編譯模型
# 這将自動從Hugging Face下載下傳參數、分詞器和配置檔案
python build.py --hf-path=databricks/dolly-v2-3b           

使用本地目錄:

如果你有一個包含模型參數、标記器和受支援模型的 config.json 檔案的本地目錄,可以運作以下建構指令:

# 建立本地建構目錄并編譯模型
python build.py --model=/path/to/local/directory


# 如果模型路徑的形式是`dist/models/model_name`,
# 可以簡化建構指令為
# python build.py --model=model_name           

建構成功後,編譯的模型将位于`dist/dolly-v2-3b-q3f16_0`(具體路徑因模型類型和指定的量化而異)。之後按照特定平台的說明來建構和運作 MLC - LLM,支援 iOS、Android 和 CLI。

https://github.com/mlc-ai/mlc-llm/blob/main/ios/README.md

iOS

https://github.com/mlc-ai/mlc-llm/blob/main/android/README.md

Android

https://github.com/mlc-ai/mlc-llm/tree/main/cpp/README.md

CLI

如何試一試❓

iPhone

https://testflight.apple.com/join/57zd7oxa

TestFlight

iOS使用者如果想測試,可以從 TestFlight 頁面(限制前9000名使用者)安裝使用已經為iPhone建構的iOS聊天應用程式。Vicuna-7B 需要4GB的RAM,而 RedPajama-3B 需要 2.2GB的RAM才能運作。考慮到iOS和其他正在運作的應用程式,需要一台 6GB 記憶體的iPhone才能運作Vicuna-7B,或者一台 4GB 記憶體的iPhone才能運作RedPajama-3B。該應用程式僅在 iPhone 14 Pro Max、iPhone 14 Pro 和 iPhone 12 Pro 上進行了測試。

注意:iOS應用程式上的文本生成速度可能會不穩定。它可能在開始時運作緩慢,然後恢複到正常速度。

Android

https://github.com/mlc-ai/binary-mlc-llm-libs/raw/main/

APK

Android 使用者如果想測試,可以下載下傳APK檔案并在手機上安裝應用。然後就可以與LLM開始聊天。首次打開應用程式時,需要下載下傳參數,加載過程可能會比較慢。在以後的運作中,參數将從緩存中加載(這很快),并且可以離線使用該應用程式。目前依賴于手機上的OpenCL 支援,并且需要約6GB 的 RAM。

如果想自己建構移動應用可以根據上面#從源代碼建構#方式來自己建構移動應用。

引用連結

Github:https://github.com/mlc-ai/mlc-llm

Website:https://mlc.ai/mlc-llm

繼續閱讀