最新动态
一文熟悉新版llama.cpp使用并本地部署LLAMA
2024-12-30 00:53
  • 纯粹的C/C++实现,没有外部依赖

  • 支持广泛的硬件

    • x86_64 CPU的AVX、AVX2和AVX512支持
    • 通过metal和Accelerate支持Apple Silicon(CPU和GPU
    • NVIDIA GPU(通过CUDA)、AMD GPU(通过hipBLAS)、Intel GPU(通过SYCL)、昇腾NPU(通过CANN)和摩尔线程GPU(通过MUSA
    • GPU的Vulkan后端
  • 多种量化方案以加快推理速度并减少内存占用

  • CPU+GPU混合推理,以加速超过总VRAM容量的模型

llama.cpp 提供了大模型量化的工具,可以将模型参数从 32 位浮点数转换为 16 位浮点数,甚至是 8、4 位整数。除此之外,llama.cpp 还提供了服务化组件,可以直接对外提供模型的 API 。

这里最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡1.88元,并附带200G的免费磁盘空间。暂时已经满足我的使用需求了,同时支持访问加速,独立IP等功能,能够更快的完成项目搭建。此外对于低性能的还有3080TI使用只需要0.88元,已经吊打市面上主流的云服务器了

克隆仓库并进入该目录

 

构建GPU执行环境,确保安装CUDA工具包,适用于有GPU的操作系统

如果CUDA设置正确,那么执行nvidia-smi、nvcc --version没有错误提示,则表示一切设置正确。

 
 

在当前版本(截至2024年11月10日)这些指令分别被重命名为llama-quantize、llama-cli、llama-server。

 
 

这里我们会从pth开始,一步步给出我们怎么将模型应用到llama.cpp中的。

2.1 pth原始模型处理

首先安装高版本python 3.10

 
2.1.1 磁链下载

然后下载原版LLaMA模型的权重和tokenizer.model文件。如果嫌从官方下载太麻烦,网上也有一些泄露的模型版本可以直接下载。

这里应该是最早泄漏的版本,可以使用 IPFS 客户端 进行下载。

社区里也有人制作了种子,可以使用 BitTorrent 下载,磁链地址为

 

压缩包内文件目录如下(LLaMA-7B为例

 
2.1.2 使用 pyllama 下载

另一种下载 Llama 模型的方法是使用 pyllama 库。首先,通过 pip 安装它(非M2芯片

 

然后通过下面的命令下载 Llama 7B 模型(根据需要你也可以下载 13B、30B 和 65B,如果不指定 --model_size 则下载所有

 

在 Mac M2 下可能会遇到下面这样的报错

 

根据 itree 的官方文档,这个库我们需要自己手动构建

 

安装完成后,再次下载,这次虽然没有报错,但是模型的下载目录 pyllama_data 却是空的,根据 这里 的解决方案,我们使用源码重新安装 pyllama

 

然后再次下载即可,7B 模型文件大约 13G,下载速度取决于你的网速,成功后输出如下

 
2.1.3 脚本下载(作者使用的这个方法)
 

之后运行该文件即可自动执行(漫长等待ing

 
 

下载后一共有 5 个文件

 

2.2 原版转为hf格式文件

2.2.1 hf格式转换

这里使用transformers提供的脚本convert_llama_weights_to_hf.py将原版LLaMA模型转换为HuggingFace格式。或者直接在抱抱脸上下载

 

将原版LLaMA的放在指定的目录,其余文件放在下。 执行以下命令后,中将存放转换好的HF版权重。

 

目录下会生成HF格式的模型文件,诸如

 
 
2.2.2 合并lora

这里我们选择了Chinese-LLaMA-Alpaca作为lora合并的操作。然后我们需要合并LoRA权重,生成全量模型权重。这里我们使用ymcui/Chinese-LLaMA-Alpaca at v2.0 (github.com)里面的脚本

 
 

此处输入使用脚本,对原版LLaMA模型(HF格式)扩充中文词表,并与LoRA权重进行合并,生成全量模型权重(建议检查生成模型的SHA256值)和配置文件params.json。需要保证以上两个脚本所需参数一致,仅输出文件格式不同。下面以生成PyTorch版本权重为例,介绍相应的参数设置。

 

:存放HF格式的LLaMA模型权重和配置文件的目录(Step 1生成

:中文LLaMA/Alpaca LoRA解压后文件所在目录,也可使用Model Hub模型调用名称:或

: 指定输出格式,可为或。若不指定,默认为

:指定保存全量模型权重的目录,默认为http://www.kler.cn/a/(可选

(仅对旧脚本有效: 对于低内存用户需要指定一个offload缓存路径(可选

2.3 hf转guff模型

之前的convert.py 已被移至 examples/convert_legacy_llama.py,并且不应用于 Llama/Llama2/Mistral 模型及其衍生品以外的任何用途。它不支持 LLaMA 3,您可以使用 convert_hf_to_gguf.py 来处理从 Hugging Face 下载的 LLaMA 3。这里我们对模型进行转化,将其转化为gguf格式并进行量化,在llama.cpp路径下

 
 
 
 

转换完成后,模型目录下会多一个 chinese_q4_0.gguf 文件

 
 
 

这里我们可以通过上面的操作,或者去 https://huggingface.co/models 找 GGUF 格式的大模型版本,下载模型文件放在 llama.cpp 项目 models 目录下。

 

仓库中包含各种量化位数的模型,Q2、Q3、Q4、Q5、Q6、Q8、F16。量化模型的命名方法遵循: “Q” + 量化比特位 + 变种。量化位数越少,对硬件资源的要求越低,但是模型的精度也越低。

3.1 交互模式

可通过llama-cli或llama-server运行模型。

 
 

其中

  • 参数后跟要运行的模型
  • 表示以对话模式运行模型
  • :当编译支持 GPU 时,该选项允许将某些层卸载到 GPU 上进行计算。一般情况下,性能会有所提高。

其他参数详见官方文档llama.cpp/examples/main/README.md at master · ggerganov/llama.cpp (github.com)

3.2 模型API服务

llama.cpp提供了完全与OpenAI API兼容的API接口,使用经过编译生成的llama-server可执行文件启动API服务。如果编译构建了GPU执行环境,可以使用-或 参数,指定offload层数,让模型在GPU上运行推理。未使用-或 参数,程序默认在CPU上运行

 

可从以下关键启动日志看出,模型在GPU上执行

 

会启动一个类似web服务器的进程,默认端口号为8080,这样就启动了一个 API 服务,可以使用 curl 命令进行测试。

 

此外可通过web页面或者OpenAI api等进行访问。安装openai依赖

 

使用OpenAI api访问

 

3.3模型API服务(第三方,自己安装不需要)

在llamm.cpp项目中有提到各种语言编写的第三方工具包,可以使用这些工具包提供API服务,这里以Python为例,使用llama-cpp-python提供API服务。

安装依赖

一文熟悉新版llama.cpp使用并本地部署LLAMA

 

注意:可能还需要安装以下缺失依赖,可根据启动时的异常提示分别安装。

 

启动API服务,默认运行在

 

然后操作和上面一致,运行openai的脚本

至此,我们已经可以熟练地在本地部署和运行 Llama 模型了,为了让我们和语言模型之间的交互更加友好,我们还可以借助一些开源项目打造一款类似 ChatGPT 的聊天应用。无论是 还是 Ollama,周边生态都非常丰富,社区开源了大量的网页、桌面、终端等交互界面以及诸多的插件和拓展,参考 Ollama 的 Community Integrations。

下面列举一些比较有名的 Web UI

  • Open WebUI
  • Text generation web UI
  • Jan
  • GPT4All
  • LibreChat

接下来我们就基于 Open WebUI 来实现一个本地聊天应用。Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线运行。它的原名叫 Ollama WebUI,原本只是对 Ollama 的,后来在社区的推动下,发展成了一款通用的聊天应用 WebUI,支持各种 LLM 运行器,包括 Ollama 以及与 OpenAI 兼容的接口。

Open WebUI 具备大量的功能特性,包括

  • 直观的界面:接近 ChatGPT 的界面,提供用户友好的体验
  • 响应式的设计:同时兼容桌面和移动端设备
  • 快速的响应:让用户享受快速且响应迅速的性能
  • 轻松的安装:支持使用 Docker 或 Kubernetes 进行安装
  • 代码语法高亮:增强代码的可读性
  • 全面支持 Markdown 和 LaTeX:实现更丰富的交互,提升用户的体验
  • 本地 RAG 集成:支持在聊天中对文档进行问答
  • 网页浏览功能:支持在聊天中对网页进行问答
  • 预设的提示词:聊天时输入 命令即可立即访问预设的提示词
  • RLHF 注释:通过给消息点赞或点踩,为 RLHF 创建数据集,便于使用您的消息来训练或微调模型
  • 对话标记:轻松分类和定位特定的聊天,以便快速参考和高效数据收集
  • 模型管理:支持在页面上下载或删除模型;支持导入 GGUF 文件,轻松创建 Ollama 模型或 Modelfile 文件
  • 多模型切换:支持多个模型之间的切换
  • 多模型对话:同时与多个模型进行交流,通过比较获得最佳回应
  • 多模态:支持多模态大模型,可以在聊天中使用图片
  • 聊天记录:轻松访问和管理对话历史,支持导入和导出聊天数据
  • 语音输入支持:通过语音互动与模型进行交流,享受直接与模型对话的便利
  • 图像生成集成:无缝地使用 AUTOMATIC1111 API 和 DALL-E 集成图像生成功能,为聊天体验增添动态视觉内容
  • OpenAI API 集成:轻松地将与 Ollama 模型兼容的 OpenAI API 集成到对话中
  • 国际化(i18n:支持多种不同的语言

运行如下的 Docker 命令即可安装 Open WebUI

 

安装成功后,浏览器访问 即可,首次访问需要注册一个账号

注册账号并登录后,就可以看到我们熟悉的聊天界面了

https://blog.csdn.net/god_zzZ/article/details/130328307

https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/llama.cpp%E9%87%8F%E5%8C%96%E9%83%A8%E7%BD%B2

https://www.chenshaowen.com/blog/llama-cpp-that-is-a-llm-deployment-tool.html

https://blog.csdn.net/m0_61797126/article/details/140583788

https://www.bilibili.com/read/cv34175051/

https://qwen.readthedocs.io/zh-cn/latest/run_locally/llama.cpp.html

https://blog.csdn.net/qq_38628046/article/details/139006498

    以上就是本篇文章【一文熟悉新版llama.cpp使用并本地部署LLAMA】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/quote/16116.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站https://sicmodule.kub2b.com/mobile/,查看更多   
发表评论
0评