太酷了!iPhone、iPad、MacBook老舊裝置組成異構叢集,能跑Llama 3

机器之心發表於2024-07-16
假如你有閒置的裝置,或許可以試一試。

這次,你手裡的硬體裝置也能在 AI 領域大展拳腳了。

將 iPhone、iPad、Macbook 進行組合,就能組裝成「異構叢集推理方案」, 然後順暢的執行 Llama3 模型。

太酷了!iPhone、iPad、MacBook老舊裝置組成異構叢集,能跑Llama 3

值得一提的是,這個異構叢集可以是 Windows 系統,也可以是Linux、iOS 系統,並且對 Android 的支援很快到來。

圖片 異構叢集正在執行中。

根據專案作者 @evilsocket 的介紹,這個異構叢集包括 iPhone 15 Pro Max、iPad Pro、MacBook Pro (M1 Max)、NVIDIA GeForce 3080、2x NVIDIA Titan X Pascal。所有程式碼都已經上傳到 GitHub。

看到這,網友紛紛表示,這位老哥確實不簡單。

圖片

不過也有網友開始擔心能耗問題,暫且不管速度,電費都耗不起。來回搬資料,損耗太大了。

圖片

圖片

專案介紹

上述功能的實現,離不開一個名為 Cake 的 Rust 框架。Cake 可以完成大模型(例如 Llama3)的分散式推理,旨在將消費級硬體組合成異構叢集,其中消費級硬體採用多種作業系統,包括:iOS、Android、macOS、Linux 和 Windows,從而使 AI 更易於訪問。

圖片

專案地址:https://github.com/evilsocket/cake

Cake 的主要思路是將 transformer 塊分片到多個裝置,以便能夠讓通常不適合單個裝置 GPU 記憶體的模型執行推理。對同一工作執行緒上的連續 transformer 塊的推理是分批進行的,以便最大限度地減少資料傳輸造成的延遲。

Cake 目前支援的系統和裝置如下:

圖片

編譯

安裝 Rust 後,執行下列程式碼:

cargo build --release

假如使用者想要在應用程式中生成 iOS 繫結,可以進行下述操作:

make ios

使用

執行 worker 節點:

cake-cli --model /path/to/Meta-Llama-3-8B \ # model path, read below on how to optimize model size for workers
         --mode worker \                    # run as worker
         --name worker0 \                   # worker name in topology file
         --topology topology.yml \          # topology
         --address 0.0.0.0:10128            # bind address

執行 master 節點:

cake-cli --model /path/to/Meta-Llama-3-8B \
         --topology topology.yml

其中 topology.yml 確定哪些層由哪個 worker 提供服務:

linux_server_1:
  host: 'linux_server.host:10128'
description: 'NVIDIA Titan X Pascal (12GB)'
layers:
    - 'model.layers.0-5'
linux_server_2:
  host: 'linux_server2.host:10128'
description: 'NVIDIA GeForce 3080 (10GB)'
layers:
    - 'model.layers.6-16'
iphone:
  host: 'iphone.host:10128'
description: 'iPhone 15 Pro Max'
layers:
    - 'model.layers.17'
ipad:
  host: 'ipad.host:10128'
description: 'iPad'
layers:
    - 'model.layers.18-19'
macbook:
  host: 'macbook.host:10128'
description: 'M1 Max'
layers:
    - 'model.layers.20-31'

關於記憶體和磁碟空間最佳化問題,使用者可能希望只向 worker 提供模型中實際需要的資料,而不是整個資料夾,在這種情況下,可以使用 cake-split-model 。例如,要生成較小版本的 llama3 safetensors,可以採用如下程式碼:

cake-split-model --model-path path/to/Meta-Llama-3-8B \ # source model to split
                 --topology path/to/topology.yml \      # topology file
                 --output output-folder-name

參考連結:https://x.com/tuturetom/status/1812654489972973643

相關文章