当前位置:AIGC资讯 > AIGC > 正文

如何在 MacBook Pro 上安装 LLama.cpp + LLM Model 运行环境

如何在 MacBook Pro 上安装 LLama.cpp + LLM Model 运行环境

1. 问题与需求

近段时间想学习一下大语言模型的本地化部署与应用。首先遇到的就是部署硬件环境的问题。我自己的笔记本是一台 MacBook Pro M3,没有 Nvidia 的 GPU 支持,但机器性能不错。所以打算根据网上资料尝试在自己笔记本上部署一个本地运行的大语言模型服务。

2. 安装环境与目标

硬件环境:MacBook Pro, CPU M3 Max,内存36GB, 操作系统 macOS Sonaoma 14.2.1 安装目标:选择安装 #零一万物 大语言模型做测试(后续用 Yi 代表)。其它模型的安装方法都类似。

3. 相关资料

进入 # huggingface 上 Yi 模型的首页,选择了 01-ai/Yi-6B-Chat 版本的模型进行安装

进入 # llama.cpp 的安装说明页面。根据说明页面的提示,在资源不足的情况下,推荐 MacBook Pro 环境使用 llama.cpp 方式进行安装

官方部署说明引用:if you have limited resources (for example, a MacBook Pro), you can use llama.cpp.

关于 llama.cpp 的简介:大型语言模型(LLM)正在给各个行业带来革命性的变化。从客户服务聊天机器人到复杂的数据分析工具,这项强大技术的能力正在重塑数字交互和自动化的格局。然而,LLM的实际应用受到需要高性能计算硬件环境的限制。这些模型通常需要复杂的硬件和广泛的依赖关系,这使得在更受约束的环境中采用它们变得困难。而 LLaMa.cpp 正是为了解决这个问题而诞生。LLaMa.cpp由Georgi Gerganov开发,它在高效的C/ c++中实现了Meta的LLaMa架构,它是围绕LLM推理最具活力的开源社区之一。LLaMa.cpp 为重量级框架提供了一种更轻、更便携的替代方案。它使用C++语言来运行模型,而不是使用对计算资源消耗更多的 python 语言环境。因此 llama.cpp 使得 LLM 能在配置相对专用服务器较低的普通机器上运行。例如在没有Nivida GPU支持的 MacBook Pro 上运行。

关于下载模型的 GGUF 文件格式:GGUF 和 GGML 是 Georgi Gerganov 开发的量化模型的文件格式。要与这些文件交互,需要使用llama.cpp。这些格式支持从单个文件进行有效推断,使LLM部署过程更加简单和经济高效。GGUF 是由 llama.cpp 团队于2023年8月21日推出的,它不仅是另一个标准,而且是对GGML的直接而实质性的改进。因此现在都使用 GGUF 格式。参考文献: Why GGUF Is a Better File Format

4.安装过程

第一步:安装 # git-lfs 环境支持。
git-lfs 是在git上存储大文件的一种方式,它将音频样本、视频、数据集和图形等大文件替换为Git内的文本指针,同时将文件内容存储在远程服务器上,如GitHub.com或GitHub Enterprise。在控制台执行如下命令安装

brew install git-lfs

第二步:安装 llama.cpp
在本地创建一个llm目录,进入llm目录后,执行如下代码从 github 上克隆一份 llama.cpp 的代码

mkdir llm
cd llm
git clone https://github.com/ggerganov/llama.cpp.git

第三步:下载模型

执行下面的命令通过 pointers 方式从 huggingface 上克隆 XeIaso/yi-chat-6B-GGUF 模型
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/XeIaso/yi-chat-6B-GGUF
进入 yi-chat-6B-GGUF 目录,下载一个量化的Yi模型(Yi -chat-6b. q2_k .gguf),请运行以下命令。
cd ./yi-chat-6B-GGUF/
git-lfs pull --include yi-chat-6b.Q2_K.gguf

执行过程中发现直接使用国外 huggingface 提供的下载路径速度太慢,对于上G的模型文件,没法直接下载。还好国内有 huggingface 的镜像站点 https://hf-mirror.com 提供高速下载。所以参照网站说明转成从国内景象下载。

第四步:通过镜像下载模型

hf-mirror.com 网站提供了四种模型下载方法,这里使用第三种方式(网站提供的数据下载命令脚本来下载)

安装下载脚本 hfd.sh
wget https://hf-mirror.com/hfd/hfd.sh
chmod a+x hfd.sh
设置环境变量
export HF_ENDPOINT=https://hf-mirror.com

这里是零时设置环境变量 HF_ENDPOINT,也可以将该设置直接写入到环境配置文件中。

下载模型
mkdir models
cd models
brew install aria2
./hfd.sh XeIaso/yi-chat-6B-GGUF --repo-type dataset --tool aria2c -x 4

先创建了一个目录用于存储模型(使用 huggingface 官方的下载命令会将模型下载到默认目录 ~/.cache/huggingface/hub 下, 这里用的自定义目录来存储);接下来在MacOS中安装多线程的下载工具 aria2,因为 hfd.sh 脚本中会调用这个工具进行数据下载;XieIaso/yi-chat-6B-GGUF 是要下载的模型名字(因为要使用 llama.cpp 运行模型,所以下载的GGUF格式的文件)

第五步:在终端执行模型推理

模型推理:在LLM(Large Language Model)模型的安装部署过程中,“Perform inference” 步骤的作用是执行推理或预测。在这个步骤中,模型会接收输入数据(通常是文本或其他形式的数据),然后对其进行处理以生成相应的输出。在自然语言处理的情境下,推理通常指的是将输入文本传递给模型,然后模型基于其训练过程中学到的知识和模式,生成相应的输出,例如文本分类、语言生成、问答等任务。在进行推理时,模型可能需要在部署环境中加载相关的权重参数以及其他必要的资源,然后通过计算对输入数据进行处理,并生成输出。这个过程通常是在生产环境中实时进行的,因此在模型部署过程中确保推理过程的有效性和高效性非常重要。

1)先进入到 llama.cpp 目录,并运行以下命令;
2)通过 -j4 参数指定使用4个线程编译 llama.cpp 原代码;
3)编译完成后,目录下会生成可以执行文件 main;
4)执行 main 程序,同时参数 -m 指定下载模型的位置(请根据自己下载模型的路径进行修改),-p 以及要进行推理的文字, -n 用于预测的token数量,-e 处理提示词中的转意字符(\n, \r, \t, ', ", \)。

% make -j4 
% ./main -m ../models/yi-chat-6B-GGUF/yi-chat-6b.Q2_K.gguf -p "How do you feed your pet fox? Please answer this question in 6 simple steps:\nStep 1:" -n 384 -e 

看到类似如下的输出日志信息,说明 llama.cpp 加载模型数据并推理成功了。

How do you feed your pet fox? Please answer this question in 6 simple steps:
Step 1: Provide the necessary living space: Foxes are wild animals and require a secure enclosure to live safely. This means providing them with a properly constructed cage, fencing, or an appropriate habitat that meets their needs for safety and comfort.
Step 2: Ensure proper diet and nutrition: Foxes have specific dietary requirements. They eat meat, which includes a variety of prey items (e.g., rodents, rabbits) and vegetation (e.g., fruits, seeds, insects). Feeding your pet fox a balanced diet is crucial for its health and well-being.
Step 3: Ensure fresh water is available: Like any other animal, foxes need access to fresh water daily. You can provide this by setting out bowls of clean water or allowing them to drink from streams or puddles if they're outdoors.
Step 4: Regularly monitor your pet's health: Keep an eye on your pet fox for signs of illness or discomfort. Regular check-ups with a veterinarian can help you catch any issues early and address them promptly.
Step 5: Socialize responsibly: Interactions between humans and wild animals should be managed to avoid habituation, which can lead to behavioral problems in captive foxes. Always approach your pet with kindness and respect their need for freedom when possible.
Step 6: Have fun together! Engage in activities that you both enjoy - playtime, walks, or simply observing nature around the home environment. These shared experiences can strengthen your bond while providing enrichment for your pet fox.What are some tips for maintaining a good relationship with your pet fox?Maintaining a good relationship with your pet fox involves understanding their natural behaviors and meeting their needs in a responsible way. Here are some key tips:

1. **Understand Their Needs**: Foxes require large spaces to roam, socialization opportunities (
llama_print_timings:        load time =     175.41 ms
llama_print_timings:      sample time =      47.29 ms /   384 runs   (    0.12 ms per token,  8119.42 tokens per second)
llama_print_timings: prompt eval time =      90.41 ms /    23 tokens (    3.93 ms per token,   254.39 tokens per second)
llama_print_timings:        eval time =    8936.37 ms /   383 runs   (   23.33 ms per token,    42.86 tokens per second)
llama_print_timings:       total time =    9145.14 ms /   406 tokens
ggml_metal_free: deallocating
Log end

第六步:在Web界面执行模型推理

运行以下命令初始化一个轻量简洁的 Web 聊天机器人。

./server --ctx-size 2048 --host 0.0.0.0 --port 8888 --n-gpu-layers 64 --model ../models/yi-chat-6B-GGUF/yi-chat-6b.Q2_K.gguf

参数说明:
–ctx-size 提示词的上下文大小,默认512;
–host 绑定主机的IP地址,0.0.0.0是全部IP;
–port 监听端口;
-n-gpu-layers 存储在VRAM中的层数;
–model 加载的模型路径;

启动后,在浏览器中输入地址 http://127.0.0.1:8888 访问聊天页面

5. 结束语

通过该流程,实现了在普通笔记本的硬件环境上安装部署大语言模型。为程序员学习人工智能提供了一个基础的学习环境。

更新时间 2024-03-01