Llama2通过llama.cpp模型量化 WindowsLinux本地部署
Llama2通过llama.cpp模型量化 Windows&Linux本地部署
什么是LLaMA 1 and 2
LLaMA,它是一组基础语言模型,参数范围从7B到65B。在数万亿的tokens上训练的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需求助于专有和不可访问的数据集。特别是,LLaMA-13B在大多数基准测试中都优于GPT-3(175B),并且LLaMA65B与最好的型号Chinchilla-70B和PaLM-540B具有竞争力。
Meta 出品的 Llama 续作 Llama2,一系列模型(7b、13b、70b)均开源可商用。Llama2 在各个榜单上精度全面超过 Llama1,同时也超过此前所有开源模型。
但是对于本机部署大模型,LLaMA要求相对于还是偏高,因此本次使用开源方案llama.cpp进行模型量化,在Windows平台进行CPU量化版本测试,Linux平台进行GPU量化版本测试。
注:以下所有下载步骤均需要科学上网,否则会很折磨。
实验设备详情(供参考)
Windows平台
为笔记本平台,拯救者Y9000P
- CPU: 13th Intel i9-13900HX × \times × 1
- GPU: NVIDIA GeForce RTX4060 (8GB) × \times × 1
- 内存: 32GB
运行情况:CPU流畅运行llama2-13B-chat 8Bit量化版本,卡顿运行16Bit量化版本。GPU版本加速超级快,相当于文心一言或者Chatgpt的生成速度。
运行情况:


Linux平台
实验室服务器
- COU: 9th Intel® Core™ i9-9940X CPU @ 3.30GHz × \times × 14
- GPU: NVIDIA GeForce RTX2080Ti (11GB) × \times × 4
- 内存: 64GB
运行情况:13B和7B都运行十分流程,但70B的不知道为啥突然下载不了了,没法测试。
模型部署详细步骤
下载并配置llama库
-
下载llama
git clone https://github.com/facebookresearch/llama.git -
配置环境
创建虚拟环境,防止之前其他环境安装的包导致的冲突
conda create -n llama python=3.10进入虚拟环境
conda activate llama进入工程目录
cd llama安装环境依赖
pip install -e . -
申请模型下载链接
进入该链接:Mete website申请下载模型,内容如实填写,为了尽快通过,可以填写美国机构和学校,应该会快一些,当时没敢试国内的,怕被拒(被OpenAI搞怕了)
之后会来如下邮件,复制马赛克部分的网址:

-
下载模型
-
Windows平台
sh download.sh -
Linux平台
bash download.sh
之后跟着流程将之前复制的链接粘贴进入即可,然后选择需要下载的模型,关于模型的区别可以自行Bing,chat版本的这里更加推荐,参数量方面7B的一般大部分设备都可以跑,我使用13B版本的也可以正常运行,根据个人所需进行选择。
-
注:Windows平台在下载的时候,可能会面临wget: command not found错误,跟下述链接进行即可
关于在Windows10环境下运行.sh文件报错 wget: command not found的解决办法
-
下载并配置llama.cpp库
-
下载llama.cpp
git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpp -
编译 Build
-
Linux平台
直接进入工程目录make即可:
make我在autodl服务器和实验室服务器实测都没有问题
-
Windows平台
Windows平台需要安装cmake和gcc,这个我本机此前有安装好,如果有没有安装的请自行百度安装
编译:
mkdir buildcd buildcmake ..cmake --build . --config Release
-
-
CUDA加速版编译,添加一部分指令即可
-
Linux平台
make LLAMA_CUBLAS=1 -
Windows平台
mkdir build cd build cmake .. -DLLAMA_CUBLAS=ON cmake --build . --config Release
-
模型量化
-
准备数据
将llama中下载好的数据 (llama-2-7B-chat) 拷贝到llama.cpp中的./models中,同时将llama主目录中的tokenizer_checklist.chk和tokenizer.model也复制到./models中。
参考以下:
G:. │ .editorconfig │ ggml-vocab-aquila.gguf │ ggml-vocab-baichuan.gguf │ ggml-vocab-falcon.gguf │ ggml-vocab-gpt-neox.gguf │ ggml-vocab-llama.gguf │ ggml-vocab-mpt.gguf │ ggml-vocab-refact.gguf │ ggml-vocab-starcoder.gguf │ tokenizer.model │ tokenizer_checklist.chk │ └─13Bchecklist.chkconsolidated.00.pthconsolidated.01.pthparams.json -
进行量化
进入虚拟环境,安装依赖
cd llama.cppconda activate llama安装依赖
pip install -r requirements.txt进行16Bit转换
python convert.py models/13B/这一步如果报错。修改./models/(模型存放文件夹)/params.json
将最后"vocab_size":中的值改为32000即可-
Linux 4 or 8 bit量化
./quantize ./models/7B/ggml-model-f16.gguf ./models/7B/ggml-model-q4_0.gguf q4_0路径根据自己的路径进行调整,如果进行8bit量化,将命令中的q4_0改为q8_0:
./quantize ./models/7B/ggml-model-f16.gguf ./models/7B/ggml-model-q8_0.gguf q8_08bit肯定比4bit好,但根据设备情况量力而行
-
Windows 4 or 8 bit量化
.\build\bin\Release\quantize.exe .\models\13B\ggml-model-f16.gguf .\models\13B\7B\ggml-model-q4_0.gguf q4_0更改bit也参考上述
-
加载并启动模型
CPU版本
-
Windows平台
.\build\bin\Release\main.exe -m .\models\13B\ggml-model-q4_0.gguf -n 256 -t 18 --repeat_penalty 1.0 --color -i -r "User:" -f .\prompts\chat-with-bob.txt -
Linux平台
./main -m ./models/13B/ggml-model-q8_0.gguf -n 256 -t 18 --repeat_penalty 1.0 --color -i -r "User:" -f .\prompts\chat-with-bob.txt
GPU加速
只需在命令中加上加上-ngl 1
其中可以对数量进行修改,最大为35,我在4060上实测20达到最佳
-
Windows平台
.\build\bin\Release\main.exe -m .\models\13B\ggml-model-q4_0.gguf -n 256 -t 18 --repeat_penalty 1.0 --color -i -r "User:" -f .\prompts\chat-with-bob.txt -ngl 20 -
Linux平台
./main -m ./models/13B/ggml-model-q8_0.gguf -n 256 -t 18 --repeat_penalty 1.0 --color -i -r "User:" -f ./prompts/chat-with-bob.txt -ngl 20
在提示符 > 之后输入你的prompt,cmd/ctrl+c中断输出,多行信息以\作为行尾。如需查看帮助和参数说明,请执行./main -h命令。下面介绍一些常用的参数:
-c 控制上下文的长度,值越大越能参考更长的对话历史(默认:512)
-ins 启动类ChatGPT对话交流的instruction运行模式
-f 指定prompt模板,alpaca模型请加载prompts/alpaca.txt
-n 控制回复生成的最大长度(默认:128)
-b 控制batch size(默认:8),可适当增加
-t 控制线程数量(默认:4),可适当增加
--repeat_penalty 控制生成回复中对重复文本的惩罚力度
--temp 温度系数,值越低回复的随机性越小,反之越大
--top_p, top_k 控制解码采样的相关参数
具体信息参考:https://github.com/ggerganov/llama.cpp/tree/master/examples/main
相关文章:
Llama2通过llama.cpp模型量化 WindowsLinux本地部署
Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA,它是一组基础语言模型,参数范围从7B到65B。在数万亿的tokens上训练的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需求…...
Coding面试题之手写线程池
原理图 JDK线程池原理 实现代码 1.线程类(PoolThread) 这个类用于执行任务队列中的任务。 public class PoolThread extends Thread {private final Queue<Runnable> taskQueue;private boolean isStopped false;private long lastTaskTime …...
【objectarx.net】删除零长度曲线和获取零长度曲线的数量
删除零长度曲线和获取零长度曲线的数量...
Win11专业版安装Docker Desktop,并支持映射主机的gpu
一、Windows环境下安装 Docker 必须满足: 1. 64位Windows 11 Pro(专业版和企业版都可以) 2. Microsoft Hyper-V,Hyper-V是微软的虚拟机,在win11上是自带的,我们只需要启动就可以了 二、下载Docker Desktop安装包 方式一:进入官网下载 https://docs.docker.com/desktop…...
Mac代码文本编辑器Sublime Text 4
Sublime Text 4 for Mac拥有快速响应的功能,可以快速加载文件和执行命令,并提供多种语言支持,包括C 、Java、Python、HTML、CSS等。此外,该编辑器还支持LaTeX、Markdown、JSON、XML等技术领域。 Sublime Text 4 for Mac的插件丰富…...
MATLAB中plot函数用法
目录 语法 说明 向量和矩阵数据 表数据 其他选项 示例 创建线图 绘制多个线条 根据矩阵创建线图 指定线型 指定线型、颜色和标记 在特定的数据点显示标记 指定线宽、标记大小和标记颜色 添加标题和轴标签 绘制持续时间并指定刻度格式 基于表绘制坐标 在一个轴…...
win10 安装vscode
1 Download Visual Studio Code - Mac, Linux, Windows 2 this user installer is not meant to be run as an administrator . if ou would like to install vs code for all users i this sys download the system installer instead form are u want to con 提示的意思是&a…...
MATLAB中Arrow 属性说明
目录 颜色和样式 位置 Arrow 属性是箭头的外观和行为。 Arrow 属性控制 Arrow 对象的外观和行为。通过更改属性值,可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…...
MYSQL 慢查询和慢查询日志
在数据库管理中,慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降,影响用户体验。为了帮助识别和解决这些性能问题,数据库管理系统通常提供了慢查询日志,用于记录执行时间超过一定阈值的查询。本文将深入探讨…...
Longhorn跨AZ实现存储高可用
Longhorn跨AZ实现存储高可用 longhorn基础组件功能及其作用这里就不做介绍了 方案一 Longhorn跨AZ的高可用的就是一个PVC的replicas 均匀打散的不同的AZ区域之间,这样当某个AZ挂掉后,engine会立即使用另外一个数据副本,并重建这个副本&…...
maven 私有仓库配置
1.整体库信息 2.配置阿里云库 (可以配置多个库,再引用代理库) 3.建立自己的 发布,快照库 4.建立自由的公共库- 引用所有需要的库 5.maven setting 中配置 用户名密码 <server><id>mv-releases</id><usernam…...
TypeScript: 判断两个数组的内容是否相等
一、直接遍历 // 1.直接遍历 const arr1: any[] ["apple", "banana", NaN]; const arr2: any[] ["apple", NaN, "banana"];function fn1(arr1: any[], arr2: any[]) {// Array.some(): 有一项不满足,返回falseif (arr1.…...
STM32MPU6050角度的读取(STM32驱动MPU6050)
注:文末附STM32驱动MPU6050代码工程链接,需要的读者请自取。 一、MPU6050介绍 MPU6050是一款集成了三轴陀螺仪和三轴加速度计的传感器芯片,由英国飞利浦半导体(现为恩智浦半导体)公司生产。它通过电子接口(…...
海康Visionmaster-环境配置:CSharp 二次开发环境配 置方法
C#二次开发环境的配置方法 以 WinForm 为例,进行 VM 二次开发的环境配置分为三步: 第一步,使用 VS 新建一个框架为.NET Framework 4.6.1 的工程,平台首选 32 位取消勾选,重新生成解决方案,保证工程 Debug 下…...
Xilinx DDR3 MIG系列——ddr3控制器的时钟架构
本节目录 一、ddr3控制器的时钟架构 1、PLL输入时钟——系统时钟system_clk 2、PLL输出时钟——sync_pulse、mem_refclk、freq_refclk、MMCM1的输入时钟 3、MMCM1的输入时钟和输出时钟 4、MMCM2的输入时钟和输出时钟一、ddr3控制器的时钟架构 对于FPGA开发来说,调用IP或者移植…...
2560 动物保护宣传网站设计JSP【程序源码+文档+调试运行】
摘要 本文介绍了一个动物保护宣传网站的系统的设计与实现。该系统包括前台用户模块和后台管理员模块,具有用户注册/登录、新闻、资源库、法律法规、图片赏析、留言板、关于我们、用户后台等功能。通过数据库设计和界面设计,实现了系统的基本功能&#x…...
【算法】牛的旅行(图的直径,floyd算法求最短路)
题目 农民John的农场里有很多牧区,有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言,你能看到至少有两个牧区不连通。 现在,John想在农场里添加一条路径(注意,恰好一条)。 一…...
QML12、QML 对象类型
QML 对象类型 QML 对象类型是可以从中实例化 QML 对象的类型。 在句法术语中,QML 对象类型是一种可用于通过指定类型名称后跟一组包含该对象属性的花括号来声明对象的类型。 这与基本类型不同,基本类型不能以相同的方式使用。 例如,Rectangle 是一个 QML 对象类型:…...
JavaWeb Day08 Mybatis-入门
目录 编辑编辑编辑 一、快速入门程序 ①准备工作 ②引入Mybatis相关依赖,配置Mybatis ③编写SQL(注解/XML) ④单元测试 ⑤相关代码 1.pom.xml 2. application.properties 3.User.java 4. UserMapper.java 5.Test.java ⑥配置…...
【计算机网络笔记】IP分片
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
