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

4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享

引言:

最近,DeepSeek-R1在完全开源的背景下,与OpenAI的O1推理模型展开了激烈竞争,引发了广泛关注。为了让更多本地用户能够运行DeepSeek,我们成功将R1 671B参数模型从720GB压缩至131GB,减少了80%,同时保持了强大的功能。

通过研究 DeepSeek R1 的架构,我们设法选择性地将某些层量化为更高的位(如 4 位),并将大多数 MoE 层(如 GPT-4 中使用的层)保留为 1.5 位(参见Unsloth 动态 4 位).天真地量化所有层会完全破坏模型,导致无限循环和乱码输出。动态量化解决了这个问题。 

1.58 位量化应该适合 160GB 的 VRAM 以进行快速推理(2x H100 80GB),每秒达到大约 140 个令牌。您不需要 VRAM (GPU) 来运行 1.58 位 R1,只需 20GB 的 RAM (CPU) 就可以工作,但可能会很慢。为了获得最佳性能,我们建议 VRAM + RAM 的总和至少为 80GB+。

1:使用动态量化版本

使用重要性矩阵来校准量化过程(通过 llama.cpp 的 imatrix)以允许较低位的表示。

MoE Bits

Disk Size

Type

Quality

Link

Down_proj

1.58-bit

131GB

IQ1_S

Fair

Link

2.06/1.56bit

这些指令适用于R1蒸馏版和非蒸馏版模型,但请注意,它们对硬件的要求不同。

2. 基准和消融

为了测试所有量化模型,我们没有依赖通用基准,而是让DeepSeek r1创建一个有3次尝试机会的Flappy Bird游戏(pass@3),并根据10项标准对其进行评分(例如使用随机颜色、随机形状、是否能在Python解释器中运行等)。我们使用了种子3407、3408和3409,并采用了建议的温度值0.6~0.7之间

3:原创和量化后的对比数据

我们惊讶地发现,我们的动态1.58位版本似乎仍然能够生成有效的输出! 然而,如果你不使用我们的动态1.58位版本,而是简单地量化所有层,你将会得到无限重复的内容,比如在种子3407中:“Colours with dark Colours with dark Colours with dark Colours with dark Colours with dark”,或者在种子3408中:“Set up the Pygame's Pygame display with a Pygame's Pygame's Pygame's Pygame's Pygame's Pygame's Pygame's Pygame's Pygame's”。 同样地,如果你不使用我们的动态版本,而是将所有层量化为1.75比特(149GB),无限重复会停止,但结果完全错误。

Model Size

Dynamic Quant

Model Size

Basic Quant

131GB

6.92

133GB

0

1.58比特的动态量化有时会每8000个token产生1个错误的token,我们需要将其注释掉。使用min_p = 0.10.05应该可以缓解1.58比特版本生成单个错误token的问题。

4.利用DeepSeek R1的架构

     在我们之前对DeepSeek V3模型的分析中,该模型使用DeepSeek r1进行合成数据生成,我们注意到DeepSeek的前3层是完全密集的,而不是MoE(混合专家)。作为回顾,MoE(混合专家)层允许我们增加模型中的参数数量,而不会增加使用的FLOPs(浮点运算次数),因为我们动态地将大多数条目屏蔽为0,因此我们基本上跳过了对零化条目进行矩阵乘法运算。

MoEs(混合专家模型)的目标是“绕过”扩展定律,因为我们在不改变计算成本的情况下增加了参数数量。有关MoEs的更多笔记以及一种名为Memory Layers的新方法(旨在比MoEs做得更好),请参见这条推文:x.com/danielhanchen/status/1868748998783517093

通过结合以下四种方法,包括: 我们的4位动态量化方法 1.58位LLMs论文 Llama.cpp的1.5位量化 超级权重论文 我们成功应用了以下见解:

  1. 前三个密集层使用了所有权重的0.5%。我们将这些保持为4位或6位。

  2. MoE层使用共享专家,使用了1.5%的权重。我们将使用6位。

  3. 我们可以将所有MLA注意力模块保持为4位或6位,使用不到5%的权重。我们应该量化注意力输出(3%),但最好保持其较高精度。

  4. down_proj对量化最为敏感,尤其是在前几层。我们通过超级权重论文、我们的动态量化方法和llama.cpp的GGUF量化方法验证了我们的发现。因此,我们将前3到6个MoE down_proj矩阵保持较高精度。例如,在超级权重论文中,我们看到几乎所有不应被量化的权重都在down_proj中。

关于为什么所有的“超级权重”或最重要的权重都在 down_proj 中的主要见解是因为 SwiGLU 的操作:

[ [f(XW_{gate}) * (XW_{up})]W_{down} ] 这意味着 up 和 gate 投影本质上会相乘形成较大的数值,而 down_proj 必须将它们缩小——这意味着量化 down_proj 可能不是一个好主意,尤其是在 Transformer 的早期层中。

  1. 我们应该将 embedding 和 lm_head 分别保留为 4 位和 6 位。MoE 路由器和所有层归一化保留为 32 位。

  2. 这使得约 88% 的权重成为 MoE 权重!通过将它们量化为 1.58 位,我们可以大幅缩小模型!

  3. 我们提供了动态量化代码作为 llama.cpp 的一个分支:github.com/unslothai/llama.cpp

  4. 我们利用了 Bartowski 的重要性矩阵来进行低位量化

开始模板问题

所有蒸馏版本和主要的67IB R1模型使用相同的聊天模板:

< begin_of_sentence > < 用户 > 1+1等于多少?
< 助手 > 等于2。< end_of_sentence >
| 用户 | > 再解释一下!< 助手 |

在推理过程中,强制添加了BOS(开始符),并且每个交互之间用EOS(结束符)分隔。为了避免在推理过程中出现双BOS标记,你应该只调用tokenizer.encode(..., add_special_tokens = False),因为聊天模板会自动添加BOS标记。对于llama.cpp / GGUF推理,你应该跳过BOS,因为它会自动添加。

< 用户 > 1+1等于多少?< 助手 >

和标记有自己指定的标记。对于Qwen和Llama的蒸馏版本,一些标记被重新映射,例如Qwen没有BOS标记,所以必须使用<\object_ref_start>代替。所有蒸馏版和原始 R1 版本似乎意外地将填充标记分配给了 < | end_of_sentence | >,这通常不是一个好主意,特别是如果你想在这些推理模型的基础上进一步微调。这将导致无限生成,因为大多数框架会将 EOS 标记屏蔽为 -100。 我们修复了所有蒸馏版本和原始R1版本,使用了正确的填充标记(Qwen使用<|vision_pad|>,Llama使用<|finetune_right_pad_id|>,而R1使用<|PAD▁TOKEN|>或我们自己添加的填充标记)。

DeepSeek R1有61层。例如,使用24GB GPU或80GB GPU时,您可以预期在向下取整后卸载(如果内存不足,减少11)

要运行模型,我们将K缓存量化为4bit。量化V缓存需要为llama.cpp编译flash attention内核。我们使用机器上的所有线程,并使用DeepSeek推荐的温度0.6。上下文大小是您希望模型生成的令牌数量。

到此我可以尝试一下用运行量化后的deepseek R1 671B后版本试试,但是可能也会失败的。只能说有这样挑战和冒险。

相关文章:

4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享

引言&#xff1a; 最近&#xff0c;DeepSeek-R1在完全开源的背景下&#xff0c;与OpenAI的O1推理模型展开了激烈竞争&#xff0c;引发了广泛关注。为了让更多本地用户能够运行DeepSeek&#xff0c;我们成功将R1 671B参数模型从720GB压缩至131GB&#xff0c;减少了80%&#xff…...

SpringBoot速成(12)文章分类P15-P19

1.新增文章分类 1.Postman登录不上&#xff0c;可以从头registe->login一个新的成员:注意&#xff0c;跳转多个url时&#xff0c;post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功&#xff1a; 但表中不更新&#xff1a;细节有问题&#xff1a; c是…...

C++17中的clamp函数

一、std::clamp() 其实在前面简单介绍过这个函数&#xff0c;但当时只是一个集中的说明&#xff0c;为了更好的理解std::clamp的应用&#xff0c;本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为&#xff1a; template< class T > constexpr const T& cl…...

配置Open-R1,评测第三方蒸馏模型的性能1

年前DeepSeek不温不火&#xff0c;问题的响应极。一回车&#xff0c;就看模型如口吐莲花般&#xff0c;先是输出思维过程&#xff0c;虽然中间绕来绕去&#xff0c;但是输出回答时还是准确而简洁的。比如&#xff0c;用它来读当时出来的几篇文章&#xff0c;确实大大提升了效率…...

Chrome插件开发流程

Chrome插件开发流程可以分为以下几个主要步骤&#xff1a; ### 1. 确定插件功能和目标 在开始开发之前&#xff0c;首先需要明确插件的功能和目标。这包括&#xff1a; - **功能定义**&#xff1a;确定插件要解决的问题或提供的功能。 - **市场分析**&#xff1a;了解目标用户群…...

物联网行业通识:从入门到深度解析

物联网行业通识&#xff1a;从入门到深度解析 &#xff08;图1&#xff1a;物联网生态示意图&#xff09; 一、引言&#xff1a;万物互联时代的到来 根据IDC最新预测&#xff0c;到2025年全球物联网设备连接数将突破410亿&#xff0c;市场规模达1.1万亿美元。物联网&#xff…...

【做一个微信小程序】校园事件页面实现

前言 为了进一步扩展校园事件页面的功能,我们可以添加 搜索、分类筛选 和 渐变卡片色 等特性。以下是详细的方案和源码实现。 扩展功能设计 1. 搜索功能 在页面顶部添加搜索框,用户输入关键词后,筛选出匹配的事件。2. 分类筛选 在页面顶部添加分类标签(如“全部”、“活动…...

C++基础系列【14】继承与多态

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

DeepSeek-R1 大模型本地部署指南

文章目录 一、系统要求硬件要求软件环境 二、部署流程1. 环境准备2. 模型获取3. 推理代码配置4. 启动推理服务 三、优化方案1. 显存优化技术2. 性能加速方案 四、部署验证健康检查脚本预期输出特征 五、常见问题解决1. CUDA内存不足2. 分词器警告处理3. 多GPU部署 六、安全合规…...

在conda环境下,安装Pytorch和CUDA

系统 : Ubuntu20.04 显卡&#xff1a;NVIDIA GTX1650 显卡驱动已经装好&#xff08;命令 nvidia-smi 查看显卡配置&#xff09; &#xff08;主要看一下第一行的参数&#xff0c;最大支持的CUDA版本为12.4 &#xff09; Aanconda 版本&#xff08;安装指南&#xff09;(似乎…...

Java里int和Integer的区别?

大家好&#xff0c;我是锋哥。今天分享关于【Java里int和Integer的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; Java里int和Integer的区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Java 中&#xff0c;int 和 Integer 都是用来表…...

【第13章:自监督学习与少样本学习—13.4 自监督学习与少样本学习的未来研究方向与挑战】

凌晨三点的实验室里,博士生小张盯着屏幕上的训练曲线——他设计的跨模态少样本学习模型在医疗影像诊断任务上突然出现了诡异的性能断崖。前一秒还在92%的准确率高位运行,下一秒就暴跌到47%。这个看似灾难性的现象,却意外揭开了自监督学习与少样本学习技术深藏的核心挑战… 一…...

【NLP】文本预处理

目录 一、文本处理的基本方法 1.1 分词 1.2 命名体实体识别 1.3 词性标注 二、文本张量的表示形式 2.1 one-hot编码 2.2 word2vec 模型 2.2.1 CBOW模式 2.2.2 skipgram模式 2.3 词嵌入word embedding 三、文本数据分析 3.1 标签数量分布 3.2 句子长度分布 3.3 词…...

deepseek r1从零搭建本地知识库10:嵌入模型和知识库建设

一、嵌入模型&#xff08;Embedding Model&#xff09;是什么&#xff1f; 1. 定义 嵌入模型是一种将文本、图像、音频等非结构化数据转化为**低维稠密向量&#xff08;Dense Vector&#xff09;**的算法模型&#xff0c;这些向量&#xff08;通常几百到几千维&#xff09;能够…...

Linux-文件IO

1.open函数 【1】基本概念和使用 #include <fcntl.h> int open(const char *pathname&#xff0c;int flags); int open(const char *pathname&#xff0c;int flags&#xff0c;mode_t mode); 功能: 打开或创建文件 参数: pathname //打开的文件名 f…...

3d pose 学习笔记2025

目录 champ nlf 3dpose 2025 55个关键点 推理代码: 要设置环境变量: 依赖项metrabs 渲染代码: tram4d 脚也不是特别好 GVHMR脚对不齐 推理代码: multiperson 2023年 genhmr还没开源: champ https://zhuanlan.zhihu.com/p/700326554 nlf 3dpose 2025 55个关键点…...

LC-随机链表的复制、排序链表、合并K个升序链表、LRU缓存

随机链表的复制 为了在 O(n) 时间复杂度内解决这个问题&#xff0c;并且使用 O(1) 的额外空间&#xff0c;可以利用以下技巧&#xff1a; 将新节点插入到原节点后面&#xff1a;我们可以将复制节点插入到原节点后面。例如&#xff0c;如果链表是 A -> B -> C&#xff0c…...

静态页面在安卓端可以正常显示,但是在ios打开这个页面就需要刷新才能显示全图片

这个问题可能有几个原因导致,我来分析一下并给出解决方案: 首要问题是懒加载实现方式的兼容性问题。当前的懒加载实现可能在 iOS 上不够稳定。建议修改图片懒加载的实现方式: // 使用 Intersection Observer API 实现懒加载 function initLazyLoading() {const imageObserver…...

四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)【ESP32指向鼠标】

四元数如何用于 3D 旋转&#xff08;代替欧拉角和旋转矩阵&#xff09; 在三维空间中&#xff0c;物体的旋转可以用 欧拉角、旋转矩阵 或 四元数 来表示。 四元数相比于欧拉角和旋转矩阵有 计算更高效、避免万向锁、存储占用少 等优点&#xff0c;因此广泛用于 游戏开发、机器…...

JavaScript 内置对象-日期对象

在JavaScript中&#xff0c;处理日期和时间是一个常见的需求。无论是显示当前时间、计算两个日期之间的差异&#xff0c;还是格式化日期字符串&#xff0c;Date 对象都能提供强大的支持。本文将详细介绍 Date 对象的使用方法&#xff0c;包括创建日期实例、获取和设置日期值、以…...

基于AI与双级缓存的新闻聚合器:从架构设计到工程实践

1. 项目概述&#xff1a;一个只传递好消息的AI新闻聚合器最近在做一个挺有意思的Side Project&#xff0c;起因是受够了每天被各种负面新闻轰炸。不知道你有没有同感&#xff0c;一打开新闻App&#xff0c;满屏都是冲突、灾难和让人焦虑的标题党。这不仅仅是个人感受&#xff0…...

Bard-API非官方Python接口:原理、风险与迁移官方Gemini API指南

1. 项目概述&#xff1a;一个非官方的Google Bard/Gemini Python接口 如果你正在寻找一个能绕过官方认证流程、直接通过浏览器Cookie与Google Bard&#xff08;现已更名为Gemini&#xff09;对话的Python工具&#xff0c;那么你很可能已经听说过或正在寻找 Bard-API 这个项目…...

掌握Obsidian Tasks优先级管理:6个等级让任务管理更高效

掌握Obsidian Tasks优先级管理&#xff1a;6个等级让任务管理更高效 【免费下载链接】obsidian-tasks Task management for the Obsidian knowledge base. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-tasks 你是否经常在Obsidian中面对一大堆任务&#xff0…...

创业团队如何利用 Taotoken 以最小成本试验多种大模型能力

创业团队如何利用 Taotoken 以最小成本试验多种大模型能力 对于资源有限的创业团队而言&#xff0c;在产品早期验证阶段&#xff0c;快速、低成本地试验不同大模型的能力至关重要。直接对接多个厂商意味着需要分别注册账户、管理多个 API Key、理解不同的计费规则和接口规范&a…...

3分钟快速上手:Onekey智能Steam清单下载器完全指南

3分钟快速上手&#xff1a;Onekey智能Steam清单下载器完全指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏配置而烦恼吗&#xff1f;面对繁琐的manifest清单下载和工具…...

深入聊聊Xilinx MIPI CSI-2 RX Subsystem IP:在Zynq UltraScale上解码OV5640视频的配置要点与性能调优

Xilinx MIPI CSI-2 RX Subsystem IP在Zynq UltraScale平台上的深度优化实践 OV5640摄像头作为工业视觉领域最常见的图像传感器之一&#xff0c;其MIPI接口的高带宽特性对FPGA设计提出了严苛要求。Xilinx提供的MIPI CSI-2 RX Subsystem IP虽然大幅降低了开发门槛&#xff0c;但…...

银河麒麟系统root权限获取全攻略:从SSH配置到安全切换

银河麒麟系统安全权限管理实战指南 在国产操作系统日益普及的今天&#xff0c;银河麒麟作为国内领先的Linux发行版&#xff0c;其安全性和稳定性备受企业级用户青睐。对于系统管理员而言&#xff0c;如何在保证系统安全的前提下高效完成权限管理&#xff0c;是日常运维中的核心…...

ESP32开发板CanLite:汽车电子与CAN总线开发利器

1. CanLite ESP32开发板概述 CanLite是一款基于ESP32-WROOM-32D模块的紧凑型CAN总线开发板&#xff0c;专为汽车电子开发和逆向工程而设计。与市面上常见的ESP32开发板不同&#xff0c;它集成了专业级的CAN总线收发器和可选的汽车级高边开关&#xff0c;使其成为汽车电子爱好者…...

3个场景玩转Upscayl:从老照片修复到动漫超清化的AI魔法

3个场景玩转Upscayl&#xff1a;从老照片修复到动漫超清化的AI魔法 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl Upscayl是…...

基于ChatGPT的跨平台消息自动化分发引擎设计与实现

1. 项目概述&#xff1a;一个跨平台自动化消息分发引擎最近在折腾自动化流程&#xff0c;发现一个挺有意思的需求&#xff1a;如何把ChatGPT这类AI生成的内容&#xff0c;自动、高效地分发到多个不同的社交平台或通讯工具里。比如&#xff0c;你写了个脚本&#xff0c;每天定时…...