概述
近期 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
技術棧
- Llama3
- LlamaEdge + WASMEdge
- NVIDIA 顯示卡驅動 + CUDA
- WSL2
前提條件
- Windows 10/11 系統
- 硬體: 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才能使用下面的命令。
-
啟動您喜歡的Windows終端/命令提示符/ Powershell並安裝WSL:
wsl.exe --install
-
確保你有最新的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 已經成功在本地執行. 使用上和線上的 ChatGPT 一樣.
另外, 在執行過程中, 透過 Windows 上的 Task Manager 可以看到, 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 編寫.