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

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.git
    
    cd llama.cpp
    
  • 编译 Build

    • Linux平台

      直接进入工程目录make即可:

      make
      

      我在autodl服务器和实验室服务器实测都没有问题

    • Windows平台

      Windows平台需要安装cmake和gcc,这个我本机此前有安装好,如果有没有安装的请自行百度安装

      编译:

      mkdir build
      
      cd build
      
      cmake ..
      
      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.cpp
    
    conda 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_0
      

      8bit肯定比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.线程类&#xff08;PoolThread&#xff09; 这个类用于执行任务队列中的任务。 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拥有快速响应的功能&#xff0c;可以快速加载文件和执行命令&#xff0c;并提供多种语言支持&#xff0c;包括C 、Java、Python、HTML、CSS等。此外&#xff0c;该编辑器还支持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 对象的外观和行为。通过更改属性值&#xff0c;可以修改箭头的特定方面。使用圆点表示法查询和设置属性。 ar annotation("arrow"); c ar.Color; ar.Color "red"; 颜色和…...

MYSQL 慢查询和慢查询日志

在数据库管理中&#xff0c;慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降&#xff0c;影响用户体验。为了帮助识别和解决这些性能问题&#xff0c;数据库管理系统通常提供了慢查询日志&#xff0c;用于记录执行时间超过一定阈值的查询。本文将深入探讨…...

Longhorn跨AZ实现存储高可用

Longhorn跨AZ实现存储高可用 longhorn基础组件功能及其作用这里就不做介绍了 方案一 Longhorn跨AZ的高可用的就是一个PVC的replicas 均匀打散的不同的AZ区域之间&#xff0c;这样当某个AZ挂掉后&#xff0c;engine会立即使用另外一个数据副本&#xff0c;并重建这个副本&…...

maven 私有仓库配置

1.整体库信息 2.配置阿里云库 &#xff08;可以配置多个库&#xff0c;再引用代理库&#xff09; 3.建立自己的 发布&#xff0c;快照库 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(): 有一项不满足&#xff0c;返回falseif (arr1.…...

STM32MPU6050角度的读取(STM32驱动MPU6050)

注&#xff1a;文末附STM32驱动MPU6050代码工程链接&#xff0c;需要的读者请自取。 一、MPU6050介绍 MPU6050是一款集成了三轴陀螺仪和三轴加速度计的传感器芯片&#xff0c;由英国飞利浦半导体&#xff08;现为恩智浦半导体&#xff09;公司生产。它通过电子接口&#xff08…...

海康Visionmaster-环境配置:CSharp 二次开发环境配 置方法

C#二次开发环境的配置方法 以 WinForm 为例&#xff0c;进行 VM 二次开发的环境配置分为三步&#xff1a; 第一步&#xff0c;使用 VS 新建一个框架为.NET Framework 4.6.1 的工程&#xff0c;平台首选 32 位取消勾选&#xff0c;重新生成解决方案&#xff0c;保证工程 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【程序源码+文档+调试运行】

摘要 本文介绍了一个动物保护宣传网站的系统的设计与实现。该系统包括前台用户模块和后台管理员模块&#xff0c;具有用户注册/登录、新闻、资源库、法律法规、图片赏析、留言板、关于我们、用户后台等功能。通过数据库设计和界面设计&#xff0c;实现了系统的基本功能&#x…...

【算法】牛的旅行(图的直径,floyd算法求最短路)

题目 农民John的农场里有很多牧区&#xff0c;有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径&#xff08;注意&#xff0c;恰好一条&#xff09;。 一…...

QML12、QML 对象类型

QML 对象类型 QML 对象类型是可以从中实例化 QML 对象的类型。 在句法术语中,QML 对象类型是一种可用于通过指定类型名称后跟一组包含该对象属性的花括号来声明对象的类型。 这与基本类型不同,基本类型不能以相同的方式使用。 例如,Rectangle 是一个 QML 对象类型:…...

JavaWeb Day08 Mybatis-入门

目录 ​编辑​编辑​编辑 一、快速入门程序 ①准备工作 ②引入Mybatis相关依赖&#xff0c;配置Mybatis ③编写SQL&#xff08;注解/XML&#xff09; ④单元测试 ⑤相关代码 1.pom.xml 2. application.properties 3.User.java 4. UserMapper.java 5.Test.java ⑥配置…...

【计算机网络笔记】IP分片

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...