大模型(LLMs)强化学习——RLHF及其变种
大模型(LLMs)强化学习——RLHF及其变种面
一、介绍一下 LLM的经典预训练Pipeline?二、预训练(Pre-training)篇
- 具体介绍一下 预训练(Pre-training)?三、有监督微调(Supervised Tinetuning)篇
- 具体介绍一下 有监督微调(Supervised Tinetuning)?
- 有监督微调(Supervised Tinetuning)的训练数据格式是什么样?
- 预训练(Pre-training) vs 有监督微调(Supervised Tinetuning)区别?四、对齐(Alignment)篇
- 简单介绍一下 对齐(Alignment)?
五、Reinforcement Learning with Human Feedback (RLHF)篇
- 简单介绍一下 RLHF 流程?
- 如何在在预训练好的模型上进行有监督微调?
- 如何在有监督微调模型基础上创建一个RM模型?
- 如何基于RM模型使用PPO算法微调SFT模型?
- instructGPT的原理,讲讲rlhf和reward?六、LLaMA 2 的 RLHF 篇
- 介绍一下 LLaMA 2 的 RLHF?
- LLaMA 2 中 Margin Loss 的 实现逻辑?
- LLaMA 2 中 两个RM模型 的 实现逻辑?
- LLaMA 2 中 拒绝采样 逻辑?七、 RLHF 替代方案篇
- 为什么需要 RLHF 替代方案?
- RLHF 有哪些替代方案?
替代方案 1:Constitutional AI: Harmlessness from AI Feedback
替代方案 2:The Wisdom of Hindsight Makes Language Models Better Instruction Followers
替代方案 3:Direct Preference Optimization: Your Language Model is Secretly a Reward
Model
替代方案 4:Reinforced Self-Training (ReST) for Language Modeling
替代方案 5:RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback
八、 RLHF 实践篇
- RLHF 训练过程,怎么选取最优 checkpoint?
参考
一、介绍一下 LLM的经典预训练Pipeline?
目前基于Transformer decoder的LLM,比如ChatGPT、LLaMA、baichuan等,通常都会有基于预训练的base模型和在base模型至少使用RLHF微调的Chat模型,Chat模型的训练一般都包括如下三个步骤:预训练,有监督微调和对齐。
- 在预训练阶段,模型会从大量无标注文本数据集中学习通用知识;
- 使用「有监督微调」(SFT)优化模型以更好地遵守特定指令;
- 使用对齐技术使LLM可以更有用且更安全地响应用户提示。
二、预训练(Pre-training)篇
- 具体介绍一下 预训练(Pre-training)?
预训练(Pre-training):利用数十亿到数万亿个token的庞大文本语料库 对模型继续 预训练,使 模型能够 根据提供的文本来预测「下一个单词」。
三、有监督微调(Supervised Tinetuning)篇
- 具体介绍一下 有监督微调(Supervised Tinetuning)?
有监督微调(Supervised Tinetuning):虽然 SFT 训练目标和 预训练(Pre-training)类似,也是 需要模型 预测「下一个单词」,但是需要人工标注的指令数据集,其中模型的输入是一个指令(根据任务的不同,也可能包含一段输入文本),输出为模型的预期回复内容。
- 有监督微调(Supervised Tinetuning)的训练数据格式是什么样?
Instruction: "Write a limerick about a pelican."
指令:“写一首关于鹈鹕的打油诗。“
Output: "There once was a pelican so fine..."
输出:“从前有一只鹈鹕很好...“
模型会把“Write a limerick about a pelican”作为输入,逐个token进行预测,输出“There once was a pelican so fine...” - 预训练(Pre-training) vs 有监督微调(Supervised Tinetuning)区别?
相同点:
训练目标相同:模型需要根据提供的文本来预测「下一个单词」;不同点:
训练数据量不同:有监督微调(Supervised Tinetuning)需要训练数据量比 预训练(Pre- training) 小很多;
训练数据格式不同:有监督微调(Supervised Tinetuning)需要人工标注的训练数据,预训练
(Pre-training) 不需要;
四、对齐(Alignment)篇
- 简单介绍一下 对齐(Alignment)?
对齐(Alignment):通过微调的方式,将语言模型与人类的偏好、价值观进行对齐,这也是RLHF机制发挥的地方。
五、Reinforcement Learning with Human Feedback (RLHF)篇
- 简单介绍一下 RLHF 流程?
- 在预训练好的模型上进行「有监督微调」(SFT);
- 在有监督微调模型基础上创建一个reward model(RM)模型;
- 基于RM模型使用PPO算法微调SFT模型;
- 如何在在预训练好的模型上进行有监督微调?
先收集一个Prompts集合,并要求标注人员写出高质量的回复,然后使用该数据集以监督的方式微调预训练的基础模型。
- 如何在有监督微调模型基础上创建一个RM模型?
对于每个Prompt,要求有监督微调后的LLM生成四到九个回复,再由标注人员根据个人偏好对所有回复进行排序。虽然排序过程很耗时,但工作量还是比第一步的有监督数据集构建要少一些。
在处理排序数据时,使用了一个奖励模型RM,RM来自RLHF第一步的「有监督微调语言模型」
(SFT),SFT的输出通过一个回归层(单个输出节点)转换为奖励分数,即可称为RM模型。
- 如何基于RM模型使用PPO算法微调SFT模型?
基于RM模型使用proximal policy optimization (PPO)算法微调SFT模型
- instructGPT的原理,讲讲rlhf和reward?
instructGPT是一种基于强化学习的文本生成模型,其核心原理涉及两个概念:RLHF(Reinforcement Learning from Human Feedback)和reward shaping(奖励塑造)。
RLHF:在训练instructGPT时,首先使用有人类生成的示例对模型进行预训练。然后,通过与人类评估者进行交互,收集评估结果,以创建一个用于强化学习的数据集。该数据集包含了人类评估者对生成结果的评分或反馈,用于指导模型的强化学习训练。
Reward shaping:为了更好地引导模型的训练,reward shaping用于调整模型的奖励信号。通过
将人类评估者的反馈与模型生成的文本进行比较,可以计算出一个差异度量,用作奖励信号的一部分。这样,模型可以根据这个奖励信号进行训练,并进行强化学习的训练。模型根据当前的状态
(对话历史)生成文本,并通过奖励信号来评估生成文本的质量。模型的目标是最大化预期累积奖励,从而生成更高质量的文本。
通过RLHF和reward shaping的结合,instructGPT能够通过人类评估者的反馈指导模型的生成过程,并逐步提升生成文本的质量和一致性。
六、LLaMA 2 的 RLHF 篇
- 介绍一下 LLaMA 2 的 RLHF?
Llama-2-chat在第一步RLHF微调上使用相同的指令数据,但在第二步使用了两个奖励模型;通过多个阶段的不断进化,奖励模型也会根据Llama-2-chat模型出现的错误进行更新;并且增加了拒绝采样
(rejection sampling)步骤。
- LLaMA 2 中 Margin Loss 的实现逻辑?
标准InstructGPT 中 RLHF PPO方法 思路:对同一个提示下的4-9个模型输出并进行排序。
eg:四个回复的排序结果为A<C< D<B,那么就可以得到六个对比结果:A < C,A < D ,A < B,C < D, C < B,D < B
Llama 2 的 Margin Loss:每次只能看到两个(而非4-9个)回复并进行对比,但新增了一个边际
(margin)标签,对比结果可以为「显著更好」(significantly better)和「好的不明显」
(negligibly better)
在排序训练时中,Llama 2相比InstructGPT增加了边际损失:
其中,rθ(x,y)是提示x和生成的回复y的标量分数输出; θ为模型权重; σ是将层输出转换为范围从0到1的分数的逻辑S形函数; yc是由标注人员选择的更优回复; yr是较差的回复。m(r)可以调节两个回复之间的差值,如果对比结果为「显著更好」,则会增加梯度值,加快更新速度。
- LLaMA 2 中 两个RM模型 的 实现逻辑?
Llama 2中的两个奖励模型:
侧重「有用性」(helpfulness)
「安全性」(safety)
用于模型优化的最终奖励函数会将两个分数进行线性组合。
- LLaMA 2 中 拒绝采样 逻辑?
Llama 2 使用了一个训练流水线,同时使用PPO和拒绝采样算法,迭代地产生多个RLHF模型(从RLHF- V1到RLHF-V5),模型在拒绝采样时会得到K个输出,并使用最高奖励的输出更新梯度,而PPO每次只基于单样本进行更新。
在监督微调的初始阶段之后,模型只使用拒绝采样进行训练,然后再结合拒绝采样和PPO。
七、 RLHF 替代方案篇
- 为什么需要 RLHF 替代方案?
虽然 RLHF在InstructGPT和Llama 2论文中被证明是有效的,但是RLHF的过程是比较复杂的。 - RLHF 有哪些替代方案?
替代方案 1:Constitutional AI: Harmlessness from AI Feedback
论文名称:Constitutional AI: Harmlessness from AI Feedback
论文链接:https://arxiv.org/abs/2212.08073
论文 提出了一种基于人类提供的规则列表的自我训练机制。与前面提到的InstructGPT论文类似,也使用了强化学习方法。
上图中的「红队」(Red Team)指的是测试目标系统的防御能力,即外部或内部专家模拟潜在对手的过程,通过模仿现实世界攻击者的战术、技术和程序来挑战、测试并最终改进系统。
替代方案 2:The Wisdom of Hindsight Makes Language Models Better Instruction Followers
论文名称:The Wisdom of Hindsight Makes Language Models Better Instruction Followers
论文链接:https://arxiv.org/abs/2302.05206
论文提出了一种基于重新标记的监督微调方法HIR,该方法在12个BigBench任务上优于RLHF。
HIR是如何工作的?简而言之,HIR方法包括两个步骤,即采样和训练。在采样步骤中,Prompt和指令输入给LLM来获取答案,根据对齐得分,在训练阶段适当的地方重新标注指令;然后,重新标记的指令和原始的Prompt用于微调LLM。使用这种重新标记的方法,研究人员有效地将失败案例(LLM创建的输出与原始指令不匹配的案例)转化为有用的训练数据,用于监督学习。
替代方案 3:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
论文名称:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
论文链接:https://arxiv.org/abs/2305.18290
直接偏好优化(DPO)是具有PPO的RLHF的替代方案,其中研究人员表明,在RLHF中拟合奖励模型的交叉熵损失可以直接用于微调LLM。根据他们的基准,使用DPO更有效,而且在响应质量方面通常也优于RLHF/PPO。
替代方案 4:Reinforced Self-Training (ReST) for Language Modeling
论文名称:Reinforced Self-Training (ReST) for Language Modeling
论文链接:https://arxiv.org/abs/2308.08998
ReST是人类反馈强化学习(RLHF)的一种替代方案,它使LLM与人类偏好保持一致。ReST使用采样方法创建改进的数据集,在质量越来越高的子集上迭代训练,以完善其奖励函数。根据作者的说法,与标准的在线RLHF方法(如具有近端策略优化的RLHF,PPO)相比,ReST通过离线生成训练数据集实现了更高的效率,但缺少与InstructGPT或Llama 2中使用的标准RLHF PPO方法的全面比较。
替代方案 5:RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback
论文名称:RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback
论文链接:https://arxiv.org/abs/2309.00267
最近的人工智能反馈强化学习(RLAIF)研究表明,RLHF中奖励模型训练的评级不一定必须由人类提 供,而是可以由LLM生成(此处:PaLM 2)。标注人员在一半的案例中更喜欢RLAIF模型,也就意味着两个模型的差距并不大,RLHF和RLAIF都大大优于纯通过监督指令微调训练的模型。
这项研究的结果非常有用和有趣,因为它基本上意味着我们可能能够使基于RLHF的训练更加高效和容 易。然而,这些RLAIF模型在专注于信息内容的安全性和真实性的定性研究中的表现还有待观察,而人类偏好研究仅部分捕捉到了这一点。
八、 RLHF 实践篇
- RLHF 训练过程,怎么选取最优 checkpoint?
RLHF 训练过程,因为 Reward Model 输出的只是一个近似奖励(Proxy Reward),
导致不能完全相信训练过程中的 Reward 变化,“更高” 的 Reward 不一定意味着 “更好” 的效果。可以看这一张图片:
注:横轴为训练模型 & 初始模型之间的KL,纵轴为 reward 分数;虚线是近似 reward(RM 打出的分数),实线是真实的 reward(大多数情况下无法直接获得)
从上图可以看到:随着「训练模型」和「初始模型」之间的 KL(可简单理解为差异)越大,模型的「真实分数」会先逐步提升,到达某个峰值后逐渐减小(图中实线),但「近似分数」(由 Reward Model打出来的分数)却一直在稳步上升(图中虚线),显然,在「真实分数」曲线的「最高点」就是我们所期望得到「最优模型」的时间点。
但,现在的问题是:根本无法获得「真实分数」,我们该如何找到这个「最高点」呢?
真实 Reward 的估算公式
我们假定:真实 reward 曲线与「当前模型和初始模型」之间的 KL 存在某种关系。
由于 KL 是一个可以被实时计算的数值,如果我们能够找出这种存在的「关系」,那我们就能找出真实
reward 的最高点对应的 KL 值是多少,从而找出最优模型。
OpenAI 帮我们找到了这个计算公式:
不同训练方法对应的公式稍有不同
其中,BON(best of n)也叫 reject sampling,RL 使用 PPO,我们发现不同的训练方式对应的公式也稍有不同。
BON 指先让模型生成一堆 response,再利用 RM 从中挑出最好的几个回复用于后续模型训练。公式里最关键的就是 3 个参数:α 、β 和 d。
d 被定义为初始模型和当前模型的 KL 开根号,这个比较好算;剩下的就是 α 和 β 该等于多少。
论文中表明:α 和 β 这 2 个值跟「Reward Model 大小」和「Reward Model 训练数据规模」等因素有关。
α 和 β 的值
制变量法,为了探究 RM 的大小和 α、β之间的关系,
实验中固定了 actor 模型的大小(1.2B)、训练 RM 所用的数据集大小(9w条),下图是使用 BON 作为训练方法,不同 RM 大小的实验结果:
不同 RM 规模对应的 α 和 β 的值
根据图中给的点,挑选 1e7、1e8 和 1e9 这 3 个规模对应的 α 和 β 值,
将上述参数代入 R_bon(d) 公式,并尝试绘制 reward 曲线图,结果如下:
3 种 RM 规模在 0 到 3.5 KL 区间内对应的真实 reward 曲线图
曲线图的走势和论文中大致相同,证明该公式有效。从图中我们大致可以得出以下几个结论:
- 相同训练数据下,Reward Model 越大 actor 模型能够获得更高的真实 reward。
- Reward Mode 越大,能够支持模型在「不偏离真实奖励的路途上走更远」,即在更大的 KL 处发生下降转折。
当然,论文中的数据存在一定的局限性,不一定在所有的任务、所有的规模下都适用,
不过这种研究 scaling law 的思路,以及提出用 KL 来作为一种可能衡量「学习程度」的指标是非常有意义的。
除了上述这 2 个 R 和 KL 之间的计算公式外,论文中还提了一些其他有借鉴意义的经验性结论。
- Reward Model 训练数据集的 Scaling Law
为了探究 RM Dataset 的规模对最终模型的影响,实验中固定在 12M 的 RM 下进行实验,结果如下:
从上图中可以看到,RM 数据集越大对最终的提升就越大(这很直觉),但数据集最少也需要超过
2000。
因为如果训练数据量低于 2k,无论 RM 在哪个规模、无论使用 BON 还是 RL,对模型最终的提升都非常小。
当然,论文中 2k 这个数字只是在 3M~3B 大小的模型下得出的结论,至于更大的模型大小是否还符合 2k 这个下限我们就不得而知。
- Policy Model 的 Scaling Law
探究完了 RM 的 Scaling Law,论文中还对 Policy Model 的大小做了对比实验。
文中选用 1.2B 和 6B 这 2 个大小的模型进行对比,固定 RM 大小为 12M,结果如下:
1.2B 和 6B 在 2 种不同训练方式下的对比实验
从上图可以得出 2 个结论:
- Policy Model 越大,利用 RM 做提升的收益就越小:在 BON 下,1.2B 模型提升大约为 0.7 分(0
-> 0.7),6B 模型提升大约为 0.35 分(0.4 -> 0.75),不过这是因为越大的模型初始分就较高导致提升没有那么大,绝对分数上来看还是模型越大越好的; - 无论模型规模如何,最优 Reward 对应的 KL 值是一样的:这一点比较反直觉,我们通常会认为较大的模型应该能够更快的 hacking 掉 reward model,应该在更小的 KL 处就达到最高的 reward 峰值,但实验结果并非如此(在 RL 实验中 2 个峰值对应的 KL 几乎重合)。
相关文章:
大模型(LLMs)强化学习——RLHF及其变种
大模型(LLMs)强化学习——RLHF及其变种面 一、介绍一下 LLM的经典预训练Pipeline?二、预训练(Pre-training)篇 具体介绍一下 预训练(Pre-training)?三、有监督微调(Sup…...
20250510解决NanoPi NEO core开发板在Ubuntu core22.04.3系统下适配移远的4G模块EC200A-CN的问题
1、h3-eflasher-friendlycore-jammy-4.14-armhf-20250402.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区,可以使用SD Card Formatter/SDCardFormatterv5…...
WinCC V7.2到V8.0与S71200/1500系列连接通讯教程以及避坑点
声明:WinCC与PLC连接详细指导与注意避坑点,部分图片和描述来源于网络,如有冒犯,请联系本人删除。 1.环境介绍 自WinCC V7.2版本起,软件新增加了 "SIMATIC S7-1200, S7-1500 Channel"通道,用于WinCC与 S7-1…...
WPF 性能 UI 虚拟化 软件开发人员的思考
UI 虚拟化是 WPF 采用的一项技术,框架会仅创建用户可见的 UI 元素。例如,如果 ListView 中有 1000 个文本块控件,但您只能查看其中的 10 个,那么 VisualTree 中也只会显示 10 个文本块。向下滚动时,不再可见的元素将被…...
服务器综合实验(实战详解)
该文章的目录部分 实验内容 实验完成步骤 虚拟机准备 配置两个虚拟机的本地仓库 虚拟机A: 虚拟机B: 配置SSH公钥互信 虚拟机A: 编辑 虚拟机B: 提供基于bind的DNS服务 虚拟机A: 项目需求1: …...
【动态导通电阻】软硬开关下GaN器件的动态RDSON
2019年,浙江大学的Rui Li、Xinke Wu等人基于双脉冲和多脉冲测试方法,研究了在硬开关和软开关条件下商用氮化镓(GaN)功率器件的动态导通电阻(R DSON )特性。实验结果表明,不同GaN器件在硬开关和软开关条件下的动态R DSON 表现出不同的行为,这些行为受关断电压和频率的影…...
Java基础 5.10
1.方法重写课堂练习 package com.logic.override_; //编写一个Person类 包括属性/private(name, age) 构造器 方法say(返回自我介绍的字符串) //编写一个Student类 继承Person类 增加id score 属性/private 以及构造器 //定义say方法(返回自我介绍的信息) //在main中 分别创建…...
通信原理绪论
(I)信息量:第j条消息中包含的信息定义为:I(j) 消息是信息的表现形式 消息是信息的一种抽象和本质内容 消息中所含的信息量是该消息出现概率的函数,即 I I[P(x)] P(x)越小,I越…...
Maven 插件配置分层架构深度解析
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
jMeter压测环境部署JDK+Groovy+JMeter+Proto+IntelliJ IDEA
为确保 Groovy、JDK 和 JMeter 三者的版本兼容性,需遵循以下核心原则和步骤: 一、版本兼容性对照表 组件推荐版本范围关键兼容规则JDKJava 8/11/17 (LTS)- JMeter 5.6 支持 Java 11/17GroovyGroovy 3.0.7 或 4.0- Groovy 3.x 支持 Java 8-17 - Groovy 4…...
c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能
# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目,做凭…...
深度解析 MySQL 与 Spring Boot 长耗时进程:从故障现象到根治方案(含 Tomcat 重启必要性分析)
一、典型故障现象与用户痛点 在高并发业务场景中,企业级 Spring Boot 应用常遇到以下连锁故障: 用户侧:网页访问超时、提交表单无响应,报错 “服务不可用”。运维侧:监控平台报警 “数据库连接池耗尽”,To…...
一种运动平台扫描雷达超分辨成像视场选择方法——论文阅读
一种运动平台扫描雷达超分辨成像视场选择方法 1. 专利的研究目标与意义1.1 研究目标1.2 实际意义2. 专利的创新方法与技术细节2.1 核心思路与流程2.1.1 方法流程图2.2 关键公式与模型2.2.1 回波卷积模型2.2.2 最大后验概率(MAP)估计2.2.3 统计约束模型2.2.4 迭代优化公式2.3 …...
【程序员AI入门:开发】11.从零构建智能问答引擎:LangChain + RAG 实战手册
1、技术选型 组件推荐方案说明文本嵌入模型sentence-transformers/all-MiniLM-L6-v2轻量级且效果较好的开源模型向量数据库FAISS高效的本地向量检索库大语言模型GPT-3.5/开源LLM(如ChatGLM3)根据资源选择云端或本地模型文档处理框架LangChain简化RAG流程…...
《深入理解Linux网络》笔记
《深入理解Linux网络》笔记 前言参考 前言 前段时间看了《深入理解Linux网络》这本书,虽然有些地方有以代码充篇幅的嫌疑,但总体来说还是值得一看的。在这里简单记录一下笔记,记录下对网络新的理解。 内核是如果接受网络包的? 如…...
【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
优化MVSNet可微分代价体以提高深度估计精度的关键技术 1. 代价体基础理论与分析1.1 标准代价体构建1.2 关键问题诊断 2. 特征表示优化2.1 多尺度特征融合2.2 注意力增强匹配 3. 代价体构建优化3.1 自适应深度假设采样3.2 可微分聚合操作改进 4. 正则化与优化策略4.1 多尺度代价…...
致远A8V5-9.0安装包(包含信创版)【附百度网盘链接】
A8适用于中大型企业,基于"以人为中心"的产品理念,致力于为企业构建和完善“数字智能”的协同运营体系,以组织模型为基础,连接各项工作和业务,聚合信息、资源和能力,实现组织内和跨组织的高效协同…...
terminal 共享工具ttyd
ttyd 是一个非常轻量的工具,它可以将你的终端(如 bash)通过 Web 页面共享出去,适合教学、演示、远程协作等场景,而且 支持 macOS、ARM64、Linux 等平台。 ⸻ ✅ 一、ttyd 简介 • 将 shell 包装成 WebSocket 服务&am…...
右值引用的剖析
引入:为什么要有右值引用? 右值引用的存在,就是为了解决左值引用解决不了的问题! 左值引用的问题: 我们知道,左值引用在做参数和做返回值都可以提高效率;但是有时候,我们无法用左…...
MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find
接上文 MIT XV6 - 1.3 Lab: Xv6 and Unix utilities - primes find 继续实验,实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution…...
PyTorch API 8 - 工具集、onnx、option、复数、DDP、量化、分布式 RPC、NeMo
文章目录 torch.nn.inittorch.nn.attention工具集子模块 torch.onnx概述基于 TorchDynamo 的 ONNX 导出器基于TorchScript的ONNX导出器贡献与开发 torch.optim如何使用优化器构建优化器每个参数的选项执行优化步骤optimizer.step()optimizer.step(closure) 基类算法如何调整学习…...
解决使用宝塔Linux部署前后端分离项目遇到的问题
问题一:访问域名转圈圈,显示404,403 没有解决跨域问题,在后端yml中设置content:/prod(生产环境),在前端.env文件中将http://127.0.0.1:8080/替换为公网IP,并在vite.conf…...
力扣top100 矩阵置零
开辟数组来标记元素为0的行和列,然后将对应的行和列的元素全部置为0; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> l(m),r(n);for(int i …...
JavaScript基础-作用域概述
在学习JavaScript的过程中,理解其作用域(Scope)机制是至关重要的。它不仅影响变量的生命周期和可见性,还决定了代码执行期间如何查找变量值。本文将深入探讨JavaScript的作用域概念,包括全局作用域、函数作用域、块级作…...
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施 问题现象定位过程问题根因解决方案将内核内核从6.8.0-60 降级到5.15.0-140。1、回滚内核版本2、解决重启系统,找不到选择内核版本的菜单问题3、将新版本的kernel卸…...
MQTT协议介绍
一、MQTT定义 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议ÿ…...
jetson orin nano super AI模型部署之路(五)tensorrt C++ api介绍
我们基于tensorrt-cpp-api这个仓库介绍。这个仓库的代码是一个非常不错的tensorrt的cpp api实现,可基于此开发自己的项目。 我们从src/main.cpp开始按顺序说明。 一、首先是声明我们创建tensorrt model的参数。 // Specify our GPU inference configuration optio…...
excel函数操作案例
需求分析1:学习时间与最终成绩之间的关系 问题:学习时间的长短是否对学生的最终成绩有显著影响? 操作步骤:选择"study_hours"和"final_grade"列完整数据,选择散点图 单击B,按住ctrl键…...
各种音频产品及场景总结
本文记录和总结各种音频产品以及音频场景,比如音箱、耳机、对讲机、录音笔、助听器、声卡等等。 蓝牙耳机 蓝牙耳机现在已经很普及了,主要功能就是连着手机等设备然后播放音频,所以,肯定要有扬声器模块;然后还可以接打…...
Java后端开发day46--多线程(二)
(以下内容全部来自上述课程) 多线程 1. Lock锁 虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以…...
U盘制作系统盘(含U盘恢复)
✅ 准备工作 1. 一个至少 8GB 容量的 U 盘 注意:U 盘将被格式化,请提前备份数据。 2. 一台可以联网的 Windows 电脑 📥 下载官方制作工具(推荐) 1. 打开微软官网下载页面: 👉 Windows 11 下载…...
如何阅读、学习 Linux 2 内核源代码 ?
学习Linux 2内核源代码是深入理解操作系统工作原理的绝佳途径,但这无疑是一项极具挑战性的任务。下面为你提供一套系统的学习方法和建议: 一、扎实基础知识 操作系统原理 透彻掌握进程管理、内存管理、文件系统、设备驱动等核心概念。推荐阅读《操作系…...
【字符函数和字符串函数】
【字符函数和字符串函数】 字符分类函数字符转换函数函数的使用strcpy的使用strcat的实现strcmp的实现strncpy,strncat,strncmpstrstrstrtok的使用strerror 1.函数的使用 2.部分函数的模拟实现(工作原理) 字符分类函数 ag1. #include<std…...
[学习]RTKLib详解:rtksvr.c与streamsvr.c
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版)
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版) 📚 前言概述 QMK(Quantum Mechanical Keyboard)作为目前开源键盘固件领域的"扛把子",凭借其强大的功能和活跃的社区支持,已经…...
c++——二叉树进阶
1. 内容安排说明 二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为: 1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构 2. 二叉搜索树的特性了解,有助于更好的理解map和set的特性 3. 二叉树中部…...
PyTorch API 3 - mps、xpu、backends、导出
文章目录 torch.mpsMPS 性能分析器MPS 事件 torch.xpu随机数生成器流与事件内存管理 torch.mtia流与事件 torch.mtia.memory元设备元张量操作惯用法 torch.backendstorch.backends.cputorch.backends.cudatorch.backends.cudnntorch.backends.cusparselttorch.backends.mhatorc…...
QTableWidget实现多级表头、表头冻结效果
最终效果: 实现思路:如果只用一个表格的话写起来比较麻烦,可以考虑使用两个QTableWidget组合,把复杂的表头一个用QTableWidget显示,其他内容用另一个QTableWidget。 #include "mainwindow.h" #include &qu…...
比 Mac 便笺更好用更好看的便利贴
在苹果电脑上,有自带的便签软件,但问题这个官方应用已经年久失修,界面跟最新的系统完全不搭。像同步、清单等功能也没有。 最近找到了一款更好看好用的桌面便利贴 - Desktop Note。这款应用在超过26个的效率榜排在前10。以下几个点是我认为做…...
【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
invalid literal for int() with base 10: ‘“”’" 从提供的 JSON 数据中,我可以看到导致 "invalid literal for int() with base 10: \"\"" 错误的具体情况: 错误分析 在 deal_resp 部分中发现了错误信息: &…...
超详细Kokoro-82M本地部署教程
经测试,Kokoro-82M的语音合成速度相比于其他tts非常的快,本文给出Windows版详细本地部署教程。 这里提供原始仓库进行参考:https://github.com/hexgrad/kokoro 一、依赖安装 1.新建conda环境 conda create --n kokoro python3.12 conda a…...
Day28 -js开发01 -JS三个实例:文件上传 登录验证 购物商城 ---逻辑漏洞复现 及 判断js的payload思路
本篇利用3个实例 来引出前端验证的逻辑漏洞 一、文件上传 实例:利用JS实现 【1】代码实现 js:文件后缀筛选 php:文件保存 00x1 先利用js文件上传 就利用之前php原生写的upload.html的模板,再加上script的后缀过滤。 <!…...
宝塔服务安装使用的保姆级教程
宝塔介绍: 宝塔面板(BT Panel) 是一款 国产的服务器运维管理面板,主要用于简化 Linux/Windows 服务器的网站、数据库、FTP、防火墙等管理操作。它通过图形化界面(Web端)和命令行工具(bt 命令&a…...
(四)YOLO_World-SAM-GraspNet的mujoco抓取仿真(操作记录)
一、创建虚拟环境 这里直接克隆之前项目的环境 (二)Graspnet在mujoco的仿真复现(操作记录)_graspnet仿真-CSDN博客 conda create -n graspnet --clone mujoco_graspnet conda activate graspnet 二、安装额外的环境包 pip in…...
Git Github Tutorial
Git & Github Tutorial 教程地址:Git & GitHub Tutorial | Visualized Git Course for Beginner & Professional Developers in 2024 git自动跟踪每个代码更改,允许多个人无缝处理同一个项目,让成员浏览项目历史纪录 1.检查gi…...
提高工作效率的新选择[特殊字符]——Element Plus UI库
在现代前端开发中,UI库的重要性不言而喻。它们不仅加速开发过程,还提高了应用的可维护性,形成了一致的用户体验。今天我们就来介绍一款由Element团队打造的Vue.js 3 UI库——Element Plus。 一、Element Plus:Vue.js 3的全新UI库…...
深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
TCP(Transmission Control Protocol)是一个面向连接、可靠传输的协议,支撑着绝大多数互联网通信。在实现可靠性的背后,TCP 引入了多个关键机制:重传机制、滑动窗口、流量控制 和 拥塞控制。这些机制共同协作࿰…...
从0开始学习大模型--Day05--理解prompt工程
提示词工程原理 N-gram:通过统计,计算N个词共同出现的概率,从而预测下一个词是什么。 深度学习模型:有多层神经网络组成,可以自动从数据中学习特征,让模型通过不断地自我学习不断成长,直到模型…...
全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
在Web开发领域,技术栈的选型直接影响着开发效率和系统性能。FARM(FastAPI, React, MongoDB)技术栈凭借其高性能、灵活架构和简洁语法,逐渐成为全栈开发的热门选择。本文将通过实际项目案例,详解如何从零搭建一个完整的…...
深入解析进程地址空间:从虚拟到物理的奇妙之旅
深入解析进程地址空间:从虚拟到物理的奇妙之旅 前言 各位小伙伴,还记得我们之前探讨的 fork 函数吗?当它返回两次时,父子进程中同名变量却拥有不同值的现象,曾让我们惊叹于进程独立性与写时拷贝的精妙设计。但你是否…...