LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作
近年来,大型语言模型(LLMs)的发展突飞猛进,逐步缩小了与通用人工智能(AGI)的差距。DeepSeek-AI 团队最新发布的 DeepSeek-V3,作为一款强大的混合专家模型(Mixture-of-Experts, MoE),凭借其高效的架构和创新的训练策略,成为了当前最强的开源模型之一。本文将带您深入了解 DeepSeek-V3 的技术亮点及其在性能上的卓越表现。
一、DeepSeek-V3 的核心亮点
1.1 高效的架构设计
DeepSeek-V3 采用了 Multi-head Latent Attention (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中已经得到了充分验证。MLA 通过低秩压缩技术减少了推理时的 Key-Value 缓存,显著提升了推理效率。DeepSeekMoE 则通过细粒度的专家分配和共享专家机制,实现了经济高效的训练。
- Multi-head Latent Attention (MLA):MLA 通过对注意力键和值进行低秩联合压缩,减少了推理时的 KV 缓存,同时保持了与标准多头注意力(MHA)相当的性能。
- DeepSeekMoE:DeepSeekMoE 采用了更细粒度的专家分配策略,每个 MoE 层包含 1 个共享专家和 256 个路由专家,每个令牌激活 8 个专家,确保了计算的高效性。
1.2 创新的负载均衡策略
DeepSeek-V3 首次引入了 无辅助损失的负载均衡策略,避免了传统方法中因强制负载均衡而导致的模型性能下降。通过动态调整专家偏置,模型在训练过程中保持了良好的负载均衡,同时提升了整体性能。
- 无辅助损失负载均衡:通过为每个专家引入偏置项,动态调整路由决策,确保专家负载均衡,而无需依赖传统的辅助损失函数。
- 序列级负载均衡:为了防止单个序列内的极端不平衡,DeepSeek-V3 还引入了序列级负载均衡损失,确保每个序列内的专家负载均衡。
1.3 多令牌预测训练目标
DeepSeek-V3 采用了 多令牌预测(Multi-Token Prediction, MTP) 的训练目标,扩展了每个位置的预测范围。这一策略不仅提高了数据效率,还使得模型能够更好地预规划未来令牌的表示,从而在推理时加速生成过程。
- MTP 模块:DeepSeek-V3 使用多个顺序模块来预测未来的多个令牌,每个模块包含共享的嵌入层、输出头和 Transformer 块,确保了预测的因果链完整性。
- 推理加速:MTP 模块可以用于推测解码(Speculative Decoding),在推理时显著加速生成过程,生成速度提升了 1.8 倍。
1.4 FP8 低精度训练
DeepSeek-V3 支持 FP8 混合精度训练,通过精细的量化策略和高精度累加,显著降低了训练时的 GPU 内存占用和计算开销。这一创新使得 DeepSeek-V3 在保持高性能的同时,大幅降低了训练成本。
- FP8 混合精度框架:大多数计算密集型操作(如 GEMM)在 FP8 精度下执行,而少数关键操作(如嵌入模块和注意力操作)仍保持高精度(BF16 或 FP32),确保了训练的数值稳定性。
- 精细量化策略:通过分块量化(Tile-wise Quantization)和块级量化(Block-wise Quantization),DeepSeek-V3 有效减少了量化误差,尤其是在处理激活梯度时,避免了模型发散。
二、训练与部署的高效性
2.1 训练成本的经济性
DeepSeek-V3 的预训练仅消耗了 2664K H800 GPU 小时,总训练成本约为 557.6 万美元。这一成本远低于其他同级别模型,得益于 DeepSeek 团队在算法、框架和硬件上的协同优化。
- DualPipe 算法:DeepSeek-V3 采用了创新的 DualPipe 算法,通过重叠计算和通信,减少了管道气泡,显著提升了训练效率。
- 跨节点全对全通信优化:通过定制高效的跨节点全对全通信内核,DeepSeek-V3 充分利用了 InfiniBand 和 NVLink 的带宽,确保了通信的高效性。
2.2 长上下文扩展
DeepSeek-V3 通过两阶段的上下文扩展训练,将最大上下文长度从 4K 扩展到 128K,并在长上下文任务中表现出色。例如,在 "Needle In A Haystack" 测试中,DeepSeek-V3 在 128K 上下文长度下依然保持了强大的性能。
- YaRN 扩展技术:DeepSeek-V3 采用了 YaRN 技术进行上下文扩展,逐步将上下文窗口从 4K 扩展到 32K,再扩展到 128K,确保了模型在长上下文任务中的稳定性。
2.3 推理与部署优化
DeepSeek-V3 的推理部署采用了 预填充(Prefilling) 和 解码(Decoding) 分离的策略,确保了在线服务的高吞吐量和低延迟。通过冗余专家部署和动态路由策略,模型在推理时保持了高效的负载均衡。
- 冗余专家部署:在推理时,DeepSeek-V3 通过冗余专家部署策略,确保每个 GPU 处理近似数量的令牌,避免了负载不均衡。
- 动态路由策略:DeepSeek-V3 探索了动态冗余策略,在每个推理步骤中动态选择激活的专家,进一步优化了推理效率。
三、性能表现:开源模型的巅峰
DeepSeek-V3 在多个基准测试中表现优异,尤其是在 代码 和 数学 任务上,超越了其他开源模型,甚至与领先的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)不相上下。
3.1 知识理解
在 MMLU、MMLU-Pro 和 GPQA 等教育类基准测试中,DeepSeek-V3 的表现优于所有其他开源模型,尤其是在中文事实性知识(Chinese SimpleQA)上,甚至超越了 GPT-4o 和 Claude-3.5-Sonnet。
3.2 代码与数学推理
DeepSeek-V3 在代码竞赛基准测试(如 LiveCodeBench)中表现最佳,成为该领域的领先模型。在数学推理任务中,DeepSeek-V3 也展现了强大的能力,尤其是在 MATH-500 等复杂数学问题上,表现尤为突出。
3.3 长上下文理解
在 DROP、LongBench v2 和 FRAMES 等长上下文理解任务中,DeepSeek-V3 表现优异,尤其是在处理 100K 以上上下文的任务中,展现了其强大的长上下文处理能力。
四、未来展望
尽管 DeepSeek-V3 已经取得了显著的成就,但团队依然在探索更多的优化方向:
4.1 模型架构的持续优化
团队计划进一步研究 Transformer 架构的局限性,探索更高效的模型架构,以支持无限上下文长度。
4.2 数据质量的提升
团队将继续迭代训练数据的数量和质量,探索更多维度的数据扩展,以进一步提升模型的性能。
4.3 推理能力的增强
通过扩展模型的推理长度和深度,团队希望进一步提升模型的智能水平和问题解决能力。
4.4 多维度的模型评估
为了避免模型在固定基准测试上的过度优化,团队计划探索更全面的模型评估方法,确保模型的真实能力得到准确反映。
结语
DeepSeek-V3 的发布标志着开源模型在性能上迈上了一个新的台阶。通过创新的架构设计、高效的训练策略和经济的成本控制,DeepSeek-V3 不仅成为了当前最强的开源模型之一,也为未来的 AI 研究提供了宝贵的参考。我们期待 DeepSeek 团队在未来的研究中继续突破,推动开源模型向 AGI 的目标稳步迈进。
参考文献
DeepSeek-V3 Technical Report
相关文章:
LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作
近年来,大型语言模型(LLMs)的发展突飞猛进,逐步缩小了与通用人工智能(AGI)的差距。DeepSeek-AI 团队最新发布的 DeepSeek-V3,作为一款强大的混合专家模型(Mixture-of-Experts, MoE&a…...
IIS设置IP+端口号外网无法访问的解决方案
在IIS将站点设置为IP端口访问,假设端口为8080,设好后,服务器上可以访问,外网无法访问。 通常是端口8080没有加入【入站规则】的缘故,将8080端口加入【入站规则】即可,操作如下: 一、ctrlr 输入 …...
Leetcode 最大正方形
java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...
数据结构与算法之动态规划: LeetCode 3105. 最长的严格递增或递减子数组 (Ts版)
最长的严格递增或递减子数组 https://leetcode.cn/problems/longest-strictly-increasing-or-strictly-decreasing-subarray/description/ 描述 给你一个整数数组 nums返回数组 nums 中 严格递增 或 严格递减的最长非空子数组的长度 示例 1 输入:nums [1,4,3,…...
【书籍连载】《软件测试架构实践与精准测试》| 有关软件测试模型的调查结果
各位软件领域的精英们,今天小编邀请你继续深入学习《软件测试架构实践与精准测试》。 《软件测试架构实践与精准测试》是作者李龙(安畅检测首席技术专家)基于软件测试“川模型”的著作。本书结合作者首次提出的软件测试新的模型“川模型”测试…...
我的博客年度之旅:感恩、成长与展望
目录 感恩有你 技能满点 新年新征程 嘿,各位技术大佬、数码潮咖还有屏幕前超爱学习的小伙伴们!当新年的钟声即将敲响,我们站在时光的交汇点上,回首过往,满心感慨;展望未来,豪情满怀。过去的这…...
【RTD MCAL 篇3】 K312 MCU时钟系统配置
【RTD MCAL 篇3】 K312 MCU时钟系统配置 一,文档简介二, 时钟系统理论与配置2.1 K312 时钟系统2.1.1 PLL2.1.2 MUX_0系统2.1.3 MUX_6 时钟输出2.1.4 option B推荐方案 2.2 EB 配置2.2.1 General 配置2.2.2 McuClockSettingConfig配置2.2.2.1 McuFIRC配置…...
力扣28找出字符串中第一个匹配项的下标
class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack,检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…...
[C#]C# random.Next(0,1)包含0和1吗
在C#中,Random.Next(minValue, maxValue) 方法生成的随机数是一个在 minValue(包含)和 maxValue(不包含)之间的整数。因此,当你调用 Random.Next(0, 1) 时,它只会生成一个整数,这个整…...
【设计模式】 基本原则、设计模式分类
设计模式 设计模式是软件工程中的一种通用术语,指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现,而是描述了如何解决某一类问题的思路和方法。 如果熟悉了设计模式,当遇到类似的场景,我们可以快速地…...
Swift White Hawkstrider
Swift White Hawkstrider 迅捷白色陆行鸟 Swift White Hawkstrider - Item - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Kaelthas Sunstrider (1) <Lord of the Blood Elves> 凯尔萨斯逐日者. 掉落 [80圣骑士][Alonsus-加丁][诺森德冒险补给品…...
node.js下载、安装、设置国内镜像源(永久)(Windows11)
目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。 关键词 UI互动应用接口定义购物车功能动态计算商品管理列表操作 一、功能说明 简易购物车功能包含以下交互&#…...
df.groupby(pd.Grouper(level=1)).sum()
df.groupby(pd.Grouper(level1)).sum() 在 Python 中的作用是根据 DataFrame 的某一索引级别进行分组,并计算每个分组的总和。具体来说: df.groupby(...):这是 pandas 的分组操作,按照指定的规则将 DataFrame 分组。 pd.Grouper(…...
【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
未经许可,不得转载。 文章目录 正文漏洞步骤赏金正文 我测试的应用程序有多个子域名: 1、account.example.com:处理用户账户管理。 2、project.example.com:管理用户拥有或被邀请的项目。 3、org.example.com:一个新的子域,用于管理多个项目的组织。 4、collaborator.ex…...
【SpringBoot教程】SpringBoot整合Mybatis - 前后端分离项目 - vue3
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张将通过一个完整的前后端分离的任务来介绍SpringBoot整合Mybatis过程! 文章目录 1.前言1.1 任务描述1.2 SpringBoot整合Mybatis概述1.3 完整项目…...
node.js之---事件驱动编程
详解事件驱动 事件驱动是基于什么实现的 事件驱动和I/O操作的关系 I/O操作和事件循环的关系 详解事件驱动 事件驱动编程(Event-driven Programming)是一种编程范式,其中程序的控制流是由“事件”驱动的。事件通常指的是用户操作、网络请…...
RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案
RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器,支持8K视频编解码,多屏4K输出,可实现12屏联屏拼接、同显、异显,适配多种操作系统,广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…...
Postman测试big-event
报错500。看弹幕,知道可能是yml或sql有问题。 所以检查idea工作台, 直接找UserMapper检查,发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题,而且是有now()的那个sql。 之后通过给的课件,复制课件…...
38. 考古学家
题目描述 有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗? 输入描述 第…...
商用车自动驾驶,迎来大规模量产「临界点」?
商用车自动驾驶,正迎来新的行业拐点。 今年初,交通部公开发布AEB系统运营车辆标配征求意见稿,首次将法规限制条件全面放开,有望推动商用车AEB全面标配,为开放场景的商用车智能驾驶市场加了一把火。 另外,…...
中建海龙:科技助力福城南产业片区绿色建筑发展
在快速发展的城市化进程中,绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业,中建海龙科技有限公司(简称“中建海龙”)凭借其卓越的科技实力和创新举措,在推动绿色建筑发展方面做出了…...
selenium-side-runner + edge快速使用
安装和配置 Node.js 与 Selenium-Side-Runner 1. 安装 Node.js 为了使用 selenium-side-runner,首先需要在你的系统上安装 Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它允许开发者编写服务器端代码。 通过 Winget 安装 Node.js(适用于 Windows 10/…...
ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代
2024年11月30日,ARM正式发布了其最新的Armv9.5架构,这是Arm技术发展的又一重要里程碑。从表中信息来看,Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升,更是…...
Pytorch的自动求导模块
文章目录 torch.autograd.backward()基本用法非标量张量的反向传播保留计算图指定输入张量高阶梯度计算 与 y.backward() 的区别torch.autograd.grad()基本用法非标量张量的梯度高阶梯度计算多输入、多输出的梯度计算未使用的输入张量保留计算图 与 backward() 的区别 torch.au…...
【React】- 跨域PDF预览、下载(改文件名)、打印
我们经常会碰到跨域来方位PDF,同时需要下载、打印的需求,通常由于浏览器的安全策略,可以预览,但是下载和打印可能会受限,这时候怎么办呢? 1.创建一个隐藏的标签 要下载 iframe 中的 PDF 文件,…...
HuggingFace 模型文件详解:如何加载本地模型?
HuggingFace 模型文件详解 在使用 HuggingFace 下载大型语言模型(如 LLaMA-3-1-8B)后,会发现模型目录下包含多个文件和文件夹。本文将详细介绍这些文件的作用以及它们在模型加载和推理过程中的功能。 文件结构总览 models--meta-llama--Lla…...
Boost之buffer
目录 一、定义和介绍 二、示例 1、点 单点 多点 2、线 3、面 单面 多面 三、总结 四、测试代码 一、定义和介绍 buffer函数是boost库(algorithms)算法模块中的构建缓冲区函数。 其函数原型为(此处为带策略型): template<typename GeometryIn, typename MultiPolygon, typen…...
[redux] ts声明useSelector和useDispatch
先安装 安装 | Redux 中文官网 npm install react-redux npm install reduxjs/toolkit 定义一个切片 import { createSlice } from reduxjs/toolkit;const userSlice createSlice({name: user,initialState: {name: lsm,age: 24,},reducers: {}, }); //注意这里写导出redu…...
计算机网络 (19)扩展的以太网
前言 以太网(Ethernet)是一种局域网(LAN)技术,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网技术不断演进,从最初的10Mbps到如今的10Gbps、25Gbps、40Gbps、100Gbps等,已成…...
Ubuntu 23.10 换源
查看当前Ubuntu系统的版本 使用命令: lsb_release -a 中科大源: deb https://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ mantic main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ man…...
如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程
简介 在本教程中,我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时,确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中,我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…...
Android 性能优化:内存优化(实践篇)
1. 前言 前一篇文章Android性能优化:内存优化 (思路篇) 大概梳理了Android 内存原理和优化的必要性及应该如何优化,输出了一套短期和长期内存优化治理的SOP方案。 那么这一篇文章就总结下我最近在做内存优化如何实践的࿰…...
开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
2025年新年临近,Apache SeaTunnel 社区用户案例精选📘也跟大家见面啦!在过去的时间里,SeaTunnel 社区持续成长,吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴,也为了激励更多人加入技术共创&…...
用python编写一个放烟花的小程序
import pygame import random # 代码解释及使用说明: # 首先,导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制,random 用于生成随机数。 # 初始化 pygame,并设置屏幕尺寸为 800x600 像素,设置窗口标题为…...
以一个实际例子来学习Linux驱动程序开发之“设备类”的相关知识【利用设备类实现对同一设备类下的多个LED灯实现点亮或关闭】
前言 对于一个设备的驱动程序来说,其实上层用户主要看到的、用到的就是设备文件和设备类,当然用得最多的是设备文件,虽然设备类用得不多,但也是每一个设备注册实例化时必须要用到的东西,本篇博文就以一个简单的例子说…...
培训机构Day22
今天主要还是围绕着jquery讲解的,没有什么可说的。 知识点: 常用事件类型: 1.click:单击事件。鼠标,或键盘都可以触发。 2.dblclick:双击事件。 3.contextmenu:右键事件。 4.键盘相关事件&…...
Synopsys软件基本使用方法
Synopsys软件基本使用方法 1 文件说明2 编译流程3 查看波形4 联合仿真 本文主要介绍Synopsys软件vcs、verdi的基本使用方法,相关文件可从 GitHub下载。 1 文件说明 创建verilog源文件add.v、mult.v、top.vmodule add (input signed [31:0] dina,input signed [3…...
信息科技伦理与道德1:研究方法
1 问题描述 1.1 讨论? 请挑一项信息技术,谈一谈为什么认为他是道德的/不道德的,或者根据使用场景才能判断是否道德。判断的依据是什么(自身的道德准则)?为什么你觉得你的道德准则是合理的,其他…...
手机租赁平台开发实用指南与市场趋势分析
内容概要 在当今快速变化的科技时代,手机租赁平台的发展如火如荼。随着越来越多的人希望使用最新款的智能手机,但又不愿意承担昂贵的购机成本,手机租赁平台应运而生。这种模式不仅为用户提供了灵活的选择,还为企业创造了新的商机…...
ABAQUS三维Voronoi晶体几何建模
材料晶体塑性理论与细观尺度上晶体几何模型相融合的模拟方法为探究材料在塑性变形过程中的行为机制以及晶体材料优化开辟了新途径。本案例演示在CAD软件内通过Voronoi建立晶体三维模型,并将模型导入到Abaqus CAE内,完成晶体材料的有限元建模。 在AutoC…...
职场常用Excel基础04-二维表转换
大家好,今天和大家一起分享一下excel的二维表转换相关内容~ 在Excel中,二维表(也称为矩阵或表格)是一种组织数据的方式,其中数据按照行和列的格式进行排列。然而,在实际的数据分析过程中,我们常…...
如何使用 ChatGPT Prompts 写学术论文?
第 1 部分:学术写作之旅:使用 ChatGPT Prompts 进行学术写作的结构化指南 踏上学术写作过程的结构化旅程,每个 ChatGPT 提示都旨在解决特定方面,确保对您的主题进行全面探索。 制定研究问题: “制定一个关于量子计算的社会影响的研究问题,确保清晰并与您的研究目标保持一…...
【深度学习】Java DL4J基于 LSTM 构建新能源预测模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...
Jetson系列部署YOLOv8模型教程
简介 NVIDIA Jetson系列是专为边缘计算设计的紧凑型计算模块,其目标用户为AI开发者、嵌入式系统工程师以及需要在设备端实时进行数据处理与AI推断的创新者。通过提供灵活的硬件平台,结合NVIDIA强大的GPU计算资源,Jetson系列能够支持复杂的机…...
【HAProxy】如何在Ubuntu下配置HAProxy服务器
HAProxy 是一款免费、开源且强大的反向代理程序,它为 HTTP 和 TCP 基础的应用提供了高可用性、负载均衡以及代理功能,因此对于管理高流量服务器(或 Web 应用)来说,通过将负载分散到多个节点服务器上,它是一…...
gesp(C++一级)(7)洛谷:B3863:[GESP202309 一级] 小明的幸运数
gesp(C一级)(7)洛谷:B3863:[GESP202309 一级] 小明的幸运数 题目描述 所有个位数为 k k k 的正整数,以及所有 k k k 的倍数,都被小明称为“ k k k 幸运数”。小明想知道正整数 L L L 和 R R R 之间&a…...
【数据库系统概论】数据库完整性与触发器--复习
在数据库系统概论中,数据库完整性是指确保数据库中数据的准确性、一致性和有效性的一组规则和约束。数据库完整性主要包括实体完整性、参照完整性和用户定义完整性。以下是详细的复习内容: 1. 数据库完整性概述 数据库完整性是指一组规则,这…...
【YOLOv8模型网络结构图理解】
YOLOv8模型网络结构图理解 1 YOLOv8的yaml配置文件2 YOLOv8网络结构2.1 Conv2.2 C3与C2f2.3 SPPF2.4 Upsample2.5 Detect层 1 YOLOv8的yaml配置文件 YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨干(backbone)和头部…...
使用 commitlint 和 husky 检查提交描述是否符合规范要求
在上一小节中,我们了解了 Git hooks 的概念,那么接下来我们就使用 Git hooks 来去校验我们的提交信息。 要完成这么个目标,那么我们需要使用两个工具: 注意:npm 需要在 7.x 以上版本。 1. commitlint 用于检查提交信…...