LLaMa2 Chat gpt 大模型本地部署初体验

news2025/2/23 23:18:16

一直想在自己电脑或者测试环境随便找台服务器尝试部署一下“大模型”,但“大模型”对于内存和GPU的要求令人望而却步,层出不穷的各种术语也令人困惑,有点难以下手。

经过一段时间,在百度千帆大模型平台、讯飞星火大模型平台、魔搭社区等平台的锤炼之下,对于“大模型”的应用有了一点点认知,但离“本地”部署和应用仍然差距甚远。无意中了解到 llama.cpp 这个开源项目,才算打开了一扇窗户。

The main goal of llama.cpp is to run the LLaMA model using 4-bit integer quantization on a MacBook …

根据llama.cpp项目的介绍,我们知道它是 llama 大模型的c++实现,通过对参数的量化减少模型体积(内存占用)、提高推理速度,使得 llama 等大模型可以在个人电脑、linux 等环境下只依赖cpu就能跑起来。目前,它已经可以支持包括LLaMA2、Chinese LLaMA-2 / Alpaca - 2、百川、通义千问等等在内的众多开源大模型。项目介绍中甚至可以在安卓手机中跑起来。更多详细介绍,参考https://github.com/ggerganov/llama.cpp

初体验

基础环境准备

给自己分配了一台测试虚拟机,配置了10核心20线程的CPU(原本分配的是8核心16线程,后来测试发现分配为10核心后有明显提升,因此此处直接描述为修改后的配置),16G内存,centos 7 操作系统。
对于服务器主要做了如下调整:

  1. 安装git
  2. 升级gcc版本(否则在编译llama.cpp时会报错)
  3. 升级python到3.10.5 以上版本
下载和安装
  1. 通过git 拉取项目
git clone https://github.com/ggerganov/llama.cpp
  1. 编译
make
  1. 下载模型
    llama.cpp项目提供了脚本,可以将网上下载的开源模型文件转换成F16格式,然后再使用脚本进行向量化,生成4-bit的gguf格式,这种格式的模型文件大大减少了模型体积,加快了推理速度,并且相比于F16格式并没有显著降低推理效果 (请注意这一切都是我从文档得知的结论,我本身并未进行效果对比测试)。
    到这一步的时候,文档是让你自己选择模型,去huggingface进行下载。考虑到LLaMa 本身对中文支持并不好,并且,LLaMa本身是个基座模型,并不适用于对话类场景(也就是我们平时用的ChatGPT这种),因此,我选择了一个开源的基于LLaMa2的中文Alpaca模型 Chinese-LLaMA-Alpaca-2,最有意思的是,这个模型提供了一个RLHF版本,经过精调,在 正确价值观方面获得了显著性能提升(内涵)。

总而言之,考虑到内存、CPU性能限制,但是对效果又想有点追求,我直接在huggingface下载了 7B级别的 q4_k.ggufq6_k.gguf 两个版本的模型文件进行测试。下载地址:https://huggingface.co/hfl/chinese-alpaca-2-7b-rlhf-gguf/tree/main

  1. 将模型文件上传到测试服务器,进入 llama.cpp项目路径下执行脚本测试
跑一跑

先来试试文字生成,按照说明文档,执行命令:

./main -m ../../chinese-llama-alpaca-rlhf-7b/ggml-model-q4_k.gguf --prompt '从前,有一座山,山上有个老和尚'

程序呼哧呼哧加载后就开始跑了,如下所示:
在这里插入图片描述
我们换成 q6_k 模型试试:

./main -m ../../chinese-llama-alpaca-rlhf-7b/ggml-model-q4_k.gguf --prompt '从前,有一座山,山上有个老和尚'

在这里插入图片描述
唔,我们很明显可以看到,q6_k 版本要比 q4_k 啰嗦多了。

模型推理时,观察CPU和内存占用,CPU将将跑满,内存占用35%左右,与模型文件大小相仿。

试完文字生成,让我们再来试试对话能力。

参考:https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/wiki/llamacpp_zh 给的例子,我们准备一个chat.sh脚本, 内容如下:

SYSTEM='You are a cheerful and lively assistant named 小六. You can help users answer questions about work and life, solving their problems. If a question confuses you, and you don't know how to answer, you should say, "I'm sorry, I don't understand what you're saying, please ask me in a different way." If you don't know the answer to a question, you should respond with, "I'm sorry, I don't know either," instead of providing a random answer. 你是一个性格开朗、语气活泼的助手,你的名字叫小六,能够帮用户回答工作和生活的疑问,解决他们的难题。如果一个问题让你感到困惑,你不知道怎么回答,你应该说 “对不起我不知道你在说什么,请换一种方式问我”。如果你不知道问题的答案,你就回答:“对不起,我也不知道”,而不是随意回答。'
FIRST_INSTRUCTION=$2

./main -m $1 \
--color -i -c 4096 -t 10 --temp 0.5 --top_k 40 --top_p 0.9 --repeat_penalty 1.1 \
--in-prefix-bos --in-prefix ' [INST] ' --in-suffix ' [/INST]' -p \
"[INST] <<SYS>>
$SYSTEM
<</SYS>>

$FIRST_INSTRUCTION [/INST]"

其中, [INST]``<<SYS>>等标签是LLaMa-2-chat的指令模板,需要自行探索。

使用q4_k版模型测试如下:

./chat.sh ../../chinese-llama-alpaca-rlhf-7b/ggml-model-q4_k.gguf '世界上最大的鱼是什么鱼'

在这里插入图片描述
使用q6_k版模型再试一次:

./chat.sh ../../chinese-llama-alpaca-rlhf-7b/ggml-model-q6_k.gguf '世界上最大的鱼是什么鱼'

在这里插入图片描述
q6_k模型依然啰嗦又贴心,当然,可以通过promt去约束模型的输出。

我们接着测试 正确价值观 的问题:
在这里插入图片描述

可以看到,此模型还是很友善地处理和回答了负能量的问题,对于“正确价值观”的处理可以让使用者松一口气。

总的来说,gpt的本质是根据你的输入做“推理”,它实际上并不理解你问的是什么问题,只是根据概率推断出应该回答的内容。因此,在处理“客观”问题时,需要仔细甄别才能知道它是否在“胡言乱语”。但是对于文本生成、语言翻译、文本总结 等“艺术性”创作时,则能以及高效率较好满足自然人的需求。也因此,如何更好的使用gpt,也成了一门学问

下一步思路

  1. 尝试使用llama.cpp的server功能,搭建一个简单的web服务,体验通过api调用大模型
  2. 尝试使用 通义千问1.8B-Chat模型 对比一下效果
  3. 尝试使用LangChain框架结合llama.cpp
  4. 尝试基于LangChain框架,本地构建一个简单的文档AI应用,通过将文档向量化和搜索之后,调用大模型进行回答
  5. 尝试大模型微调…

参考

  • Chinese-LLaMA-Alpaca-2
  • llama.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s源码阅读:Informer源码解析

写在之前 Kubernetes的Informer机制是一种用于监控资源对象变化的机制。它提供了一种简化开发者编写控制器的方式&#xff0c;允许控制器能够及时感知并响应 Kubernetes 集群中资源对象的变化。Informer通过与Kubernetes API服务器进行交互&#xff0c;通过监听API服务器上资源…

【sqlserver】已成功与服务器建立链接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0 - 指定的网络名不再可用。)

问题现象&#xff1a; 处理方式&#xff1a; 配置管理器&#xff0c;mssqlserver的协议 Named Pipes 启用&#xff0c;重新sqlserver服务试一下&#xff0c;我是自己摸索这样解决的&#xff0c;不行的话&#xff0c;可以看下下面链接建议 error:0 - 指定的网络名不可用

网络安全中的“三高一弱”和“两高一弱”是什么?

大家在一些网络安全检查中&#xff0c;可能经常会遇到“三高一弱”这个说法。那么&#xff0c;三高一弱指的是什么呢&#xff1f; 三高&#xff1a;高危漏洞、高危端口、高风险外连 一弱&#xff1a;弱口令 一共是4个网络安全风险&#xff0c;其中的“高危漏洞、高危端口、弱…

[New Tech] Compute Express Link 101

SDC2020: CXL 1.1 Protocol Extensions: Review of the cache and memory protocols in CXL

【Java】十年老司机转开发语言,新小白从学习路线图开始

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《Java》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

OpenCV-Python(43):姿势估计

目标 学习了解calib3D 模块学习在图像中创建3D效果 calib3D模块 OpenCV-Python的calib3D模块是OpenCV库中的一个重要模块&#xff0c;用于摄像头标定和三维重建等计算机视觉任务。该模块提供了一些函数和类&#xff0c;用于摄像头标定、立体视觉和三维重建等方面的操作。 下…

利用Lambda表达式实现vector中pair/结构体的排序

众所周知&#xff0c;对于vector<pair<int, int> >若直接使用sort排序&#xff0c;会默认按照pair的第一个关键字从小到大进行排序&#xff1a; #include <bits/stdc.h>using namespace std;int main() {vector<pair<int, int> > p;p.push_back…

Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的微…

编写RedisUtil来操作Redis

目录 ​编辑 Redis中文网 第一步&#xff1a;建springboot项目 第二步&#xff1a;导依赖 第三步&#xff1a;启动类 第四步&#xff1a;yml 第五步&#xff1a;Redis配置类 第六步&#xff1a;测试类 第七步&#xff1a;编写工具类 RedisUtil 第八步&#xff1a;编写…

C++核心编程——文件操作

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

基于python集成学习算法XGBoost农业数据可视化分析预测系统

文章目录 基于python集成学习算法XGBoost农业数据可视化分析预测系统一、项目简介二、开发环境三、项目技术四、功能结构五、功能实现模型构建封装类用于网格调参训练模型系统可视化数据请求接口模型评分 0.5*mse 六、系统实现七、总结 基于python集成学习算法XGBoost农业数据可…

国内小白最靠谱的充值chatgpt的方法是什么?

在AI越来越火得时代&#xff0c;大家都想尝试以下ChatGPT与ChatGPTPlus有什么不同&#xff0c;那么我们如何使用靠谱得方式来充值ChatGPT呢&#xff1f; 充值注意事项&#xff1a; 1、一个干净得环境 2、Fomepay得虚拟卡&#xff0c;5347/5561/都可以 3、登录ChatGPT 按图片…

LLM:Training Compute-Optimal Large Language Models

论文&#xff1a;https://arxiv.org/pdf/2203.15556.pdf 发表&#xff1a;2022 前文回顾&#xff1a; OpenAI在2020年提出《Scaling Laws for Neural Language Models》&#xff1a;Scaling Laws(缩放法则&#xff09;也一直影响了后续大模型的训练。其给出的结论是最佳计算效…

工具推荐 |Devv.ai — 最懂程序员的新一代 AI 搜索引擎

介绍 伴随 GPT 的出现&#xff0c;我们可以看到越来越多的 AI 产品&#xff0c;其中也不乏针对程序员做的代码生成工具。 今天介绍的这款产品是一款针对中文开发者的 AI 搜索引擎&#xff0c;Devv.ai 使用 Devv.ai 的使用非常简单&#xff0c;就是传统的搜索场景&#xff…

高级分布式系统-第10讲 分布式控制系统

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 自动化是关于一切人造系统自动、智能、自主、高效和安全运行的科学与技术 计算机控制技术是实现自动化的主要方法和手段 分布式控制技术是伴随着机器大工业生产而诞生的特殊计算机控制技术 计算机控制系统 …

rust获取本地ip地址的方法

大家好&#xff0c;我是get_local_info作者带剑书生&#xff0c;这里用一篇文章讲解get_local_info的使用。 get_local_info是什么&#xff1f; get_local_info是一个获取linux系统信息的rust三方库&#xff0c;并提供一些常用功能&#xff0c;目前版本0.2.4。详细介绍地址&a…

MSSQL-识别扩展extended event(扩展事件)中的时间单位

经常使用sqlserver extended event(扩展事件)&#xff0c;但是总是忘记扩展事件使用的时间单位&#xff0c;不确定它们是 秒、毫秒、还是微秒&#xff1f; 以下下代码能够从 相关DMV中提取description字段内容来识别时间单位&#xff1a; SELECT [p].[name] [package_name],[o…

企业网站建站源码系统:Thinkphp5内核企业网站建站模板源码 带完整的安装代码包以及搭建教程

随着互联网的快速发展&#xff0c;企业对于网站的需求日益增强。为了满足这一市场需求&#xff0c;小编给大家分享一款基于Thinkphp5内核的企业网站建站源码系统。该系统旨在为企业提供一套功能强大、易于使用的网站建设解决方案&#xff0c;帮助企业快速搭建自己的官方网站&am…

探索数据的奥秘:一份深入浅出的数据分析入门指南

数据分析 书籍推荐 入门读物 深入浅出数据分析啤酒与尿布数据之美数学之美 数据分析 Scipy and NumpyPython for Data AnalysisBad Data Handbook集体智慧编程Machine Learning in Action机器学习实战Building Machine Learning Systems with Python数据挖掘导论Machine L…

LLM:Scaling Laws for Neural Language Models (上)

论文&#xff1a;https://arxiv.org/pdf/2001.08361.pdf 发表&#xff1a;2020 摘要1&#xff1a;损失与模型大小、数据集大小以及训练所用计算量成比例&#xff0c;其中一些趋势跨越了七个量级以上。 2&#xff1a;网络宽度或深度等其他架构细节在很大范围内影响较小。3&…