概述
近期 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
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 编写.
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net