0

0

专门针对 DeepSeek 的纯 C++ CPU 端推理框架

絕刀狂花

絕刀狂花

发布时间:2025-04-22 18:28:20

|

982人浏览过

|

来源于php中文网

原创

在介绍这个项目之前,先声明几点:

项目尚未成熟 —— 作者明确表示,这是出于兴趣和好奇心开发的。内存需求极高 —— 例如,运行 DeepSeek V3 F8E5M2 版本大约需要 650GB 内存,在尝试之前请衡量一下你的设备。尽管如此,我认为这个项目依然值得关注:

纯 C++ 实现,不依赖任何第三方框架,便于集成,同时也能部署到低端终端设备。代码量不到 2000 行,对研究推理框架的开发者而言,这无疑是一个简洁、高效的参考。这个项目就是 deepseek.cpp,项目地址:

为什么要关注 deepseek.cpp?随着硬件的不断升级,软件却变得越来越庞大、复杂,资源消耗也日益增加。DeepSeek 的崛起给我们带来了一些新的思考:绕过复杂的框架,直接调用底层 API,可以显著降低硬件需求。DeepSeek 通过直接使用 Nvidia 的 PTX 进行底层硬件控制,绕过了部分 CUDA 层的限制,实现了对 GPU 资源的高效利用,从而做到对大模型性能的极致优化。

除了大模型,推理框架(Inference Framework)在目前大语言模型(LLM)部署中也存在较大的优化空间。大部分开发者使用的推理框架多采用 Python 或 JavaScript,虽然通用性更强,但在极限性能追求下,C++ 方案逐渐崭露头角,例如 llama.cpp。不过,随着 llama.cpp 逐步支持更多模型,代码量迅速膨胀,如今已超过 25 万行。deepseek.cpp 的作者正是看到这一点,决定专门为 DeepSeek 量身打造一个简洁优化的推理引擎 —— 牺牲部分通用性,换取极致性能。

立即学习C++免费学习笔记(深入)”;

为什么开发这个项目?作者的初衷很简单:好玩、学习!

他最初尝试在 yalm 中添加 DeepSeek 支持,但发现改动过于庞大,影响了项目的简洁性。最终,他选择将这些改动拆分,创建一个更轻量、更精简的代码库。

此外,deepseek.cpp 还特别适用于低端 CPU 设备,因为它不依赖 Python 运行时,相比其他推理引擎,代码体积更小(除掉 fmt 和 json 的代码量小于 2 千行)。

Sencha touch 开发指南 中文WORD版
Sencha touch 开发指南 中文WORD版

本文档主要讲述的是Sencha touch 开发指南;主要介绍如何使用Sencha Touch为手持设备进行应用开发,主要是针对iPhone这样的高端手机,我们会通过一个详细的例子来介绍整个开发的流程。 Sencha Touch是专门为移动设备开发应用的Javascrt框架。通过Sencha Touch你可以创建非常像native app的web app,用户界面组件和数据管理全部基于HTML5和CSS3的web标准,全面兼容Android和Apple iOS。希望本文档会给有需要的朋友带来帮助;感兴趣的

下载

支持的 DeepSeek 模型

Model INT4 F8E5M2 F8E4M3 FP16 BF16 FP32
DeepSeek-V2-Lite 进行中 进行中 进行中
DeepSeek-V2 进行中 进行中 进行中
DeepSeek-V2.5 进行中 进行中 进行中
DeepSeek-V3 进行中 进行中 - - -
DeepSeek-R1 进行中 进行中 - - -

其中:

INT4: 指的是使用 4 位整数来表示数值。由于每个数只占 4 位,相比 FP16 或 FP32 表示而言,存储空间大幅减少,可以将模型参数的存储压缩为原来的1/4甚至更低。使用 INT4 量化后,数据传输速度和缓存效率都会提升,不过代价是数值表示的精度和动态范围受限,因此需要精细设计量化方案(例如通过量化感知训练或后训练量化校准)以减少精度损失。F8E5M2: 指的是一种 8 位浮点数格式,用于量化模型权重或激活。在这种格式中,“F8”表示总共使用 8 位存储数据,而“E5M2”则说明其中有 5 位用于表示指数(Exponent),2 位用于表示尾数(Mantissa),剩下一位通常用作符号位。这种 FP8 格式(另一个常见的变体是 F8E4M3)在深度学习中被用来降低模型的内存占用和计算带宽需求,同时在一定程度上保持数值的动态范围,适用于推理阶段的量化优化。F8E4M3: F8E4M3 是一种 8 位浮点格式,与之前提到的 F8E5M2 类似。具体来说,F8E4M3 表示使用 8 位总宽度,其中 1 位用于符号,4 位用于指数(Exponent),3 位用于尾数(Mantissa)。这种格式旨在在保持一定数值动态范围的同时,降低表示精度带来的存储和计算开销。与 F8E5M2 相比,F8E4M3 会牺牲部分指数范围(动态范围),但可能在特定应用中能够获得更好的硬件实现效果或更低的能耗。使用 F8E4M3 量化可以进一步降低显存占用,同时依然允许一定程度的浮点运算优势,是一种在追求极致性能优化时可能选用的方案。进展情况目前,如果将 F8E5M2 指定为数据转换类型,模型权重会采用 128×128 块量化,而 MoE 门控单元和层归一化仍保持全精度。这种方法相比简单截断量化(例如 yalm 采用的策略)能提供更好的精度,否则 DeepSeek 模型的输出可能会失去意义。

不过,该模型仍然存在一些问题,例如在低温度下容易陷入无限循环。测试表明,温度设置在 ~1.0 时能够有效避免这种情况,并保持合理的生成质量。

当前 deepseek.cpp 尚未实现 DeepSeek V3 的部分可选架构优化(例如专家选择的 noaux_tc 方法),因此推理精度可能略低于官方实现。此外,模型运行仍然需要大约 650GB RAM,未来计划加入更激进的量化方法,例如 INT4 或 1.58-bit 量化。

目前,该框架仅支持解码阶段(即逐步生成 token),不支持预填充(一次性读取整个 prompt)。此外,预填充优化技术(如推测解码、多 token 预测)尚未实现。同样,DeepSeek-V2 论文中提到的 多潜在注意力优化 也尚未完全实现。

专门针对 DeepSeek 的纯 C++ CPU 端推理框架

建议爱好钻研的同学可以关注一下,至于纯 CPU 推理对于内存要求过高的问题,以后也将不是问题,毕竟内存比 GPU 更容易造。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6536

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

840

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1089

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1855

2024.03.01

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

19

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号