使用 300 元的显卡推理 Qwen1.5-14B

本文地址:blog.lucien.ink/archives/546

一直以来模型推理成本对于想要使用大模型却又注重隐私的用户来说都是个难题,今天在这里探讨一下如何用尽可能低的成本去获得尽可能高的模型性能。

曾经尝试过用 Tesla P4(目前市场价 300 元,7.5G 显存)使用 vllm 去跑 GPTQ 量化版本的 Qwen 7B,提示显卡太旧无法支持 GPTQ,后来这张卡就被我拉去跑 Stable Diffusion 了。

现如今 Qwen1.5 问世,同时 Qwen 团队也放出了 gguf 格式的模型,从 0.5B 至 72B 都有,甚至从 q2_k 到 q8_0 都有,还很贴心的放了 模型大小量化方法 的困惑度矩阵,这令我狠狠地心动了,果断掏出我的 P4 再战一回。

在这篇文章中,我将借助 llama.cpp 采用 GPU + CPU 混合计算的形式,使用 Tesla P4 来推理 Qwen1.5-14B-Chat,支持 2048 上下文并且达到 11 tokens/s 左右的速度。

Sizefp16q8_0q6_kq5_k_mq5_0q4_k_mq4_0q3_k_mq2_k
0.5B34.2034.2234.3133.8034.0234.2736.7438.2562.14
1.8B15.9915.9915.9916.0916.0116.2216.5417.0319.99
4B13.2013.2113.2813.2413.2713.6113.4413.6715.65
7B14.2114.2414.3514.3214.1214.3514.4715.1116.57
14B10.9110.9110.9310.9810.8810.9210.9211.2412.27
72B7.977.997.997.998.018.008.018.068.63

部署

运行环境参考之前写的 Debian 下 CUDA 生产环境配置笔记,不赘述。在这里简述下电脑配置:CPU i3-12100、8G RAM DDR4、Tesla P4(7.5GB 显存)。

再次强调下,最便宜的就是这张显卡了,市场价 300 块。

下载模型文件

前往 Qwen1.5-14B-Chat-GGUF/files 选择心仪的量化模型。

在这里选择的是 qwen1_5-14b-chat-q2_k.gguf,虽然是 q2_k 量化,但其在维基百科数据集上的困惑度仍旧是小于 fp16 的 7B,所以其实际表现 可能 是要更好。

使用 docker compose 部署

LLaMA.cpp HTTP Server

这 3 个参数会直接决定模型能不能跑起来,以及跑起来的效果,在这里我直接放出适用于 Tesla P4 的参数,可以直接抄作业:

  • --n-gpu-layers 40 代表有 40 层模型将被加载进 VRAM(14B-Chat 总共有 41 层)。
  • -c 2048 代表模型总上下文长度(模型本身支持 32K,但在这里限定 2K)。
  • --batch-size 256 代表在处理 Prompt 时的 batch size,比如你的 prompt 拥有 768 个 token,那么就会被分为 3 个 batch 去 inferece。这个数值默认是 512,在这里为了节省显存,调整为 256(会拖慢服务处理 prompt 的速度)。

其它的参数官方文档写的较为清晰,有啥不明白的直接 --help 一下就行,在这里直接贴出 compose.yml 文件,不赘述。

version: "3"services:qwen2-llama-cpp:container_name: qwen2-llama-cppimage: ghcr.io/ggerganov/llama.cpp:server-cudavolumes:- /mnt/nas/huggingface/model/nlp/Qwen/Qwen1.5-14B-Chat-GGUF/qwen1_5-14b-chat-q2_k.gguf:/model.gguf:rocommand: "-m /model.gguf --host 0.0.0.0 --port 8000 --n-gpu-layers 40 -c 2048 --batch-size 256 --threads 4 --alias this_is_a_model_name --api-key this_is_a_api_key"shm_size: 8GBrestart: alwaysports:- 8000:8000deploy:resources:reservations:devices:- driver: nvidiadevice_ids: ["0"]capabilities: [gpu]

调用

llama.cpp 官方支持了非常多样化的 API 调用形式,为了缩短篇幅,在这里我只列举 OpenAI API 格式的调用,因为围绕 OpenAI API 的社区产品会更加多样化一些。

from openai import OpenAIclient = OpenAI(base_url="http://192.168.1.2:8000/v1", api_key="this_is_a_api_key")stream = client.chat.completions.create(model="this_is_a_model_name",messages=[{"role": "user", "content": "给我讲一个故事。"}],stream=True,
)
for chunk in stream:print(chunk.choices[0].delta.content or "", end="", flush=True)

推理速度

在这里简单测试一下推理速度:

Token 数量耗时速率
prompt167213.43 s124.46 tokens/s
predict51145.18 s11.31 tokens/s

视频:用 300 元的显卡推理 Qwen1.5-14B 效果展示

总结

本文探索了如何使用一张 300 元的显卡借助 llama.cpp 来推理 Qwen1.5-14B-Chat 的 q2_k 量化模型,获得不慢的推理速度与不俗的性能表现。

值得注意的是,可以观察到视频中在 predict 期间,GPU 计算的利用率是没有达到 100% 的,原因是因为我们将一部分计算交给了 CPU,数据交换以及 CPU 运算增大了 GPU 的数据等待时间。

解决这个问题也有几个改进点:

  1. 换用性能更强的 CPU
  2. 换用带宽更高的 RAM
  3. 将所有模型都进 VRAM
    3.1 换用更小的上下文长度,比如 1024
    3.2 换用更大的显存

从工业的角度讲,Tesla P4 可能是目前市面上能买到的 价格/显存 性价比较高的一款显卡了,8 张 P4(2400 元,60G 显存,600W 功耗)能推理精度较高的 72B 的模型,如果不在意功耗的话,配合退役的服务器能将整机成本控制在 3000 元左右,对于工业上自建推理服务还算一个不错的选择。

但其缺点也较为明显,主要来自于其年代久远,sm 版本较低、不支持 GPTQ 等依赖新 op 的 方法、不支持 bf16 等等。得益于 llama.cpp 这样的项目存在,这张卡才能在现如今的深度学习环境下焕发新春。

相关资料

  1. llama.cpp
  2. Debian 下 CUDA 生产环境配置笔记
  3. modelscope.cn/qwen/Qwen1.5-14B-Chat-GGUF

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

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

相关文章

大学生课程|R|课程论文作业(包括数据集免费获取)

免费课程资源获取方式:https://download.csdn.net/download/weixin_68126662/88984330 用R Studio分别用线性回归,多项式回归,样条回归和回归森林分析电影IMDB得分,任务: 展示哪些变量是最好的predictor哪些是最差的…

删除 Oracle 软件和数据库教程

1.使用 deinstall 工具删除安装的 Oracle 软件的可执行文件和配置文件 [oracleocpstudy admin]$ cd $ORACLE_HOME [oracleocpstudy db_1]$ cd deinstall [oracleocpstudy deinstall]$ ls bootstrap_files.lst bootstrap.pl deinstall deinstall.pl deinstall.xml jlib …

KubeSphere集群安装-nfs分布式文件共享-对接Harbor-对接阿里云镜像仓库-遇到踩坑记录

KubeSphere安装和使用集群版 官网:https://www.kubesphere.io/zh/ 使用 KubeKey 内置 HAproxy 创建高可用集群:https://www.kubesphere.io/zh/docs/v3.3/installing-on-linux/high-availability-configurations/internal-ha-configuration/ 特别注意 安装前注意必须把当前使…

AG32 MCU以太网应用实例demo

一. 前言 AGM32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设,以及兼容的引脚和功能。AG32F407系列产品具有卓越的品质,稳定性和卓越的价格价值。 AG32产品线支持其所有接口外设尽可能接近主流兼容性,并提供丰富的参考设计…

【C++】类与结构体

类和结构体是面向对象编程中两种常见的数据类型定义方式,它们之间的区别主要体现在以下几个方面: 成员默认访问权限:在类中,默认情况下成员的访问权限是 private 的,即只能被类内部的成员函数访问;而在结构…

排序算法:快速排序(非递归)

文章目录 一、先建立一个栈二、代码编写 !](https://img-blog.csdnimg.cn/direct/870dd101173d4522862e4459b32237a3.png) 先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;^ _ ^<3 ❤️ ❤️ ❤️ 码字不易&#xff0c;大家的支持就是我坚持下去的动力…

旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办

前提条件 电池需要20&#xff05;&#xff08;就是电池没有报废&#xff09;且电脑接好电源&#xff0c;千万别断电&#xff0c;电脑会变成砖头的 解决办法 更新bios即可解决&#xff0c;去对应品牌官网下载最新的bios版本就行了 网上都是一些更新驱动啊

TensorFlow 和 Keras 在 R 中使用长短期记忆 (LSTM) 识别作物类型

背景 在广阔的互联网中,人们可能期望找到关于任何给定主题的大量资源。然而,当基础长短期记忆(LSTM)在遥感领域的应用时,资源却出奇的稀缺。大多数可用的文献和教程已经发展到更复杂的方法,例如 ConvLSTM、Temporal Transformers 和 Bi-LSTM,为那些希望从基础知识开始的…

传统机器学习 基于TF_IDF的文本聚类实现

简介 使用sklearn基于TF_IDF算法&#xff0c;实现把文本变成向量。再使用sklearn的kmeans聚类算法进行文本聚类。 个人观点&#xff1a;这是比较古老的技术了&#xff0c;文本转向量的效果不如如今的 text2vec 文本转向量好。 而且sklearn 不支持GPU加速&#xff0c;处理大量…

小狐狸ChatGPT智能聊天系统源码v2.7.6全开源Vue前后端+后端PHP

测试环境包括Linux系统的CentOS 7.6&#xff0c;宝塔面板&#xff0c;PHP 7.4和MySQL 5.6。网站的根目录是public&#xff0c; 使用thinkPHP进行伪静态处理&#xff0c;并已开启SSL证书。 该系统具有多种功能&#xff0c;包括文章改写、广告营销文案创作、编程助手、办公达人…

备战蓝桥杯Day26 - 二叉搜索树查询和删除操作

一、查询 递归查询 寻找的值比根节点大&#xff0c;遍历右子树&#xff1b; 寻找的值比根节点小&#xff0c;遍历左子树。 def qurey(self, node, val):if not node: # 没有节点&#xff0c;返回空return Noneif node.data < val:return self.qurey(node.rchild, val)el…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS多路视频融合叠加,提供1套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD多路视频融合叠加应用本方案的S…

C++第六弹---类与对象(三)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、类的6个默认成员函数 2、构造函数 2.1、概念 2.2、特性 3、析构函数 3.1、概念 3.2、特性 3.3、调用顺序 总结 1、类的6个默认成员函数…

QT UI窗口常见操作

MainWidget::MainWidget(QWidget *parent): QWidget(parent), ui(new Ui::MainWidget) {ui->setupUi(this);// 设置主窗口背景颜色QPalette plt;plt.setColor(QPalette::Window,QColor(180,220,130));this->setPalette(plt);// 禁止窗口最大化按钮setWindowFlags(windowF…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一&#xff0c;它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中&#xff0c;我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

DevOps 环境预测测试中的机器学习

在当今快节奏的技术世界中&#xff0c;DevOps 已成为软件开发不可或缺的一部分。它强调协作、自动化、持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;&#xff0c;以提高软件部署的速度和质量。预测测试是这一领域的关键组成部分&#xff0c;其中机器…

Transformer的前世今生 day02(神经网络语言模型

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 以下为预备概念 感知机 线性模型可以用下图来表示&#xff1a;输入经过线性层得到输出 线性层 / 全连接层 / 稠密层&#xff1a;假…

fastapi 的css js文件地址修改

from fastapi.openapi.docs import get_swagger_ui_html, get_redoc_html点进get_swagger_ui_html修改源码 def get_swagger_ui_html(*,openapi_url: str,title: str,# swagger_js_url: str "https://cdn.jsdelivr.net/npm/swagger-ui-dist3/swagger-ui-bundle.js"…

爬虫的去重

去重基本原理 爬虫中什么业务需要使用去重 防止发出重复的请求防止存储重复的数据 在爬取网页数据时&#xff0c;避免对同一URL发起重复的请求&#xff0c;这样可以减少不必要的网络流量和服务器压力&#xff0c;提高爬虫的效率&#xff0c;在将爬取到的数据存储到数据库或其…

HTML设置语言

一、代码示例 相关代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>HTML设置语言</title> </head> <body><marquee>我爱你</marquee> <!-- …