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 操作系统。
对于服务器主要做了如下调整:
- 安装git
- 升级gcc版本(否则在编译llama.cpp时会报错)
- 升级python到3.10.5 以上版本
下载和安装
- 通过git 拉取项目
git clone https://github.com/ggerganov/llama.cpp
- 编译
make
- 下载模型
llama.cpp项目提供了脚本,可以将网上下载的开源模型文件转换成F16格式,然后再使用脚本进行向量化,生成4-bit的gguf格式,这种格式的模型文件大大减少了模型体积,加快了推理速度,并且相比于F16格式并没有显著降低推理效果 (请注意这一切都是我从文档得知的结论,我本身并未进行效果对比测试)。
到这一步的时候,文档是让你自己选择模型,去huggingface进行下载。考虑到LLaMa 本身对中文支持并不好,并且,LLaMa本身是个基座模型,并不适用于对话类场景(也就是我们平时用的ChatGPT这种),因此,我选择了一个开源的基于LLaMa2的中文Alpaca模型 Chinese-LLaMA-Alpaca-2,最有意思的是,这个模型提供了一个RLHF版本,经过精调,在 正确价值观方面获得了显著性能提升(内涵)。
总而言之,考虑到内存、CPU性能限制,但是对效果又想有点追求,我直接在huggingface下载了 7B级别的 q4_k.gguf 和 q6_k.gguf 两个版本的模型文件进行测试。下载地址:https://huggingface.co/hfl/chinese-alpaca-2-7b-rlhf-gguf/tree/main
- 将模型文件上传到测试服务器,进入
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,也成了一门学问
下一步思路
- 尝试使用llama.cpp的server功能,搭建一个简单的web服务,体验通过api调用大模型
- 尝试使用 通义千问1.8B-Chat模型 对比一下效果
- 尝试使用LangChain框架结合llama.cpp
- 尝试基于LangChain框架,本地构建一个简单的文档AI应用,通过将文档向量化和搜索之后,调用大模型进行回答
- 尝试大模型微调…
参考
- Chinese-LLaMA-Alpaca-2
- llama.cpp
相关文章:
LLaMa2 Chat gpt 大模型本地部署初体验
一直想在自己电脑或者测试环境随便找台服务器尝试部署一下“大模型”,但“大模型”对于内存和GPU的要求令人望而却步,层出不穷的各种术语也令人困惑,有点难以下手。 经过一段时间,在百度千帆大模型平台、讯飞星火大模型平台、魔搭…...
leetcode-344. 反转字符串、9. 回文数
题目1: 解题方法 直接用reverse()即可 代码: 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月开始,把手头闲置或坏的电子产品(CPU风扇,充电宝,台灯等),统统卖掉了。每个还是赚钱了,不多,主要就是想卖掉,好的继续发挥余热,坏的有人修好利用。 …...
记录下载安装rabbitmq(Linux) 并整合springboot--详细版(全)
下载rabbitmq(Linux): erlang压缩包: https://share.weiyun.com/TGhfV8eZ rabbitMq-server压缩包: https://share.weiyun.com/ZXbUwWHD (因为RabbitMQ采用 Erlang 实现的工业级的消息队列(MQ)服务器&#…...
算法学习系列(二十二):最短路问题
目录 引言一、最短路问题二、朴素Dijkstra算法三、堆优化版的Dijkstra算法四、Bellman-Ford算法五、SPFA算法六、Floyd算法 引言 这个最短路问题可以说是图论当中的基础问题,不管你干什么只要涉及图论中的问题的话,最短路问题都是你不可避免的ÿ…...
【Spring Boot】SpringMVC入门
1.什么是springMVC MVC就是把一个项目分成了三部分: MVC是一种思想。Spring进行了实现,称为Spring MVC。SpringBoot是创建SpringMVC项目的一种方式而已。springMVC对于MVC做出了一些改变: 当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页…...
itextpdf 之 html 转 pdf 问题处理
1. Font Provider contains zero fonts. At least one font shall be present 此问题出现的原因是 字体设置不成功,解决方法就是排查设置字体的代码。 需要特别注意的是项目打包后项目中所有文件层次会出现变动,使用何种方式获取字体文件会直接影响到字…...
关于tex中的表格设置
文章目录 控制表格列宽和行高控制表格列宽的同时实现居中tex中多表格排列单元格的合并与分割对单个单元格进行操作 控制表格列宽和行高 将下面的代码放在table环境内,放在tabular环境外 调整表格宽度和高度: \resizebox{\textwidth}{2cm}{%第一个{}是表…...
huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件
文章目录 一、找到需要下载的huggingface文件二、准备工作(一)安装git-lfs(二) 配置git ssh 三、检查ssh连接huggingface是否成功 一、找到需要下载的huggingface文件 huggingface官网链接:https://huggingface.co/ 以…...
使用C++读取SQL Server数据库中的数据并转换为UNICODE类型
要使用C读取SQL Server数据库中的数据并转换为UNICODE类型,可以使用ODBC库和UNICODE编码函数。 首先,确保已安装SQL Server的ODBC驱动程序,并在项目中包含ODBC头文件<sql.h>和<sqlext.h>。 接下来,可以按照以下步骤进…...
WPF应用程序生存期以及相关事件
WPF 应用程序的生存期会通过 Application 引发的几个事件来加以标记,相关事件对应着应用程序何时启动、激活、停用和关闭。 应用程序生存期事件 • 独立应用程序(传统风格的 Windows 应用程序,这些应用程序作为要安装到客户端计算机并从客户端计算机运…...
【Git】任何位置查看git日志
需求 现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable ,需要查看其下文件 D:\z_workspace\jflowable\src\main\java\com\xzbd\jflowable\controller\TestController.java 的日志。 分析 一般的思路是,进入 jflowable 项目&#…...
Socket通讯使用的坑-消息合并发送-解决方法
关联文章 Socket通讯使用的坑-消息合并发送-CSDN博客 解决方法 /// <summary> /// 公共方法 /// </summary> public static class CommonMethods {/// <summary>/// 多个JSON对象字符串转成JSON字符串列表/// </summary>/// <param name"j…...
【Linux】基本指令
Hello everbody!这次咱们紧接着上一篇文章,继续介绍Linux操作系统的一些基本指令。这些指令是入门级别的,比较基础的。相当于windows中文件的复制,重命名,创建文件,创建目录之类的,还有如何在Linux中写c语言…...
JS中数组的相关方法介绍
push() 将一个或多个元素添加到数组的末尾,并返回新的长度。 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,arr 现在是 [1, …...
mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器
mybtis动态SQL注解 动态SQL注解脚本动态SQL方法中构建SQLSQL语句构造器 动态SQL注解 分类: 脚本动态SQL:XML配置方式的动态SQL,是用<script>的方式把它照搬过来,用注解来实现。适用于xml配置转换到注解配置方法中构建SQL&…...
TikTok电商加快闭环,独享IP为运营带来哪些好处?
近日有消息称TikTok电商在加快闭环,以后商家可能无法继续在TikTok上为其他电商平台或独立站引流了。如今“TikTok Shop Shopping Center”平台正在构建,将各种购物渠道整合为一体,这可能是一种趋势,意味着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缓存静态资源,如js、css、图片等,避免对静态资源的访问直接穿透到后端的j2ee应用侧,提高后端j2ee应用的运行效率。 配置方法 针对js、css、图片文件 分别增加缓存路径的…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
