DeepSeek-R1论文阅读及蒸馏模型部署
DeepSeek-R1论文阅读及蒸馏模型部署
文章目录
- DeepSeek-R1论文阅读及蒸馏模型部署
- 摘要
- Abstract
- 一、DeepSeek-R1论文
- 1. 论文摘要
- 2. 引言
- 3. DeepSeek-R1-Zero的方法
- 3.1 强化学习算法
- 3.2 奖励建模
- 3.3 训练模版
- 3.4 DeepSeek-R1-Zero的性能、自进化过程和顿悟时刻
- 4. DeepSeek-R1:冷启动强化学习
- 4.1 冷启动
- 4.2 面向推理的强化学习
- 4.3 拒绝采样和监督微调
- 4.4 适用于所有场景的强化学习
- 5. 蒸馏:赋予小型模型推理能力
- 二、DeepSeek-R1蒸馏模型的部署
- 1. ollama部署
- 2. 推理引擎SGLang部署
- 总结
摘要
本文介绍了基于强化学习的推理模型DeepSeek-R1-Zero及其改进版本DeepSeek-R1的研究与部署。DeepSeek-R1-Zero通过纯强化学习训练,无需监督微调,展现出自主推理能力,但面临可读性与语言混合问题。DeepSeek-R1结合多阶段训练与冷启动数据优化模型性能,其推理能力与OpenAI-o1-1217相当。研究团队开源了包括DeepSeek-R1-Zero、DeepSeek-R1及基于Qwen与Llama的六种蒸馏模型(1.5B至70B参数量),验证了蒸馏技术在轻量化模型推理能力提升中的有效性。模型部署支持Ollama框架快速体验及SGLang推理引擎的高效服务,为研究社区提供便捷的应用方案。
Abstract
This paper presents the research and deployment of DeepSeek-R1-Zero and its enhanced version DeepSeek-R1, which are reinforcement learning (RL)-based reasoning models. DeepSeek-R1-Zero, trained purely through RL without supervised fine-tuning (SFT), demonstrates autonomous reasoning capabilities but struggles with readability and language mixing. DeepSeek-R1 addresses these limitations by integrating multi-stage training and cold-start data, achieving performance comparable to OpenAI-o1-1217. The research team open-sourced DeepSeek-R1-Zero, DeepSeek-R1, and six distilled models (1.5B to 70B parameters) based on Qwen and Llama, validating the effectiveness of distillation in enhancing reasoning for lightweight models. Deployment solutions include user-friendly Ollama for rapid testing and SGLang for efficient inference, offering practical tools for the research community.
一、DeepSeek-R1论文
1. 论文摘要
论文介绍了DeepSeek的第一代推理模型,DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习 (RL, Reinforcement Learning) 训练的模型,没有以监督微调 (SFT) 作为预备步骤,它展现了非凡的推理能力。通过 RL,DeepSeek-R1-Zero 自然地展现出许多强大而有趣的推理行为。然而,它遇到了诸如可读性差和语言混合等挑战。为了解决这些问题并进一步提高推理性能,我们引入了 DeepSeek-R1,它在 RL 之前结合了多阶段训练和冷启动数据。DeepSeekR1 在推理任务上的性能与 OpenAI-o1-1217 相当。为了支持研究界,DeepSeek团队开源了 DeepSeek-R1-Zero、DeepSeek-R1 和六个基于 Qwen 和 Llama 从 DeepSeek-R1 蒸馏出来的密集模型 (1.5B、7B、8B、14B、32B、70B)。
2. 引言
近年来,大型语言模型(LLMs)正在经历快速迭代和演变(Anthropic,2024;Google,2024;OpenAI,2024a),逐步缩小了通向通用人工智能(AGI)的差距。
近年来,微调已成为完整训练流程中的重要组成部分。研究表明,微调可以提高推理任务的准确性,使其与社会价值观保持一致,并适应用户偏好,同时与预训练相比,所需的计算资源相对较少。在推理能力的背景下,OpenAI 的 o1(OpenAI,2024b)系列模型首次引入了通过增加思维链推理(CoT, Chain-of-Thought)过程的长度来实现推理时间扩展。这种方法在各种推理任务中取得了显著的改进,例如数学、编码和科学推理。然而,有效测试时间扩展的挑战仍然是研究界的一个开放问题。之前的一些工作探索了各种方法,包括基于过程的奖励模型(Lightman 等人,2023;Uesato 等人,2022;Wang 等人,2023),强化学习(Kumar 等人,2024),以及蒙特卡洛树搜索和束搜索等搜索算法(Feng 等人,2024;Trinh 等人,2024;Xin 等人,2024)。然而,这些方法都没有达到与 OpenAI 的 o1 系列模型相当的通用推理性能。
这篇论文首次尝试使用纯强化学习(RL)来提升语言模型的推理能力。目标是探索LLM在没有任何监督数据的情况下发展推理能力的潜力,重点关注其通过纯RL过程的自我演化。具体来说,我们使用DeepSeek-V3-Base作为基础模型,并采用GRPO(Shao等人,2024)作为RL框架来提升模型在推理方面的性能。在训练过程中,DeepSeek-R1-Zero自然而然地展现出许多强大且有趣的推理行为。经过数千步的RL训练后,DeepSeek-R1-Zero在推理基准测试中表现出超群的性能。然而,DeepSeek-R1-Zero面临着可读性差和语言混合等挑战。为了解决这些问题并进一步提高推理性能,我们引入了 DeepSeek-R1,它整合了少量冷启动数据和多阶段训练流程。具体来说,我们首先收集数千条冷启动数据来微调 DeepSeek-V3-Base 模型。在此之后,我们执行类似 DeepSeek-R1-Zero 的面向推理的强化学习。在强化学习过程接近收敛时,我们通过对强化学习检查点进行拒绝采样,并结合来自 DeepSeek-V3 在写作、事实问答和自我认知等领域中的监督数据,创建新的 SFT 数据,然后重新训练 DeepSeek-V3-Base 模型。在使用新数据进行微调后,检查点会进行额外的强化学习过程,同时考虑来自所有场景的提示。经过这些步骤,我们获得了名为 DeepSeek-R1 的检查点,其性能与 OpenAI-o1-1217 相当。
我们进一步探索了从 DeepSeek-R1 到更小的稠密模型的蒸馏。使用 Qwen2.5- 32B (Qwen, 2024b) 作为基础模型,直接从 DeepSeek-R1 蒸馏优于对其应用强化学习。这表明,大型基础模型发现的推理模式对于提高推理能力至关重要。我们开源了蒸馏后的 Qwen 和 Llama (Dubey 等人,2024) 系列。值得注意的是,我们蒸馏的 14B 模型在推理基准测试中,大幅度超过了最先进的开源 QwQ-32B-Preview (Qwen, 2024a),而蒸馏的 32B 和 70B 模型在稠密模型中创下了新的记录。
3. DeepSeek-R1-Zero的方法
3.1 强化学习算法
(这个算法还不是很能理解)
分组相对策略优化(GRPO, Group Relative Policy Optimization)
3.2 奖励建模
奖励是强化学习训练信号的来源,决定了强化学习的优化方向。为了训练DeepSeek-R1-Zero,我们采用了一种基于规则的奖励系统,该系统主要由两种类型的奖励组成:
-
准确性奖励:准确性奖励模型评估响应是否正确。例如,在具有确定性结果的数学问题中,模型需要以指定格式(例如,在框内)提供最终答案,从而实现基于规则的可靠正确性验证。类似地,对于 LeetCode 问题,可以使用编译器根据预定义的测试用例生成反馈。
-
格式奖励:除了准确性奖励模型之外,我们还采用了一个格式奖励模型,强制模型将其思考过程置于“<think>”和“<think>”标签之间。
我们在开发 DeepSeek-R1-Zero 时没有使用结果或过程神经奖励模型,因为我们发现神经奖励模型在大型强化学习过程中可能会遭受奖励黑客攻击,并且重新训练奖励模型需要额外的训练资源,这会使整个训练流程变得复杂。
3.3 训练模版
为了训练 DeepSeek-R1-Zero,我们首先设计了一个简单的模板,引导基础模型遵循我们指定的指令。如表 1 所示,该模板要求 DeepSeek-R1-Zero 首先生成推理过程,然后给出最终答案。我们有意将约束限制在该结构格式,避免任何内容特定的偏差——例如强制反射性推理或推广特定问题解决策略——以确保我们能够准确地观察模型在强化学习 (RL) 过程中的自然进展。
3.4 DeepSeek-R1-Zero的性能、自进化过程和顿悟时刻
DeepSeek-R1-Zero 图 2 展示了 DeepSeekR1-Zero 在 AIME 2024 基准测试中,在整个强化学习 (RL) 训练过程中的性能轨迹。
表 2 对 DeepSeek-R1-Zero 和 OpenAI 的 o1-0912 模型在各种推理相关基准测试中进行了比较分析。研究结果表明,强化学习赋予DeepSeek-R1-Zero 强大的推理能力,无需任何监督微调数据。
DeepSeek-R1-Zero 的自我进化过程:DeepSeek-R1-Zero 的自我进化过程是强化学习如何驱动模型自主提高其推理能力的一个引人入胜的演示。通过直接从基础模型启动强化学习,我们可以密切监控模型的进展,不受监督微调阶段的影响。这种方法为我们提供了模型随时间推移如何演变的清晰视图,特别是在处理复杂推理任务的能力方面。
图3表示,DeepSeek-R1-Zero 的思考时间在整个训练过程中持续改善这种改进并非源于外部调整,而是模型内部的固有发展。DeepSeek-R1-Zero 通过利用扩展的测试时间计算,自然地获得了解决越来越复杂的推理任务的能力。这种计算范围从生成数百到数千个推理标记,使模型能够更深入地探索和完善其思维过程。
这种自我进化的一个最显著的方面是,随着测试时计算量的增加,出现了复杂的行为。诸如反思——模型重新审视和重新评估其先前的步骤——以及探索解决问题的替代方法等行为自发出现。这些行为并非显式编程,而是模型与强化学习环境交互的结果。这种自发发展显著增强了DeepSeek-R1-Zero的推理能力,使其能够更有效率和准确地处理更具挑战性的任务。
DeepSeek-R1-Zero 的顿悟时刻在 DeepSeek-R1-Zero 的训练过程中,一个特别引人注目的现象是顿悟时刻的出现。如表 3 所示,这一时刻发生在模型的中间版本中。在此阶段,DeepSeek-R1-Zero 通过重新评估其初始方法,学会了将更多思考时间分配给问题。这种行为不仅证明了模型不断增长的推理能力,也是强化学习如何导致意想不到的复杂结果的迷人例子。
这一时刻不仅对模型而言是顿悟时刻,对观察其行为的研究人员来说也是如此。这突出了强化学习的力量和美丽:我们不是明确地教模型如何解决问题,而是简单地为其提供正确的激励,它便会自主地开发出先进的解决问题策略。“顿悟时刻”有力地提醒了强化学习在人工智能系统中释放新智能水平的潜力,为未来更自主、更适应性强的模型铺平了道路。
DeepSeek-R1-Zero 的缺点:尽管 DeepSeek-R1-Zero 表现出强大的推理能力,并自主发展出意想不到的强大推理行为,但它也面临着一些问题。例如,DeepSeek-R1-Zero 在可读性差和语言混合等挑战方面举步维艰。为了使推理过程更易读并与开放社区共享,我们探索了 DeepSeek-R1,这是一种利用RL 和人性化冷启动数据的方法。
4. DeepSeek-R1:冷启动强化学习
受 DeepSeek-R1-Zero 的出色结果启发,我们自然会提出两个问题:1)是否可以通过少量高质量数据作为冷启动来进一步提高推理性能或加速收敛?2)如何训练一个用户友好的模型,使其不仅能够生成清晰连贯的思维链 (CoT),而且还展现出强大的通用能力?为了解决这些问题,我们设计了一个训练 DeepSeek-R1 的流程。该流程包含四个阶段,概述如下。
4.1 冷启动
与DeepSeek-R1-Zero不同的是,为了防止从基础模型开始RL训练的早期不稳定冷启动阶段,对于DeepSeek-R1,作者构建并收集了少量的长CoT数据来微调模型作为初始RL行为。为了收集这些数据,作者探索了几种方法:以长CoT为例,使用少量提示,直接提示模型生成具有反射和验证的详细答案,以可读格式收集DeepSeek-R1 Zero输出,并通过人工注释器进行后处理来细化结果。
在这项工作中,作者收集了数千个冷启动数据,以微调DeepSeek-V3-Base作为RL的起点。与DeepSeek-R1-Zero相比,冷启动数据的优势包括:
- 可读性:DeepSeek-R1-Zero的一个关键限制是其内容通常不适合阅读。响应可能会混合多种语言或缺乏标记格式,以突出显示用户的答案。相比之下,在为DeepSeek-R1创建冷启动数据时,作者设计了一个可读的模式,在每个响应的末尾都包含一个摘要,并过滤掉对读者不友好的响应。在这里,我们将输出格式定义为|特殊令牌|<reasoning_process>|特殊令牌|<summary>,,其中推理过程是查询的CoT,摘要用于总结推理结果。
- 潜力:通过仔细设计具有人类先验知识的冷启动数据的模式,作者观察到DeepSeek-R1-Zero的性能更好。可以认为迭代训练是推理模型的一种更好的方法。
4.2 面向推理的强化学习
在根据冷启动数据对DeepSeek-V3-Base进行微调后,作者应用了与DeepSeek-R1-Zero相同的大规模强化学习训练过程。此阶段的重点是增强模型的推理能力,特别是在推理密集型任务中,如编码,数学,科学和逻辑推理,这些任务涉及定义明确的问题和明确的解决方案。
在训练过程中,作者观察到CoT经常表现出语言混合,特别是当RL提示涉及多种语言时。为了减轻语言混合的问题,我们在RL训练期间引入了语言一致性奖励,其计算为CoT中目标语言单词的比例。
尽管消融实验表明,这种对齐会导致模型性能略有下降,但这种奖励与人类偏好一致,使其更具可读性。最后,作者将推理任务的准确性和语言一致性的奖励结合起来,直接将它们相加,形成最终的奖励。然后,作者对微调后的模型应用强化学习(RL)训练,直到它在推理任务上实现收敛。
4.3 拒绝采样和监督微调
当面向推理的强化学习收敛时,作者利用得到的权重为下一轮收集监督微调(SFT)数据。与主要关注推理的初始冷启动数据不同,这个阶段合并了来自其他领域的数据,以增强模型在编写,角色扮演和其他通用任务方面的能力。具体来说,作者生成数据并对模型进行微调,如下所述。
推理数据 作者通过从上述RL训练的权重执行拒绝采样来管理推理提示并生成推理轨迹。在上一阶段,作者只纳入了可以使用基于规则的奖励进行评估的数据。然而,在这一阶段,作者通过合并额外的数据来扩展数据集,其中一些数据使用了生成性奖励模型,将真实数据和模型预测输入DeepSeek-V3进行判断。
在论文《DeepSeek-R1》中,拒绝采样被用于生成高质量的监督微调(Supervised Fine-Tuning, SFT)数据。具体步骤如下:
从强化学习模型中采样:从经过强化学习训练的模型(如 DeepSeek-R1)中生成大量样本(例如,对某个问题生成多个回答)。
定义拒绝规则:根据某些标准(如答案的正确性、语言质量、是否符合人类偏好等)设计拒绝规则。例如,只保留正确答案或符合特定格式的样本。
生成高质量数据:通过拒绝采样,从大量生成的样本中筛选出高质量的样本,用于后续的监督微调。
非推理数据 对于非推理数据,例如写作,事实QA,自我认知和翻译,作者采用DeepSeek-V3管道并重用DeepSeek-V3的SFT数据集的部分。对于某些非推理任务,调用DeepSeek-V3在通过提示回答问题之前生成潜在的思维链。但是,对于更简单的查询,例如“hello”,我们不提供CoT作为响应。最后,作者总共收集了大约20万个与推理无关的训练样本。
作者使用上述约80万个样本的精选数据集对DeepSeek-V3-Base进行了两个epoch的微调。
4.4 适用于所有场景的强化学习
为了进一步使模型与人类偏好保持一致,作者实施了一个二级强化学习阶段,旨在提高模型的有用性和无害性,同时改进其推理能力。
具体来说,使用奖励信号和各种提示分布的组合来训练模型。
- 对于推理数据,作者坚持DeepSeek-R1-Zero中概述的方法,该方法利用基于规则的奖励来指导数学,代码和逻辑推理领域的学习过程。
- 对于一般数据,作者采用奖励模型来捕捉复杂和细微差别场景中的人类偏好。作者建立在DeepSeek-V3管道的基础上,并采用了类似的偏好对和训练提示的分布。
为了提供帮助,作者专门关注最终摘要,确保评估强调响应对用户的实用性和相关性,同时最大限度地减少对潜在推理过程的干扰。对于无害性,作者评估模型的整个响应,包括推理过程和摘要,以识别和减轻生成过程中可能出现的任何潜在风险,偏见或有害内容。最终,奖励信号和不同数据分布的整合使我们能够训练出一个在推理方面表现出色的模型,同时优先考虑有益和无害
5. 蒸馏:赋予小型模型推理能力
为了使更小、更高效的模型具备像 DeekSeek-R1 这样的推理能力,我们直接使用 DeepSeek-R1 收集的 800k 个样本对开源模型(如 Qwen(Qwen,2024b)和 Llama(AI@Meta,2024))进行了微调,具体细节见 §2.3.3。我们的发现表明,这种直接的蒸馏方法显著增强了小型模型的推理能力。我们在此使用的基础模型为 Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B 和 Llama-3.3-70B-Instr uct。我们选择 Llama-3.3 作为基础模型,因为它的推理能力略优于 Llama-3.1。
对于蒸馏模型,我们只应用 SFT,不包括 RL 阶段,即使加入 RL 可以大幅提升模型性能。我们这里的主要目标是展示蒸馏技术的有效性,将 RL 阶段的探索留给更广泛的研究社区。
二、DeepSeek-R1蒸馏模型的部署
1. ollama部署
Ollama是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。其主要目标是简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。目前 Ollama 支持 macOS、Linux、Windows,选择相应的系统下载即可。
进入ollama官网:https://ollama.com/
选择对应的操作系统版本进行下载:
打开cmd,输入下列命令
ollama run deepseek-r1:8b #可选:1.5b 7b 8b 14b 32b 70b
注意不同模型的配置要求不同:
DeepSeek模型版本 | 参数量 | 特点 | 适用场景 | 硬件配置 |
---|---|---|---|---|
DeepSeek-R1-1.5B | 1.5B | 轻量级模型,参数量少,模型规模小 | 适用于轻量级任务,如短文本生成、基础问答等 | 4核处理器、8G内存,无需显卡 |
DeepSeek-R1-7B | 7B | 平衡型模型,性能较好,硬件需求适中 | 适合中等复杂度任务,如文案撰写、表格处理、统计分析等 | 8核处理器、16G内存,Ryzen7或更高,RTX 3060(12GB)或更高 |
DeepSeek-R1-8B | 8B | 性能略强于7B模型,适合更高精度需求 | 适合需要更高精度的轻量级任务,比如代码生成、逻辑推理等 | 8核处理器、16G内存,Ryzen7或更高,RTX 3060(12GB)或4060 |
DeepSeek-R1-14B | 14B | 高性能模型,擅长复杂的任务,如数学推理、代码生成 | 可处理复杂任务,如长文本生成、数据分析等 | i9-13900K或更高、32G内存,RTX 4090(24GB)或A5000 |
DeepSeek-R1-32B | 32B | 专业级模型,性能强大,适合高精度任务 | 适合超大规模任务,如语言建模、大规模训练、金融预测等 | Xeon 8核、128GB内存或更高,2-4张A100(80GB)或更高 |
DeepSeek-R1-70B | 70B | 顶级模型,性能最强,适合大规模计算和高复杂任务 | 适合高精度专业领域任务,比如多模态任务预处理。这些任务对硬件要求非常高,需要高端的 CPU 和显卡,适合预算充足的企业或研究机构使用 | Xeon 8核、128GB内存或更高,8张A100/H100(80GB)或更高 |
DeepSeek-R1-671B | 671B | 超大规模模型,性能卓越,推理速度快,适合极高精度需求 | 适合国家级 / 超大规模 AI 研究,如气候建模、基因组分析等,以及通用人工智能探索 | 64核、512GB或更高,8张A100/H100 |
等待模型下载完成后即可对话:
命令行的对话并不方便,可选择Chatbox增强对话的交互性。Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的 AI 模型和 API。在Chatbox AI官网https://chatboxai.app/zh中下载,安装后需进行配置。
在模型提供方中选择“OLLAMA API”,在模型一栏中选择下载好的deepseek模型,点击“保存”即可正常对话。
这个安装方式上手最快可直接体验,适合非专业用户部署。
2. 推理引擎SGLang部署
大模型推理引擎(Inference Engine),通过优化算法、硬件加速和分布式计算等技术手段,显著提升了大模型在实际应用中的推理速度和效率。这些引擎不仅能够加速模型的推理过程,还能在保证推理质量的前提下,降低计算资源的消耗,从而使得大模型在更多场景中得以广泛应用。SGLang是目前比较新的推理引擎,很多新开源大模型都支持SGLang的部署推理,例如deepseek-R1,Qwen2.5,Mistral,GLM-4,MiniCPM 3,InternLM 2, Llama 3.2等。
首先是环境的创建:
conda create -n sglang python=3.12conda activate sglangpip install vllm# 安装最新的版本pip install sglang==0.4.1.post7 pip install sgl_kernel
可能会提示libnvJitLink.so.12
的链接问题,可以参照下列博客解决:
解决libcusparse.so.12: undefined symbol: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
之后可能会提示flashinfer包缺失的问题:
from flashinfer import (
ModuleNotFoundError: No module named 'flashinfer'
下载flashinfer
的安装 whl 包,然后用 pip 安装。
flashinfer各个版本安装包的地址:https://flashinfer.ai/whl/cu124/torch2.4/flashinfer/
下载匹配环境的版本,我是pytorch2.5.1,安装的是flashinfer-0.2.0.post1+cu124torch2.4-cp312-cp312-linux_x86_64.whl
。
wget https://github.com/flashinfer-ai/flashinfer/releases/download/v0.2.0/flashinfer-0.2.0+cu124torch2.4-cp312-cp312-linux_x86_64.whl#sha256=a743e156971aa3574faf91e1090277520077a6dd5e24824545d03ce9ed5a3f59pip install flashinfer-0.2.0.post1+cu124torch2.4-cp312-cp312-linux_x86_64.whl --no-deps
然后需要下载蒸馏模型的对应模型文件,在DeepSeek-R1的huggingface官网上:deepseek-ai/DeepSeek-R1 · Hugging Face
可以参考这篇文章解决下载huggingface上面大模型的问题:如何快速下载Huggingface上的超大模型,不用梯子,以Deepseek-R1为例子-CSDN博客
最后可以启动服务,以1.5b的蒸馏模型为例:
python3 -m sglang.launch_server --model ./DeepSeek-R1-Distill-Qwen-1.5B --host 0.0.0.0 --port 8123
显示如下,启动成功:
利用测试脚本测试:
import openaiclient = openai.Client(base_url="http://localhost:8123/v1", api_key="None")response = client.chat.completions.create(model="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",messages=[{"role": "user", "content": "在计算机视觉人体骨架识别方面,请给我制定一份相关论文的学习路线"},],temperature=0,max_tokens=4096,
)
print(response.choices[0].message.content)
可得到DeepSeek-1.5B模型的输出:
同时SGLang的推理引擎支持多GPU张量并行和数据并行的大模型启动,详情可以参考SGLang的中文手册:后端:SGLang 运行时 (SRT) — SGLang。
总结
本文探索阅读了最近很火的DeepSeek的原文并实践部署。DeepSeek-R1-Zero通过纯RL训练自主演化出复杂推理行为,验证了无监督方法的可行性;DeepSeek-R1进一步引入冷启动数据与多阶段优化,平衡性能与可读性。蒸馏实验表明,大型模型的推理模式可有效迁移至轻量化模型。部署方案兼顾易用性与效率,介绍了两种方法,Ollama支持非专业用户快速体验,SGLang则通过硬件加速与分布式计算优化推理效率。
相关文章:

DeepSeek-R1论文阅读及蒸馏模型部署
DeepSeek-R1论文阅读及蒸馏模型部署 文章目录 DeepSeek-R1论文阅读及蒸馏模型部署摘要Abstract一、DeepSeek-R1论文1. 论文摘要2. 引言3. DeepSeek-R1-Zero的方法3.1 强化学习算法3.2 奖励建模3.3 训练模版3.4 DeepSeek-R1-Zero的性能、自进化过程和顿悟时刻 4. DeepSeek-R1&am…...

OpenEuler学习笔记(三十三):在 OpenEuler 上搭建 OpenGauss 数据库环境
在 OpenEuler 上搭建 OpenGauss 数据库环境需要按照以下步骤进行。OpenGauss 是华为开源的一款高性能关系型数据库,支持高并发、高可用性和分布式部署。 1. 环境准备 确保你的 OpenEuler 系统满足以下要求: 操作系统:OpenEuler 20.03 LTS 或…...

[C++]多态详解
目录 一、多态的概念 二、静态的多态 三、动态的多态 3.1多态的定义 3.2虚函数 四、虚函数的重写(覆盖) 4.1虚函数 4.2三同 4.3两种特殊情况 (1)协变 (2)析构函数的重写 五、C11中的final和over…...
调用DeepSeek API接口:实现智能数据挖掘与分析
调用DeepSeek API接口:实现智能数据挖掘与分析 在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用D…...
ffmpeg-cli-wrapper操作ffmpeg的工具
学习链接 ffmpeg-cli-wrapper - 内部封装了操作ffmpeg命令的java类库,它提供了一些类和方法,可以方便地构建和执行 ffmpeg 命令,而不需要直接操作字符串或进程。并且支持异步执行和进度监听 springboot-ffmpeg-m3u8-convertor - gitee代码 …...
【Qt】QObject类的主要功能
在 Qt 中,QObject 类是所有 Qt 对象的基类,提供了许多基础功能,使得 Qt 的对象系统能够有效地工作。它为其他类提供了核心的机制,比如信号和槽机制、对象树结构、内存管理等。 QObject 类的主要功能: 信号和槽机制&am…...

学习笔记之debian的thonny开发(尚未验证)--从stm32裸机到linux嵌入式系统
这应该算 stm32裸机用户 转 linux嵌入式系统 的入门学习笔记。 【鲁班猫】39-vnc远程桌面连接鲁班猫_哔哩哔哩_bilibili 本集的鲁班猫的视频介绍中,没有清晰明确指出需要linux开发板接入网络,接入网络可以使用有线网口或者wifi路由,有些提示…...

把 CSV 文件摄入到 Elasticsearch 中 - CSVES
在我们之前的很多文章里,我有讲到这个话题。在今天的文章中,我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全…...

PyQt组态软件 拖拽设计界面测试
PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件,目前实现的功能如下: 支持拖入控件,鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器,修改当前选中控件的属性 拖动框选控件,点选控件 控…...
【Python爬虫(1)】专栏开篇:夯实Python基础
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
Java中的分布式(概念说明)
1. 分布式的基本概念 1.1 什么是分布式系统? 分布式系统(Distributed System):由多台服务器(或节点)协同工作,对外提供一个整体服务。不同节点之间通过网络通信来协同处理请求或共享数据&…...

Field ‘id‘ doesn‘t have a default value
1.程序测试时,运行到向数据库插入数据时,报以下异常 是id没有默认值; 在测试单元内单独向该数据库插入数据,报同样的异常,确定了异常的定位 2.项目时采用mybatisPlus操作数据库,报异常的数据库和另外一个数据库关联,主键ID和另外一个数据库相同,通过读取另外一个数据库的ID获…...
蓝桥杯 Java B 组之栈的应用(括号匹配、表达式求值)
一、栈的基本概念 栈(Stack)是一种特殊的线性数据结构,遵循后进先出(Last In First Out,LIFO)的原则。就像一摞盘子,最后放上去的盘子总是最先被拿走。栈有两个主要操作: 入栈&…...

Hive之分区表
Hive之分区表 文章目录 Hive之分区表写在前面分区表分区表基本操作引入分区表创建分区表语法加载数据到分区表中查询分区表中数据增加分区删除分区查看分区表有多少分区查看分区表结构 二级分区正常的加载数据分区表和数据产生关联 动态分区开启动态分区参数设置案例实操 写在前…...

Redis之持久化
1.前言 Redis⽀持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。本文内容: • 介绍RDB、AOF的配置和运⾏流程,以及控制持久化的命令,…...
有关计算机的英语单词、短语、句子
基本计算机术语 Computer – 计算机 Hardware – 硬件 Software – 软件 Operating System (OS) – 操作系统 Processor (CPU) – 处理器(中央处理单元) Memory (RAM) – 内存(随机存取存储器) Storage – 存储 Disk Drive – 硬…...
String、StringBuffer、StringBuilder 区别
在 Java 编程中,String、StringBuffer 和 StringBuilder 是处理字符串时常用的类。它们在功能上有相似之处,但在内部实现、性能、线程安全性等方面存在显著差异。理解这些差异有助于开发者在不同的场景下做出合适的选择,提高代码的性能和效率…...

shell——分支语句
文章目录 基本语法常用判断条件(1)两个整数之间比较(2)按照文件权限进行判断(3)按照文件类型进行判断(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令…...

【vue3】实现pdf在线预览的几种方式
今天一天对当前可用的pdf预览插件做了测试,主要需求是只能预览不能下载,但对于前端来说,没有绝对的禁止,这里只罗列实现方式。 目前采用vue3版本为:3.2.37 iframevue-officepdfjs-dist iframe 先说最简单的…...
(学习总结22)Linux 基本指令1
Linux 基本指令1 基本指令当前目录信息指令 ls查看路径指令 pwd改变当前所在目录指令 cd创建或更改文件时间指令 touch创建目录指令 mkdir删除空目录指令 rmdir删除指令 rm查阅手册指令 man拷贝文件指令 cp移动文件指令 mv打印内容指令 echo 查看指令查找文件指令 find查看指令…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...