当前位置: 首页 > 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;…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

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

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