当前位置: 首页 > 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、图片文件 分别增加缓存路径的…...

Matlab数字图像处理核心项目实践:包含直方图均衡、空间过滤器增强、傅立叶变换与频域滤波、噪...

Matlab数字图像处理 包含以下内容&#xff1a; 项目 1&#xff1a;直方图均衡 项目 2&#xff1a;使用空间过滤器增强图像 项目 3&#xff1a;频域中的傅立叶变换和滤波 项目 4&#xff1a;噪声模型和降噪 项目 5&#xff1a;使用逆滤波器和维纳滤波器进行图像恢复 项目 6&…...

2026年探访阎良:这三家头疗肩颈养生馆的服务为何备受好评?

在快节奏的现代生活中&#xff0c;头颈肩的亚健康问题几乎成了都市人的“标配”。头痛、失眠、肩颈僵硬&#xff0c;这些困扰背后&#xff0c;是人们对专业、有效且放松的养生服务的迫切需求。近期&#xff0c;笔者深入西安市阎良区&#xff0c;实地探访了三家在本地口碑颇佳的…...

5分钟搞定电脑风扇噪音!FanControl超详细配置指南让你告别“飞机起飞“

5分钟搞定电脑风扇噪音&#xff01;FanControl超详细配置指南让你告别"飞机起飞" 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcod…...

洛谷-入门5-字符串3

P1553 数字反转&#xff08;升级版&#xff09;题目背景以下为原题面&#xff0c;仅供参考:给定一个数&#xff0c;请将该数各个位上数字反转得到一个新数。这次与 NOIp2011 普及组第一题不同的是&#xff1a;这个数可以是小数&#xff0c;分数&#xff0c;百分数&#xff0c;整…...

AMD显卡AI部署实战指南:ROCm模型运行与性能优化

AMD显卡AI部署实战指南&#xff1a;ROCm模型运行与性能优化 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-for…...

如何让微信聊天记录永久留存?WeChatMsg为你打造个人数字档案馆

如何让微信聊天记录永久留存&#xff1f;WeChatMsg为你打造个人数字档案馆 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

3步实现Web界面设计标注高效交付:面向全栈团队的Sketch Measure应用指南

3步实现Web界面设计标注高效交付&#xff1a;面向全栈团队的Sketch Measure应用指南 【免费下载链接】sketch-measure Make it a fun to create spec for developers and teammates 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-measure 在Web开发项目中&#x…...

ofa_image-caption_coco_distilled_en快速部署教程:7860端口WebUI调用全流程详解

ofa_image-caption_coco_distilled_en快速部署教程&#xff1a;7860端口WebUI调用全流程详解 本文介绍如何快速部署和使用ofa_image-caption_coco_distilled_en模型&#xff0c;这是一个专门用于为图片生成英文描述的AI系统。通过简单的Web界面&#xff0c;任何人都能轻松上传图…...

Tree of Thoughts终极指南:5分钟掌握思维树算法原理与实战应用

Tree of Thoughts终极指南&#xff1a;5分钟掌握思维树算法原理与实战应用 【免费下载链接】tree-of-thought-llm [NeurIPS 2023] Tree of Thoughts: Deliberate Problem Solving with Large Language Models 项目地址: https://gitcode.com/gh_mirrors/tr/tree-of-thought-l…...

Segment-and-Track-Anything实战案例:从街景到细胞的全场景应用

Segment-and-Track-Anything实战案例&#xff1a;从街景到细胞的全场景应用 【免费下载链接】Segment-and-Track-Anything An open-source project dedicated to tracking and segmenting any objects in videos, either automatically or interactively. The primary algorith…...