llama.cpp制作GGUF文件及使用

llama.cpp的介绍

llama.cpp是一个开源项目,由Georgi Gerganov开发,旨在提供一个高性能的推理工具,专为在各种硬件平台上运行大型语言模型(LLMs)而设计。这个项目的重点在于优化推理过程中的性能问题,特别是针对CPU环境。以下是关于llama.cpp的几个关键特性:

  1. 高性能推理引擎:llama.cpp使用C语言编写的机器学习张量库ggml,这使得它能够高效地处理大规模的张量运算,从而加速模型推理。

  2. 模型量化工具:项目包含模型量化的功能,允许用户将原本的32位浮点数模型参数量化为16位浮点数,甚至是更低精度的8位或4位整数,从而减少模型大小并显著提高推理速度,这对于在资源受限的设备上运行大模型尤其重要。

  3. 跨平台兼容性:除了支持CPU推理外,llama.cpp还支持CUDA和OpenCL,这意味着它能够在包括桌面计算机、服务器乃至某些移动设备上的GPU上运行,提供了广泛的硬件兼容性。

  4. 易于部署:由于其优化的C++实现,llama.cpp使得在本地CPU上部署大型语言模型变得更加容易,即便是配置较低的设备也能运行这类模型,降低了部署大型AI应用的门槛。

  5. 代码可读性和教育价值:尽管功能强大,llama.cpp的代码结构相对直观且可读性强,适合开发者通过阅读源码来学习大型语言模型的推理技术和底层实现细节。项目文件数量不多,但每个都是精心设计的,便于理解和修改。

  6. 社区支持和活跃度:在GitHub上,该项目拥有大量的stars,表明了其在开发者社区中的高关注度和活跃度。这通常意味着更好的文档、示例以及持续的维护更新。

综上所述,llama.cpp是一个专为性能优化和广泛兼容性设计的工具,它不仅能够帮助研究人员和开发者在不同类型的硬件上高效运行大型语言模型,同时也是学习现代语言模型推理技术的一个优秀资源。

GGUF文件的制作

设备环境如下:Ubuntu20.04、NVIDIA-A800、CUDA Version: 12.0、python 3.10

#代码准备
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp#编译
make# 获取官方模型权重并将其放入./models中
ls ./models
llama-2-7b tokenizer_checklist.chk tokenizer.model
# [可选] 对于使用 BPE 分词器的模型
ls ./models
<folder containing weights and tokenizer json> vocab.json
# [可选] 适用于 Mistral-7B 等 PyTorch.bin 模型
ls ./models
<folder containing weights and tokenizer json># 安装Python依赖项
python3 -m pip install -r requirements.txt# 将模型转换为ggml FP16格式
python3 convert.py models/mymodel/# [可选] 对于使用 BPE 分词器的模型
python convert.py models/mymodel/ --vocab-type bpe# 将模型量化为 4 位(使用 Q4_K_M 方法)
./quantize ./models/mymodel/ggml-model-f16.gguf ./models/mymodel/ggml-model-Q4_K_M.gguf Q4_K_M# 如果现在不支持旧版本,请将 gguf 文件类型更新为当前版本
./quantize ./models/mymodel/ggml-model-Q4_K_M.gguf ./models/mymodel/ggml-model-Q4_K_M-v2.gguf COPY

运行量化模型

# 开始推理 gguf 模型
./main -m ./models/mymodel/ggml-model-Q4_K_M.gguf -p "你好" -n 128

begin
end

# 交互式使用模型
./main -m models/openbuddy-llama3-8b-v21.1-8k/openbuddy-llama3-8b-Q4_K_M.gguf -n 999 -cml

交互式

# 启动兼容openai api 的HTTP server
./server -m models/openbuddy-llama3-8b-v21.1-8k/openbuddy-llama3-8b-Q4_K_M.gguf -c 4096 --host 0.0.0.0 --port 7861

命令行选项可见官方文档

模型量化的精度

根据自己的硬件配置来选择合适的精度

(llamacpp) root@9pp562fqj4j6n-0:/1_11_test/hhh/llama.cpp# ./quantize
usage: ./quantize [--help] [--allow-requantize] [--leave-output-tensor] [--pure] [--imatrix] [--include-weights] [--exclude-weights] [--output-tensor-type] [--token-embedding-type] [--override-kv] model-f32.gguf [model-quant.gguf] type [nthreads]--allow-requantize: Allows requantizing tensors that have already been quantized. Warning: This can severely reduce quality compared to quantizing from 16bit or 32bit--leave-output-tensor: Will leave output.weight un(re)quantized. Increases model size but may also increase quality, especially when requantizing--pure: Disable k-quant mixtures and quantize all tensors to the same type--imatrix file_name: use data in file_name as importance matrix for quant optimizations--include-weights tensor_name: use importance matrix for this/these tensor(s)--exclude-weights tensor_name: use importance matrix for this/these tensor(s)--output-tensor-type ggml_type: use this ggml_type for the output.weight tensor--token-embedding-type ggml_type: use this ggml_type for the token embeddings tensor--keep-split: will generate quatized model in the same shards as input  --override-kv KEY=TYPE:VALUEAdvanced option to override model metadata by key in the quantized model. May be specified multiple times.
Note: --include-weights and --exclude-weights cannot be used togetherAllowed quantization types:2  or  Q4_0    :  3.56G, +0.2166 ppl @ LLaMA-v1-7B3  or  Q4_1    :  3.90G, +0.1585 ppl @ LLaMA-v1-7B8  or  Q5_0    :  4.33G, +0.0683 ppl @ LLaMA-v1-7B9  or  Q5_1    :  4.70G, +0.0349 ppl @ LLaMA-v1-7B19  or  IQ2_XXS :  2.06 bpw quantization20  or  IQ2_XS  :  2.31 bpw quantization28  or  IQ2_S   :  2.5  bpw quantization29  or  IQ2_M   :  2.7  bpw quantization24  or  IQ1_S   :  1.56 bpw quantization31  or  IQ1_M   :  1.75 bpw quantization10  or  Q2_K    :  2.63G, +0.6717 ppl @ LLaMA-v1-7B21  or  Q2_K_S  :  2.16G, +9.0634 ppl @ LLaMA-v1-7B23  or  IQ3_XXS :  3.06 bpw quantization26  or  IQ3_S   :  3.44 bpw quantization27  or  IQ3_M   :  3.66 bpw quantization mix12  or  Q3_K    : alias for Q3_K_M22  or  IQ3_XS  :  3.3 bpw quantization11  or  Q3_K_S  :  2.75G, +0.5551 ppl @ LLaMA-v1-7B12  or  Q3_K_M  :  3.07G, +0.2496 ppl @ LLaMA-v1-7B13  or  Q3_K_L  :  3.35G, +0.1764 ppl @ LLaMA-v1-7B25  or  IQ4_NL  :  4.50 bpw non-linear quantization30  or  IQ4_XS  :  4.25 bpw non-linear quantization15  or  Q4_K    : alias for Q4_K_M14  or  Q4_K_S  :  3.59G, +0.0992 ppl @ LLaMA-v1-7B15  or  Q4_K_M  :  3.80G, +0.0532 ppl @ LLaMA-v1-7B17  or  Q5_K    : alias for Q5_K_M16  or  Q5_K_S  :  4.33G, +0.0400 ppl @ LLaMA-v1-7B17  or  Q5_K_M  :  4.45G, +0.0122 ppl @ LLaMA-v1-7B18  or  Q6_K    :  5.15G, +0.0008 ppl @ LLaMA-v1-7B7  or  Q8_0    :  6.70G, +0.0004 ppl @ LLaMA-v1-7B1  or  F16     : 13.00G              @ 7B0  or  F32     : 26.00G              @ 7BCOPY    : only copy tensors, no quantizing

安卓上运行GGUF

手机配置

  • 型号 Mi 9T
  • Android11
  • 运行内存 6GB
  1. 工具准备
    手机端安装termux,官网
    电脑端准备好Android NDK,将其解压至某个文件夹
    ndk
    ndk路径

  2. 使用Android NDK构建llama.cpp项目

    # 代码准备,我担心影响上边编译好的,重新拉了一份代码,其实是不影响的
    git clone https://github.com/ggerganov/llama.cpp
    cd llama.cpp#开始构建
    mkdir build-android
    cd build-android# 查看你的ndk文件夹路径
    export NDK=<your_ndk_directory>cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23 -DCMAKE_C_FLAGS=-march=armv8.4a+dotprod ..make
    

    上面代码执行完以后,目录下会生成bin文件夹,如下图所示
    构建完成

  3. 将构建后的文件和模型文件移动到手机端
    我这边采用的usb文件传输,直接复制过去了
    文件传输
    模型文件记得也要传输过去

  4. 手机端工作准备
    手机打开termux
    运行以下命令开启SD卡访问权限

    termux-setup-storage
    

    sd权限

    执行完这个命令后,手机会弹出是否允许访问权限的,一定要点允许。
    移动bin文件夹和模型文件到termux的根目录下
    文件移动

  5. 文件启动
    文件移动完成后,进入到bin文件夹,执行以下命令给所有的文件添加可执行权限

    chmod +x ./*
    

    添加可执行权限
    使用以下命令启动模型

    ./main -m ../openbuddy-llama3-8b-Q2_K.gguf -n 128 -cml
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MultiBooth:文本驱动的多概念图像生成技术

在人工智能的领域&#xff0c;将文本描述转换为图像的技术正变得越来越先进。最近&#xff0c;一个由清华大学和Meta Reality Labs的研究人员组成的团队&#xff0c;提出了一种名为MultiBooth的新方法&#xff0c;它能够根据用户的文本提示&#xff0c;生成包含多个定制概念的图…

基于大语言模型的Agent的探索与实践

AI代理是人工智能领域的核心概念之一&#xff0c;它指的是能够在环境中感知、做出决策并采取行动的计算实体。代理可以是简单的&#xff0c;如自动化的网页爬虫&#xff0c;也可以是复杂的&#xff0c;如能够进行战略规划和学习的自主机器人。 AI代理的概念最早源于哲学探讨&am…

python:画折线图

import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties# 设置新宋体字体的路径 font_path D:/reportlab/simsun/simsun.ttf# 加载新宋体字体 prop FontProperties(fnamefont_path)""" # 读取 xlsx 文件 d…

ESP-WROOM-32配置Arduino IDE开发环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载Arduino IDE二、安装工具集三、测试样例1.选则开发板2.连接开发板3.示例程序 四、使用官方示例程序总结 前言 之前用了很多注入STM32、树莓派Pico和Ar…

探索Java的未来

目录 一、云计算与大数据 二、人工智能与机器学习 三、物联网与边缘计算 四、安全性与性能优化 五、社区与生态 Java&#xff0c;作为一种广泛使用的编程语言&#xff0c;自其诞生以来就以其跨平台性、面向对象特性和丰富的库资源赢得了开发者的青睐。然而&#xff0c;随着…

【漏洞复现】Apahce HTTPd 2.4.49(CVE-2021-41773)路径穿越漏洞

简介&#xff1a; Apache HTTP Server是一个开源、跨平台的Web服务器&#xff0c;它在全球范围内被广泛使用。2021年10月5日&#xff0c;Apache发布更新公告&#xff0c;修复了Apache HTTP Server2.4.49中的一个路径遍历和文件泄露漏洞&#xff08;CVE-2021-41773&#xff09;。…

报错(已解决):无法加载文件 D:\code\NodeJs\pnpm.ps1,因为在此系统上禁止运行脚本。

问题&#xff1a; 在vscode运行uniapp项目需要拉取全部依赖&#xff0c;需要使用到pnpm&#xff0c;在vscode终端运行命令&#xff1a;pnpm install后报错&#xff1a; 解决办法&#xff1a; 1&#xff1a;我未安装pnpm&#xff0c;首先打开电脑cmd&#xff0c;运行下列命令&a…

锂电池恒流恒压CCCV充电模型MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; CCCV简介 CCCV充电过程是恒流充电&#xff08;CC&#xff09;和恒压充电&#xff08;CV&#xff09;的结合。在CC阶段对电池施加恒定电流&#xff0c;以获得更快的充电速度&#xff0c;此时电池电压持续升高…

现货黄金今日行情分析:昨日高低点法

进行交易之前&#xff0c;投资者要对现货黄金今日行情进行一波分析&#xff0c;我们交易决策应该建立在合理分析的基础之上。那么打开市场交易软件看到现货黄金今日行情之后&#xff0c;该如何着手进行分析呢&#xff1f;下面我们就来讨论一下具体的方法。 要进行现货黄金今日行…

MATLAB 点云随机赋色 (68)

MATLAB 点云随机赋色 (68) 一、算法介绍二、算法介绍1.代码2.结果三、数据链接一、算法介绍 读取的点云本身带有颜色信息,有时我们需要为每个点随机赋予一种颜色,下面是具体效果和实现代码,以及使用的数据: 二、算法介绍 1.代码 代码如下(示例): % 读取点云文件 f…

Nacos Docker 快速部署----解决nacos鉴权漏洞问题

Nacos Docker 快速部署 1. 说明 1.1 官方文档 官方地址 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html docker启动文件的gitlhub地址 https://github.com/nacos-group/nacos-docker.git 问题&#xff1a; 缺少部分必要配置与说明 1.2 部署最新版本Nacos&…

mysql: docker 异常 - mbind: Operation not permitted

mbind: Operation not permitted 前言&#xff1a;正文:结论 &#xff1a; 前言&#xff1a; 用数据库处理平台问题今天报错&#xff0c;mbind: Operation not permitted。 mbind 不允许操作&#xff0c;一头雾水这是什么意思。 网上找了很多资料大概意思是&#xff1a; 这个错…

《21天学通C++》(第二十章)STL映射类(map和multimap)

为什么需要map和multimap&#xff1a; 1.查找高效&#xff1a; 映射类允许通过键快速查找对应的值&#xff0c;这对于需要频繁查找特定元素的场景非常适合。 2.自动排序&#xff1a; 会自动根据键的顺序对元素进行排序 3.多级映射&#xff1a; 映射类可以嵌套使用&#xff0c;创…

感谢有你 | FISCO BCOS 2024年度第一季度贡献者榜单

挥别春天&#xff0c;FISCO BCOS开源社区迎来了2024年第一季度的共建成果。FISCO BCOS秉承对区块链技术的信仰&#xff0c;汇聚超过5000家企业机构、10万余名个人成员共建共治共享&#xff0c;持续打造更加活跃更加繁荣的开源联盟链生态圈。 开启夏日&#xff0c;我们见证了社…

2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学

既有适合小白学习的零基础资料&#xff0c;也有适合3年以上经验的小伙伴深入学习提升的进阶课程&#xff0c;涵盖了95%以上软件测试知识点&#xff0c;真正体系化&#xff01; 由于文件比较多&#xff0c;这里只是将部分目录截图出来&#xff0c;全套包含大厂面经、学习笔记、…

短信群发公司

伴随着移动互联网和智能手机的普及&#xff0c;短信群发成为了企业与个人之间高效沟通的一种重要方式。短信群发公司应运而生&#xff0c;致力于为用户提供专业、安全、高效的群发服务。 服务内容 短信群发公司提供多样化的服务内容&#xff0c;满足不同用户的需求。短信群发公…

百面算法工程师 | 支持向量机面试相关问题——SVM

本文给大家带来的百面算法工程师是深度学习支持向量机的面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习算法工程师面试问题&#xff0c;并提供参考的回答…

Tensorflow2.0笔记 - 循环神经网络RNN做IMDB评价分析

本笔记记录使用SimpleRNNCell做一个IMDB评价系统情感二分类问题的例子。 import os import time import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics, Inputos.envir…

2024.5.9

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->resize(1000,600);this->setFixedSize(1000,600);//设置按钮大小位置完成btn1 new QPushButton(&…

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master‘ of

【已解决】直接在远程新增文件本地再提交报Merge branch ‘master’ of … 1、问题产生背景 直接在远程仓库新建了md文件&#xff0c;本地库修改了文件已添加到暂存区之后再提交报错 2、分析 远程新建文件产生变更&#xff0c;版本号与本地拿到的不一致&#xff0c;本地再次提…