当前位置: 首页 > news >正文

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

一直想在自己电脑或者测试环境随便找台服务器尝试部署一下“大模型”,但“大模型”对于内存和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

相关文章:

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

一直想在自己电脑或者测试环境随便找台服务器尝试部署一下“大模型”&#xff0c;但“大模型”对于内存和GPU的要求令人望而却步&#xff0c;层出不穷的各种术语也令人困惑&#xff0c;有点难以下手。 经过一段时间&#xff0c;在百度千帆大模型平台、讯飞星火大模型平台、魔搭…...

leetcode-344. 反转字符串、9. 回文数

题目1&#xff1a; 解题方法 直接用reverse()即可 代码&#xff1a; class Solution(object):def reverseString(self, s):""":type s: List[str]:rtype: None Do not return anything, modify s in-place instead."""return s.reverse()如果不…...

卖二手的教训:坏了要及时售后

自去年12月开始&#xff0c;把手头闲置或坏的电子产品&#xff08;CPU风扇&#xff0c;充电宝&#xff0c;台灯等&#xff09;&#xff0c;统统卖掉了。每个还是赚钱了&#xff0c;不多&#xff0c;主要就是想卖掉&#xff0c;好的继续发挥余热&#xff0c;坏的有人修好利用。 …...

记录下载安装rabbitmq(Linux) 并整合springboot--详细版(全)

下载rabbitmq&#xff08;Linux&#xff09;&#xff1a; erlang压缩包&#xff1a; https://share.weiyun.com/TGhfV8eZ rabbitMq-server压缩包&#xff1a; https://share.weiyun.com/ZXbUwWHD &#xff08;因为RabbitMQ采用 Erlang 实现的工业级的消息队列(MQ)服务器&#…...

算法学习系列(二十二):最短路问题

目录 引言一、最短路问题二、朴素Dijkstra算法三、堆优化版的Dijkstra算法四、Bellman-Ford算法五、SPFA算法六、Floyd算法 引言 这个最短路问题可以说是图论当中的基础问题&#xff0c;不管你干什么只要涉及图论中的问题的话&#xff0c;最短路问题都是你不可避免的&#xff…...

【Spring Boot】SpringMVC入门

1.什么是springMVC MVC就是把一个项目分成了三部分&#xff1a; MVC是一种思想。Spring进行了实现,称为Spring MVC。SpringBoot是创建SpringMVC项目的一种方式而已。springMVC对于MVC做出了一些改变&#xff1a; 当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页…...

itextpdf 之 html 转 pdf 问题处理

1. Font Provider contains zero fonts. At least one font shall be present 此问题出现的原因是 字体设置不成功&#xff0c;解决方法就是排查设置字体的代码。 需要特别注意的是项目打包后项目中所有文件层次会出现变动&#xff0c;使用何种方式获取字体文件会直接影响到字…...

关于tex中的表格设置

文章目录 控制表格列宽和行高控制表格列宽的同时实现居中tex中多表格排列单元格的合并与分割对单个单元格进行操作 控制表格列宽和行高 将下面的代码放在table环境内&#xff0c;放在tabular环境外 调整表格宽度和高度&#xff1a; \resizebox{\textwidth}{2cm}{%第一个{}是表…...

huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件

文章目录 一、找到需要下载的huggingface文件二、准备工作&#xff08;一&#xff09;安装git-lfs&#xff08;二&#xff09; 配置git ssh 三、检查ssh连接huggingface是否成功 一、找到需要下载的huggingface文件 huggingface官网链接&#xff1a;https://huggingface.co/ 以…...

使用C++读取SQL Server数据库中的数据并转换为UNICODE类型

要使用C读取SQL Server数据库中的数据并转换为UNICODE类型&#xff0c;可以使用ODBC库和UNICODE编码函数。 首先&#xff0c;确保已安装SQL Server的ODBC驱动程序&#xff0c;并在项目中包含ODBC头文件<sql.h>和<sqlext.h>。 接下来&#xff0c;可以按照以下步骤进…...

WPF应用程序生存期以及相关事件

WPF 应用程序的生存期会通过 Application 引发的几个事件来加以标记&#xff0c;相关事件对应着应用程序何时启动、激活、停用和关闭。 应用程序生存期事件 • 独立应用程序(传统风格的 Windows 应用程序&#xff0c;这些应用程序作为要安装到客户端计算机并从客户端计算机运…...

【Git】任何位置查看git日志

需求 现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable &#xff0c;需要查看其下文件 D:\z_workspace\jflowable\src\main\java\com\xzbd\jflowable\controller\TestController.java 的日志。 分析 一般的思路是&#xff0c;进入 jflowable 项目&#…...

Socket通讯使用的坑-消息合并发送-解决方法

关联文章 Socket通讯使用的坑-消息合并发送-CSDN博客 解决方法 /// <summary> /// 公共方法 /// </summary> public static class CommonMethods {/// <summary>/// 多个JSON对象字符串转成JSON字符串列表/// </summary>/// <param name"j…...

【Linux】基本指令

Hello everbody!这次咱们紧接着上一篇文章&#xff0c;继续介绍Linux操作系统的一些基本指令。这些指令是入门级别的&#xff0c;比较基础的。相当于windows中文件的复制&#xff0c;重命名&#xff0c;创建文件&#xff0c;创建目录之类的&#xff0c;还有如何在Linux中写c语言…...

JS中数组的相关方法介绍

push() 将一个或多个元素添加到数组的末尾&#xff0c;并返回新的长度。 let arr [1, 2, 3]; arr.push(4); // arr 现在是 [1, 2, 3, 4] pop() 删除并返回数组的最后一个元素 let arr [1, 2, 3, 4]; let last arr.pop(); // last 现在是 4&#xff0c;arr 现在是 [1, …...

mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器

mybtis动态SQL注解 动态SQL注解脚本动态SQL方法中构建SQLSQL语句构造器 动态SQL注解 分类&#xff1a; 脚本动态SQL&#xff1a;XML配置方式的动态SQL&#xff0c;是用<script>的方式把它照搬过来&#xff0c;用注解来实现。适用于xml配置转换到注解配置方法中构建SQL&…...

TikTok电商加快闭环,独享IP为运营带来哪些好处?

近日有消息称TikTok电商在加快闭环&#xff0c;以后商家可能无法继续在TikTok上为其他电商平台或独立站引流了。如今“TikTok Shop Shopping Center”平台正在构建&#xff0c;将各种购物渠道整合为一体&#xff0c;这可能是一种趋势&#xff0c;意味着TikTok逐渐从社交应用转型…...

LaTeX系列4——列表

无序列表 \documentclass[UTF-8]{ctexart}\begin{document} \begin{itemize}\item{列表项1}\item{列表项2}\item{列表项3} \end{itemize} \end{document} 有序列表 \documentclass[UTF-8]{ctexart}\begin{document} \begin{enumerate}\item{列表项1}\item{列表项2}\item{列表…...

JNI笔记

JNI笔记 背景Demo代码JNI.javaMainActivity.javaAndroid.mkApplication.mkcom_stone_javacallc_JNI.hjavacallc.cbuild.gradle 背景 Demo代码 代码结构 JNI.java package com.stone.javacallc;/*** Created by stoneWang* Created on 2024/1/16* java调用C*/ public class …...

使用nginx的proxy_cache实现静态资源的缓存

nginx的版本 ./nginx -v nginx version: nginx/1.9.15需求 要求nginx缓存静态资源&#xff0c;如js、css、图片等&#xff0c;避免对静态资源的访问直接穿透到后端的j2ee应用侧&#xff0c;提高后端j2ee应用的运行效率。 配置方法 针对js、css、图片文件 分别增加缓存路径的…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...