在Windows電腦上快速執行AI大語言模型-Llama3

东风微鸣發表於2024-04-20

概述

近期 Meta 釋出了最新的 Llama3 模型,並開源了開原始碼。Meta Llama 3 現已推出 8B 和 70B 預訓練和指令調整版本,可支援廣泛的應用程式。

並且 Llama 3 在語言細微差別、上下文理解和翻譯和對話生成等複雜任務方面表現出色。

我們可以在 Windows 上快速執行 Llama3 8B 模型。

📝Notes

鄭重宣告: 本文幾乎沒有任何原創內容, 主要資料都來自於網上, 筆者只是總結自己實際可以執行起來的詳細步驟, 供各位讀者參考.
另外, 筆者的水平有限, 歡迎大家提出改進意見. 目前可以快速在 Windows 上執行 AI 模型的方法還有幾個, 包括不限於:

  • Llmafile
  • Chat With RTX | Nvidia
  • WSL2 + WASMEdge

受限於個人經驗, 提供提供使用: WSL+ WASMEdge 的實戰方案.

📚️參考資料

  • Llama3
  • 有人說開源模型會越來越落後,來試試 Llama 3 吧 | LlamaEdge | Second State
  • How to install Linux on Windows with WSL
  • CUDA on WSL User Guide

技術棧

  1. Llama3
  2. LlamaEdge + WASMEdge
  3. NVIDIA 顯示卡驅動 + CUDA
  4. WSL2

前提條件

  1. Windows 10/11 系統
  2. 硬體: NVIDIA 顯示卡(具體型號要求不確定, 應該是可以執行 CUDA 的都可以; 我的 2060 實戰沒有問題)

相關概念

Llama 3

模型效能

  • Meta釋出了新一代語言模型Llama 3,包括8B和70B引數的預訓練和指令微調模型。
  • Llama 3在廣泛的行業基準上展示了最先進的效能,並提供了新的功能,包括改進的推理能力。
  • Llama 3模型在標準基準上的效能優於其他同等規模的模型,並且針對真實世界場景進行了最佳化。

模型架構

  • Llama 3使用了改進的解碼器-only transformer架構,並採用了分組查詢注意力(GQA)來提高推理效率。
  • Llama 3在超過15T個標記上進行了預訓練,訓練資料集是Llama 2的七倍,並且包含更多程式碼。
  • Llama 3使用了各種資料過濾管道來確保訓練資料的質量,包括啟發式過濾器、NSFW過濾器、語義去重方法和文字分類器。
  • Llama 3使用了詳細的縮放定律來擴充套件預訓練,並對訓練資料進行了最佳組合的選擇。

指令微調

  • Llama 3在指令微調方面進行了創新,包括監督微調(SFT)、拒絕取樣、近端策略最佳化(PPO)和直接策略最佳化(DPO)。

可用性

  • Llama 3 將很快在所有主要平臺上提供,包括雲提供商、模型 API 提供商等等。Llama 3 將無處不在。

未來計劃

  • Llama 3 8B 和 70B 模型標誌著 Meta 計劃為 Llama 3 釋出的內容的開始。還有更多內容即將推出。Meta 最大模型的引數超過 400B,雖然這些模型仍在訓練中,但團隊對它們的趨勢感到興奮。

  • 在接下來的幾個月裡,Meta 將釋出多個具有新功能的模型,包括多模態、使用多種語言進行對話的能力、更長的上下文視窗和更強的整體能力。一旦完成 Llama 3 的訓練,Meta 還會發布詳細的研究論文。

LlamaEdge

  • LlamaEdge 專案可以輕鬆地在本地執行 LLM 推理應用程式並建立適用於 Llama2-3 系列 LLM 的 OpenAI 相容 API 服務。

  • LlamaEdge 使用 Rust+Wasm 棧,提供了比 Python 更強大的 AI 推理替代方案。

  • LlamaEdge 支援所有基於 llama2-3 框架的大語言模型 (LLM),模型檔案必須採用 GGUF 格式。

  • 編譯後的 Wasm 檔案是跨平臺的,可以在不同的作業系統、CPU 和 GPU 上執行相同的 Wasm 檔案。

  • LlamaEdge 提供了詳細的故障排除指南,幫助使用者解決常見問題。

WASMEdge

WasmEdge 簡介

  • WasmEdge 執行時提供了一個定義良好的執行沙箱,用於包含的 WebAssembly 位元組碼程式。

  • WasmEdge 可以執行從 C/C++、Rust、Swift、AssemblyScript 或 Kotlin 原始碼編譯的標準 WebAssembly 位元組碼程式。

  • WasmEdge 支援所有標準的 WebAssembly 特性,以及許多提議的擴充套件。

  • WasmEdge 還支援一些針對雲原生和邊緣計算用途的擴充套件(例如,WasmEdge 網路套接字、基於 Postgres 和 MySQL 的資料庫驅動程式,以及 WasmEdge AI 擴充套件)。

  • WasmEdge 可以從 CLI 作為新程序啟動,也可以從現有程序啟動。

  • WasmEdge 目前還不是執行緒安全的。

  • WasmEdge 可以與 Go、Rust 或 C 應用程式整合。

  • WasmEdge 專案是開源的,歡迎大家參與貢獻。

  • WasmEdge 社群每月舉行一次社群會議,展示新特性、演示新用例並進行問答。

這裡也提一下 WASMEdge 的優勢, 在 2024 KubeCon NA 上, WASMEdge 重點強調了其優勢所在:

  • 與 Java 不同,Wasm 在雲原生領域有獨特的優勢,尤其是在 GPU 上執行 AI 應用方面。
  • 目前,構建 AI 應用通常需要使用 API 伺服器、大型語言模型、編排框架等元件,整個過程更偏向於研究,難以實現緊密整合和高安全性。
  • WASMEdge 旨在構建更緊湊的應用程式伺服器,將提示工程、RAG 框架等功能整合到應用程式伺服器中,並透過 Kubernetes 進行編排。
  • WASMEdge 與 W3C 合作定義了名為 WASI Neural Network 的新抽象層,將 GPU 訪問或 AI 推理原語定義為位元組碼級別的 API。
  • 開發者只需針對 WASI API 編寫應用程式並編譯成位元組碼,即可在任何支援 WASM 的裝置上部署和執行,無需重新編譯。
  • WASMEdge 提供線上演示,參會者可以在自己的膝上型電腦上安裝 WASM 並下載大型語言模型,無需網路連線即可與大型語言模型進行互動,驗證其跨平臺的可移植性

感興趣的可以觀看這個影片: WasmEdge, portable and lightweight runtime for AI/LLM workloads | Project Lightning Talk

NVIDIA CUDA

  • CUDA 計算平臺不僅僅是一種程式設計模型,它還包括 GPU 計算架構中數以千計的通用計算處理器、許多流行語言的平行計算擴充套件、強大的即插即用加速庫,以及交鑰匙應用程式和基於雲的計算裝置。

  • CUDA 不僅限於流行的 CUDA Toolkit 和 CUDA C/C++ 程式語言。

  • 自 2006 年推出以來,CUDA 已被廣泛部署在數千個應用程式和已發表的研究論文中,並得到超過 5 億個膝上型電腦、工作站、計算叢集和超級計算機中安裝的 CUDA 相容 GPU 的支援。

  • 許多研究人員和開發人員使用 CUDA 平臺來推動其工作的最新進展,請在 CUDA In Action Spotlight 系列中閱讀他們的部分故事。

  • 放入一個 GPU 加速庫來替換或增強僅限 CPU 的庫,例如 MKL BLAS、IPP、FFTW 和其他廣泛使用的庫

  • 使用 OpenACC 指令自動並行化 Fortran 或 C 程式碼中的迴圈以進行加速

  • 使用熟悉的程式語言(如 C、C++、C#、Fortran、Java、Python 等)開發自定義並行演算法和庫 立即開始加速您的應用程式。

WSL(Windows Subsystem for Linux)

  • Windows Subsystem for Linux (WSL) 是 Microsoft Windows 的一項功能,允許開發人員執行 Linux 環境,而無需單獨的虛擬機器或雙啟動。WSL 有兩個版本:WSL 1 和 WSL 2。

  • 預設情況下,並非所有 Windows 10 使用者都能使用 WSL。它可以透過加入 Windows Insider 計劃或透過 Microsoft Store 或 Winget 手動安裝。

  • WSL 1 於 2016 年 8 月 2 日首次釋出,透過在 Windows 核心上實現 Linux 系統呼叫,作為執行 Linux 二進位制可執行檔案(ELF 格式)的相容層。它適用於 Windows 10、Windows 10 LTSB/LTSC、Windows 11、Windows Server 2016、Windows Server 2019 和 Windows Server 2022。

  • 2019 年 5 月,WSL 2 釋出,透過 Hyper-V 功能子集引入了真正的 Linux 核心等重要變化。WSL 2 與 WSL 1 的不同之處在於,WSL 2 執行在託管虛擬機器內,該虛擬機器實現了完整的 Linux 核心。因此,WSL 2 比 WSL 1 相容更多 Linux 二進位制程式,因為 WSL 1 中並未實現所有系統呼叫。自 2019 年 6 月起,Windows 10 客戶可透過 Windows Insider 計劃使用 WSL 2,包括家庭版。

具體步驟

1. 安裝 NVIDIA Windows 最新版本顯示卡驅動

步驟略.

2. 安裝 WSL

📚️Reference

How to install Linux on Windows with WSL

前提

您必須執行Windows 10版本2004和更高版本(Build 19041和更高版本)或Windows 11才能使用下面的命令。

  1. 啟動您喜歡的Windows終端/命令提示符/ Powershell並安裝WSL:

    wsl.exe --install
    
  2. 確保你有最新的WSL核心:

    wsl.exe --update
    

3. WSL Ubuntu 安裝 CUDA Toolkit

📚️Reference

CUDA Toolkit 12.4 Update 1 Downloads

進入 WSL Ubuntu, 使用如下命令安裝 CUDA Toolkit

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-4-local_12.4.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

4. 使用 LlamaEdge + WasmEdge 執行本地 AI 大語言模型 - Llama3

📚️References

  • 有人說開源模型會越來越落後,來試試 Llama 3 吧 | LlamaEdge | Second State

以下為原文摘錄:
透過這篇文章,你將能夠在自己的電腦上使用 LlamaEdge[2](Rust + Wasm 堆疊)開發和部署 Llama-3-8B 的應用程式。無需安裝複雜的 Python 包或 C++ 工具鏈!檢視為什麼選擇這個技術棧。

如果你想要快速開始,只需要在終端執行下面的命令列,這個命令列工具會幫你自動下載所需的軟體:LLM runtime, Llama-3-8B 模型,以及 LLM 推理程式。

bash <(curl -sSfL 'https://raw.githubusercontent.com/LlamaEdge/LlamaEdge/main/run-llm.sh') --model llama-3-8b-instruct

🐾Warning

友情提示, 執行這一步之前請確保網路暢通.

執行結果如下:

[+] Downloading the selected model from https://huggingface.co/second-state/Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q5_K_M.gguf
######################################################################################################### 100.0%
[+] Extracting prompt type: llama-3-chat
[+] No reverse prompt required
[+] Install WasmEdge with wasi-nn_ggml plugin ...

Using Python: /home/casey/.pyenv/shims/python3
INFO    - CUDA detected via nvcc
WARNING - Experimental Option Selected: plugins
WARNING - plugins option may change later
INFO    - Compatible with current configuration
INFO    - Running Uninstaller
WARNING - Uninstaller did not find previous installation
WARNING - SHELL variable not found. Using zsh as SHELL
INFO    - shell configuration updated
INFO    - Downloading WasmEdge
|============================================================|100.00 %INFO    - Downloaded
INFO    - Installing WasmEdge
INFO    - WasmEdge Successfully installed
INFO    - Downloading Plugin: wasi_nn-ggml-cuda
|============================================================|100.00 %INFO    - Downloaded
INFO    - Downloading Plugin: wasmedge_rustls
|============================================================|100.00 %INFO    - Downloaded
INFO    - Run:
source /home/casey/.zshrc

    The WasmEdge Runtime is installed in /home/casey/.wasmedge/bin/wasmedge.


[+] Downloading the latest llama-api-server.wasm ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 8070k  100 8070k    0     0  2575k      0  0:00:03  0:00:03 --:--:-- 7030k

[+] Downloading Chatbot web app ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 1721k  100 1721k    0     0   703k      0  0:00:02  0:00:02 --:--:-- 10.2M


[+] Will run the following command to start the server:

    wasmedge --dir .:. --nn-preload default:GGML:AUTO:Meta-Llama-3-8B-Instruct.Q5_K_M.gguf llama-api-server.wasm --prompt-template llama-3-chat --model-name Meta-Llama-3-8B-Instruct.Q5_K_M.gguf --socket-addr 0.0.0.0:8080 --log-prompts --log-stat

    Chatbot web app can be accessed at http://0.0.0.0:8080 after the server is started


*********************************** LlamaEdge API Server ********************************

[2024-04-19 23:54:06.043] [error] instantiation failed: module name conflict, Code: 0x60
[2024-04-19 23:54:06.043] [error]     At AST node: module

[INFO] LlamaEdge version: 0.8.3
[INFO] Model name: Llama-3-8B
[INFO] Model alias: default
[INFO] Context size: 4096
[INFO] Prompt template: llama-3-chat
[INFO] Number of tokens to predict: 1024
[INFO] Number of layers to run on the GPU: 100
[INFO] Batch size for prompt processing: 512
[INFO] Temperature for sampling: 1
[INFO] Top-p sampling (1.0 = disabled): 1
[INFO] Penalize repeat sequence of tokens: 1.1
[INFO] Presence penalty (0.0 = disabled): 0
[INFO] Frequency penalty (0.0 = disabled): 0
[INFO] Enable prompt log: false
[INFO] Enable plugin log: false
[INFO] Socket address: 0.0.0.0:8080
ggml_cuda_init: GGML_CUDA_FORCE_MMQ:   no
ggml_cuda_init: CUDA_USE_TENSOR_CORES: yes
ggml_cuda_init: found 1 CUDA devices:
  Device 0: NVIDIA GeForce RTX 2060, compute capability 7.5, VMM: yes
[INFO] Wasi-nn-ggml plugin: b2636 (commit 5dc9dd71)
[INFO] LlamaEdge API server listening on http://0.0.0.0:8080

如果一鍵執行報錯, 也可以分步執行, 具體見原文.

🎉🎉🎉至此, Llama3 已經成功在本地執行.🎉🎉🎉

我們可以透過: http://localhost:8080 進行訪問.

效果

Llama3 透過 API Server 訪問

從上圖可以看到, Llama3 已經成功在本地執行. 使用上和線上的 ChatGPT 一樣.

另外, 在執行過程中, 透過 Windows 上的 Task Manager 可以看到, GPU 的負載已經達到 100%:

"一句話, 讓GPU跑滿100%" 😂😂😂

另外, 我們可以結合其提供的相容 OpenAI 的 API, 實現更多豐富場景:

  • 直接呼叫 API
curl -X POST http://localhost:8080/v1/chat/completions \
  -H 'accept:application/json' \
  -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"system", "content": "You are a sentient, superintelligent artificial general intelligence, here to teach and assist me."}, {"role":"user", "content": "Write a short story about Goku discovering kirby has teamed up with Majin Buu to destroy the world."}], "model":"Llama-3-8B"}'
  • 和各類支援設定 AI API Server 地址的客戶端聯動, 如:
    • Obsidian Text Generator Plugin
    • 沉浸式翻譯
    • 各類 ChatGPT 相關的瀏覽器外掛等
    • 各類 ChatGPT 桌面應用等

實現豐富的 AI 場景應用.

總結

本文介紹了在 Windows 上快速執行本地 AI 大語言模型 - Llama3 的實戰步驟, 透過利用: WSL + WasmEdge + LlamaEdge 快速實現.
易上手, 門檻低.
感興趣的可以試試.

也感謝WSL、NVIDIA、CUDA、WASMEdge、Llama3給我們帶來的便利.

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章