【AGI】大模型微调技术-四大微调框架
【AGI】大模型微调技术-四大微调框架
- (1)微调基础概念介绍
- 1.1 微调基本概念
- 1.2 全量微调与高效微调
- 1.3 模型微调的优劣势分析
- 1.4 高效微调与LoRA、QLoRA
- (2)高效微调的应用场景
- (3)流微调工具介绍
- 3.1 unsloth
- 3.2 LLama-Factory
- 3.3 ms-SWIFT
- 3.4 ColossalAI
(1)微调基础概念介绍
1.1 微调基本概念
所谓大模型微调,指的在已有的大规模预训练模型基础上,通过对标注数据进行训练,进一步优化模型的表现,以适应特定任务或场景的需求。不同于RAG或者Agent技术,通过搭建工作流来优化模型表现,微调是通过修改模型参数来优化模型能力,是一种能够让模型“永久”掌握某种能力的方法。
1.2 全量微调与高效微调
而从方法的大类上来划分,微调又可以划分为全量微调:带入全部数据进行微调,和高效微调:只带入部分数据进行微调。毫无疑问,全量微调是一种算力消耗更大、但对模型的能力改造更为彻底的方法,而高效微调则更类似一种“四两拨千斤”的方法,通过修改模型部分参数,来调整模型整体能力。
1.3 模型微调的优劣势分析
尽管模型微调能够通过修改模型参数的方式,永久的修改模型的能力,但这其实是一把双刃剑,如果处理不当,很可能造成模型原始能力的灾难性遗忘、即会导致模型原始能力丢失,对于复杂模型尤其如此。而为了能够满足微调最初目标,我们必须小心谨慎的设计模型微调数据集和微调训练流程,并经过反复多次训练验证,得到一个最佳模型。
1.4 高效微调与LoRA、QLoRA
尽管全量微调可以对模型的能力进行深度改造,但要带入模型全部参数进行训练,需要消耗大量的算力,且有一定的技术门槛。相比之下,在绝大多数场景中,如果我们只想提升模型某个具体领域的能力,那高效微调会更加合适。尽管在2020年前后,深度学习领域诞生了很多高效微调的方法,但现在适用于大模型的最主流的高效微调方法只有一种——LoRA。
LoRA(Low-Rank Adaptation)微调是一种参数高效的微调方法,旨在通过引入低秩矩阵来减少微调时需要调整的参数数量,从而显著降低显存和计算资源的消耗。具体来说,LoRA 微调并不直接调整原始模型的所有参数,而是通过在某些层中插入低秩的适配器(Adapter)层来进行训练。
LoRA的原理:
- 在标准微调中,我们会修改模型的所有权重,而在 LoRA 中,只有某些低秩矩阵(适配器)被训练和调整。这意味着原始模型的参数保持不变,只是通过少量的新参数来调整模型的输出。
- 低秩矩阵的引入可以在显存和计算能力有限的情况下,依然有效地对大型预训练模型进行微调,从而让 LoRA 成为显存较小的设备上的理想选择。
LoRA的优势:
- 显存优化: 只需要调整少量的参数(适配器),显著减少了显存需求,适合显存有限的GPU。
- 计算效率: 微调过程中的计算负担也更轻,因为减少了需要调整的参数量。
- 灵活性: 可以与现有的预训练模型轻松结合使用,适用于多种任务,如文本生成、分类、问答等。
而QLoRA(Quantized Low-Rank Adaptation) 则是 LoRA 的一个扩展版本,它结合了 LoRA 的低秩适配器和量化技术。QLoRA 进一步优化了计算效率和存储需求,特别是在极端显存受限的环境下。与 LoRA 不同的是,QLoRA 会将插入的低秩适配器层的部分权重进行量化(通常是量化为 INT4 或 INT8),在保持性能的同时显著降低模型的存储和计算需求。
- 核心思想: 在 LoRA 的基础上加入量化技术,减少权重表示的位数,从而降低显存和计算需求。QLoRA 结合了低秩适配器和量化的优点,能够在显存有限的设备上进行更高效的微调。
- 量化: 通过将模型权重量化为低精度(如 INT4),减少内存占用,并提高推理和训练速度。
- 优势:
- 在显存非常有限的情况下仍能进行微调。
- 可以处理更大规模的模型。
- 适合用于边缘设备和需要低延迟推理的场景。
LoRA 与 QLoRA 二者对比如下
特性 | LoRA | QLoRA |
---|---|---|
核心技术 | 低秩适配器(Low-Rank Adapters) | 低秩适配器 + 量化技术(Low-Rank Adapters + Quantization) |
适用场景 | 显存受限,但设备性能较好 | 极限显存受限或需要快速推理的设备 |
计算效率 | 提高计算效率,减少调整的参数数量 | 进一步提升效率,减少内存使用并加快推理速度 |
量化技术 | 无量化 | 将权重量化为低精度(如 INT4 或 INT8) |
内存消耗 | 较低,但不如 QLoRA 低 | 显著降低内存消耗,适合更小的设备 |
训练复杂度 | 较简单,适用于大多数微调场景 | 需要更多的量化和适配工作,但适合超大模型和设备受限场景 |
微调原理参考:【入门】大语言模型常用微调框架介绍|https://www.bilibili.com/video/BV1Yc411g78a/
(2)高效微调的应用场景
在实际大模型应用场景中,高效微调主要用于以下四个方面:
- 对话风格微调:高效微调可以用于根据特定需求调整模型的对话风格。例如,针对客服系统、虚拟助理等场景,模型可以通过微调来适应不同的 语气、礼貌程度 或 回答方式,从而在与用户互动时提供更符合要求的对话体验。通过微调少量的参数(例如对话生成的策略、情感表达等),可以使模型表现出更具针对性和个性化的风格。
- 知识灌注:知识灌注是指将外部知识或领域特定的信息快速集成到已有的预训练模型中。通过高效微调,模型可以更好地学习新领域的专有知识,而无需重新从头开始训练。例如,对于法律、医疗等专业领域,可以使用少量的标注数据对预训练模型进行微调,帮助模型理解特定行业的术语、规则和知识,进而提升专业领域的问答能力。
- 推理能力提升:高效微调还可以用于提升大模型的推理能力,尤其是在处理更复杂推理任务时。通过微调,模型能够更加高效地理解长文本、推理隐含信息,或者从数据中提取逻辑关系,进而在多轮推理任务中提供更准确的答案。这种微调方式可以帮助模型在解答复杂问题时,提高推理准确性并减少错误。
- Agent能力(Function calling能力、或者MCP能力)提升:在多任务协作或功能调用场景中,高效微调能够显著提升模型的Agent能力,使得模型能够有效地与其他系统进行交互、调用外部API或执行特定任务。通过针对性微调,模型可以学会更精准的功能调用策略、参数解析和操作指令,从而在自动化服务、智能助手或机器人控制等领域表现得更加高效和智能。
(3)流微调工具介绍
在入手学习大模型微调时,首先推荐功能层次封装层次较高的微调四套工具:unsloth、Llama-Factory、ms-SWIFT和ColossalAI。除此之外,也可以借助更加底层的库,如peft、LoRA、transformer等实现高效微调。对于初学者来说,首先使用现成工具来进行微调,四种工具基本说明如下。
3.1 unsloth
- unsloth GitHub主页:https://github.com/unslothai/unsloth
unsloth 是一个专为大型语言模型(LLM)设计的动态量化与微调框架,旨在提高微调效率并减少显存占用。 它通过手动推导计算密集型数学步骤并手写 GPU 内核,实现了无需硬件更改即可显著加快训练速度。
unsloth 与 HuggingFace 生态兼容,可以很容易地transformers、peft、trl 等库结合,以实现模型的监督微调(SFT)和直接偏好优化(DPO),仅需模型的加载方式,无需对现有训练代码进行修改。
- Unsloth动态量化模型:https://unsloth.ai/blog/dynamic-v2
Unsloth 的动态量化方法,特别是其最新的 Dynamic 2.0 版本,旨在在尽量减少性能损失的同时显著压缩大型语言模型(LLMs)的体积。对于 Qwen3 模型,尤其是 4-bit 动态量化版本,现有的评测显示其性能下降非常有限,甚至在某些任务上与原始模型相当。具体评测结果如图所示:
而目前,关于 Qwen3 模型在 4-bit 动态量化下的具体性能下降数据尚不全面。然而,根据最近的一项研究,Qwen3 模型在4bit动态量化时,仅损失不到1%的性能。
论文地址:https://arxiv.org/abs/2505.02214
这也使得Unsloth的动态量化模型成为个人配置下的最佳微调工具。
不过需要注意的是,动态量化由利也有弊,其好处在于可以极大程度压缩模型运行所需占用的显存大小,同时几乎不损失性能,但问题在于动态量化的模型,无论是推理还是微调,只能单卡运行,这就使得其吞吐量有限,无法在一台物理机上实现多GPU并行从而扩大吞吐量。
主要功能点:
- 高效微调: unsloth 通过深度优化,使 LLM 的微调速度提高 2-5 倍,显存使用量减少约 80%,且准确度无明显下降。
- 广泛的模型支持: 目前支持的模型包括目前各类主流模型,用户可以根据需求适合的模型进行微调。
- 兼容性: unsloth 与 HuggingFace态系统兼容,用户可以轻松将其与 traformers、peft、l 等库结合,实现模型的监督微调(SFT)和直接偏好优化(DPO),仅需修改模型的加载方式,无需对现有训练代码进行过多修改。
- 内存优化: 通过 4 位和 16 位的 QLoRA/LoRA 微调,unsloth 显著了显存占用,使得在资源受限的环境中也能大的微调。
unsloth核心优势:
- 显著提升微调效率: 相比传统方法,Unsloth采用独家4bit动态量化技术,能够在更短的时间内完成微调任务,节省时间成本。
- 降低硬件要求: 通过优化显存使用,用户可以在显存较小的 GPU 上进行大模型的微调,降低了硬件门槛。
- 开源免费: Unsloth 提供开源版本,用户可以在 Google Colab 或 Kaggle Notebooks 上免费试用,方便上手体验。
总的来说,unsloth 为大型语言模型的微调提供了高效、低成本的解决方案,适合希望在有限资源下进行模型微调的开发者和研究人员。
3.2 LLama-Factory
- LLama-Factory GitHub主页:https://github.com/hiyouga/LLaMA-Factory
LLaMA-Factory 是一个统一且高效的微调框架,旨在为超过 100 种大型语言模型(LLMs)和视觉语言模型(VLMs)提供便捷的微调支持。 用户能够灵活地定制模型以适应各种下游任务。
主要功能和特点:
- 广型支持: LLaMA-Factory 支持对 100 多LLMs 和 VLMs 进行微调,包括最新的模型版本,如 Llama 3、GLM-4、Mistral Small、PaliGemma2 等。
- 高效的微调方法: 框架集成了多nk Adaptation)、QRA(Quantized LoRA)等,以提高训练速度并减少显存占用。
- 多模态任务支持: 除了传统的文本任务外,LLaMA-Factory 还支频识别、音频理解等多种任务类型。
- 实验监控: 提供了丰富的实验监控工具,如 LlamaBoard、TensorBoard、Wandb、MLflow、练过程。
- 快速: 框架提供了类似 OpenAI 风格的 API、Gradio UI 和命令行界面,并结合 vLLM worker,实现了高效的推理能力。
3.3 ms-SWIFT
- ms-SWIFT GitHub项目主页:https://github.com/modelscope/swift
ms-swift(Scalable lightWeight Infrastructure for Fine-Tuning)是由魔搭社区(ModelScope)开发的高效微调和部署框架,旨在为研究人员和开发者提供一站式的大模型与多模态大模型的训练、推理、评测、量化和部署解决方案。 的模型支持:** ms-swift 支持超过 450 种大型模型(LLMs)和 150 多种多模态大模型(MLLMs)的训练和部署**,包括最新的模型版本,如 Qwen2.5、InternLM3、GLM4、Llama3.3、Mistral、DeepSeek-R1、Yi1.5、Baichuan2、Gemma2 等,以及多模态模型如 Qwen2.5-VL、Qwen2-Audio、Llama3.2-Vision、Llava、InternVL2.5 等。
- 多样化的训练技术: 框架集oRA、Llama-Pro、LonoRA、GaLore、Q-GaLore、LoRA+、LISA、DoRA、FourierFt、ReFT、UnSloth 和 Liger 等,满足不同的微调需求。
- 轻量级微调: 支持多种轻量级微调方法,如 LoRA、QLoRA、DoLLaMAPro、Adapt、GaLore、Q-Galore、LISA、UnSloth、Liger-Kernel 等,降低显存和计算资源的消耗。
- 分布式训练: 支持分布式数据并行(DDP)、DeepSpeed ZeRO2/ZeRO3、FSDP 等技术,提升推理加速:** 提供 BNBWQ、GPTQ、AQLM、HQQ、EETQ 等量化方法,并支持使用 vLLM 和 LMDeploy 对推理、评测和部署 支持图像、视频和语音等多种模态型训练,涵盖 VQA、Caption、OCR、Grounding 等任务。
- 用户友好的界面: 提供基于 Gradio 的 We和量化操作,简化了大模型的全链路流程。
3.4 ColossalAI
- ColossalAI GitHub项目主页:https://github.com/hpcaitech/ColossalAI
Colossal-AI 是一个高效的分布式人工智能训练系统,旨在最大化提升人工智能训练效率,同时最小化训练成本。作为深度学习框架的内核,Colossal-AI 提供了自动超高维并行、大规模优化库、自适应任务调度、内存优化以及最新模型复现等前沿技术。与英伟达的 Megatron-LM 相比,Colossal-AI 仅需一半数量的 GPU 即可完成 GPT-3 训练,半小时内预训练 ViT-Base/32,并在两天内训练完 15 亿参数的 GPT 模型。此外,Colossal-AI 提供了多种并行技术,如数据并行、流水线并行和张量并行,以加速模型训练。 citeturn0search1该项目自开源以来,迅速登上 GitHub 热榜,成为解放 AI 生产力的最佳选择。
并且,ColossalAI也是目前唯一支持DeepSeek R1非量化模型高效微调的框架,仅需4个节点、8卡A100服务器即可完成DeepSeek R1高效微调。
注一:若是强化学习训练,则推荐veRL和OpenRLHF等框架。
注二:其他更底层微调框架推荐
框架 | 优势 | 适用场景 |
---|---|---|
Hugging Face | 高度兼容,易用,文档丰富 | 一般 NLP 任务,模型选择丰富 |
LoRA | 显存节省,减少微调计算量 | 显存有限的设备,微调大规模模型 |
PEFT | 高效微调,低计算开销 | 资源有限的环境,适合大规模预训练模型的微调 |
DeepSpeed | 大规模分布式训练,显存优化 | 超大规模训练,多卡分布式训练 |
AdapterHub | 低资源消耗,快速微调 | 多任务微调,资源有限的环境 |
Alpaca-LoRA | 生成任务优化,LoRA 技术结合 | 对话生成、文本生成 |
FastChat | 对话系统微调,快速集成 | 对话生成任务,尤其是对 ChatGPT 等模型微调 |
FairScale | 大规模分布式训练优化,自动化优化 | 多卡分布式训练,大规模微调 |
相关文章:
【AGI】大模型微调技术-四大微调框架
【AGI】大模型微调技术-四大微调框架 (1)微调基础概念介绍1.1 微调基本概念1.2 全量微调与高效微调1.3 模型微调的优劣势分析1.4 高效微调与LoRA、QLoRA (2)高效微调的应用场景(3)流微调工具介绍3.1 unslot…...
小白编程学习之巧解「消失的数字」
一、引言:一个看似简单的「找不同」问题 今天遇到一道有趣的算法题:给定一个含 n 个整数的数组 nums,其中每个元素都在 [1, n] 范围内,要求找出所有在 [1, n] 中但未出现在数组中的数字。 这让我想起小时候玩的「找错题」游戏 —…...
在 Git 中添加子模块(submodule)的详细步骤
在 Git 中添加子模块(submodule)的详细步骤如下: 1. 添加子模块 命令格式: git submodule add <仓库URL> [目标路径]仓库URL:子模块的 Git 仓库地址(HTTP/SSH 均可)。目标路径ÿ…...
瑞萨单片机笔记
1.CS for CC map文件中显示变量地址 Link Option->List->Output Symbol information 2.FDL库函数 pfdl_status_t R_FDL_Write(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_u16 bytecount) pfdl_status_t R_FDL_Read(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_…...
单片机复用功能重映射Remap功能
目录 一、查看“DS5319 stm32f10x中等密度mcu数据手册(英文)”手册 二、查看“RM0008 STM32F10xxx参考手册(中文)”手册 三、重映射(Remap)功能程序编写 自己学习过程中容易遗忘的知识点,记录…...
小白入门FPGA设计,如何快速学习?
很多刚入门的小伙伴,初次听说FPGA(现场可编程门阵列),脑子里只有一个字:玄! 什么“时序逻辑”“Verilog”“Vivado”,仿佛一夜之间掉进了电子黑魔法的深坑。 但真相是—— FPGA,其实…...
友思特应用 | LCD显示屏等玻璃行业的OCT检测应用
导读 光学相干层析成像(OCT)是一种非侵入式光学成像方法,提供微米尺度的空间分辨率,能够生成内部结构截面图像。自20世纪90年代初发明第一台OCT以来,它在眼科领域得到了广泛应用,并成为临床诊断的黄金标准之一。除了在生物医学领…...
Python的sys模块:系统交互的关键纽带
Python的sys模块:系统交互的关键纽带 对话实录 小白:(挠头)我知道 Python 能做很多事,可怎么让它和计算机系统‘交流’呢,比如获取系统信息、处理命令行参数? 专家:(微…...
若依项目集成sentinel、seata和shardingSphere
集成组件包括MySQL分库分表及读写分离、seata以及Sentinel 若依项目文档连接 代码下载地址 需要结合ruoyi代码配合看,前提是熟悉基本代码结构,熟悉feign调用和基础网关配置等。 采用的版本信息 <java.version>1.8</java.version> <spr…...
张 推进对话式心理治疗:SOULSPEAK的聊天机器人
SOULSPEAK的聊天机器人 利用大语言模型(LLM)来提供低成本的心理治疗服务,旨在解决传统心理咨询在隐私、成本和可及性方面的不足。以下是核心内容的通俗解读: 1. 研究背景:传统心理治疗的困境 问题:全球心理健康问题日益严重(如焦虑、抑郁人数激增),但传统心理咨询受…...
java中的Filter使用详解
Filter(过滤器)是 Java Web 开发的核心组件之一,用于在请求到达 Servlet 或响应返回客户端之前进行拦截和处理。以下是其核心功能、使用方法和实际场景的详细解析: 一、Filter 的作用与原理 核心作用 Filter 充当请求与响应之间的…...
BERT 作为Transformer的Encoder 为什么采用可学习的位置编码
摘要 BERT 在位置编码上与原始 Transformer 论文中的 sin/cos 公式不同,选择了可学习(learned)的位置嵌入方案。本文将从 Transformer 原始位置编码选项入手,分析 BERT 选择 learned positional embeddings 的四大核心原因&#x…...
Vue百日学习计划Day43-45天详细计划-Gemini版
Day 43: Composable 函数基础与抽取简单逻辑 (~3 小时) 本日目标: 理解 Composable 函数的概念、优势,并学会如何将简单的、无状态的逻辑抽取为 Composable。所需资源: Vue 3 官方文档 (组合式函数): https://cn.vuejs.org/guide/reusability/composables.html 学…...
Kotlin 协程 (二)
Kotlin 协程提供了丰富的功能,能够高效地处理并发和异步任务。以下是对 Kotlin 协程中常见概念和功能的详细讲解,包括它们的定义、作用、使用场景以及最佳实践。 1. 协程核心概念 1.1 CoroutineScope 定义:CoroutineScope 是协程作用域的抽…...
Linux 下 rsync 工具详解与实用指南
Linux 下 rsync 工具详解与实用指南 一、什么是 rsync? rsync(remote sync)是 Linux/Unix 系统下常用的数据同步和备份工具。它可以高效地在本地与远程主机之间同步文件和目录,支持增量同步、断点续传、权限保留等功能ÿ…...
2025年医美行业报告60+份汇总解读 | 附 PDF 下载
原文链接:https://tecdat.cn/?p42122 医美行业在消费升级与技术迭代的双重驱动下,已从边缘市场逐步走向主流。数据显示,2024 年中国医美市场规模突破 3000 亿元,年复合增长率达 15%,但行业仍面临正品率不足、区域发展…...
汉得集星獭1.8.0正式发布,高效集成再赋能!
汉得企业级系统集成平台 (中文名集星獭,英文名JeeStar)1.8.0版本于2025年4月正式发布 。 集星獭是一款一站式多系统集成、多云集成、多端集成、多协议集成、多设备集成、数据集成、页面集成的全域集成解决方案产品。 此次发布主要聚焦于以下…...
一文深度解析:Pump 与 PumpSwap 的协议机制与技术差异
在 Solana 链上,Pump.fun 和其延伸产品 PumpSwap 构成了 meme coin 发行与流通的两大核心场景。从初期的游戏化发行模型,到后续的自动迁移与交易市场,Pump 系列协议正在推动 meme coin 从“爆发性投机”走向“协议化运营”。本文将从底层逻辑…...
数据库实验——备份与恢复
一、目的(本次实验所涉及并要求掌握的知识点) 1.掌握SQL server的备份与恢复 二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析) 验证性实验 实验1:在资源管理器中建立备份设备实验 …...
抓包分析工具与流量监控软件
目录 一、抓包分析工具:定位问题的“放大镜” 1.1 工作原理简述 1.2 主流工具盘点 1.3 抓包的实战应用 二、流量监控软件:网络全景的“雷达系统” 2.1 功能特征 2.2 常用工具概览 2.3 实战应用场景 五、结语:深入可见,安…...
Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
Go 实现支持多层复杂表头的 Excel 导出工具 目录 项目介绍依赖说明核心结构设计如何支持多层表头完整使用示例总结与扩展 项目介绍 在实际业务系统中,Excel 文件导出是一项常见功能,尤其是报表类需求中常见的复杂多级表头,常规表格组件往…...
【算法】定长滑动窗口5.20
定长滑动窗口算法: 算法思路 滑动窗口遍历字符串:窗口大小为 k ,遍历字符串每个字符,维护窗口内元音字母数量。 统计窗口内元音:当字符是元音(a/e/i/o/u)时,计数器 vowel 加 1。…...
Java操作Elasticsearch 之 [Java High Level REST Clientedit]
<a name"VbjtD"></a> 1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json。向 Elasticsearch 中存储数据,其实就是向 es 中的 index 下…...
数据集划分与格式转换:从原始数据到模型训练的关键步骤
在计算机视觉项目中,数据集的合理划分和格式转换是实现高效模型训练的基础。本文将详细介绍如何将图片和标注数据按比例切分为训练集和测试集,以及常见的数据格式转换方法,包括 JSON 转 YOLO 格式和 XML 转 TXT 格式。 一、将图片和标注数据…...
MinerU
简介 MinerU 是一款功能全面的文档处理系统,旨在将 PDF 和其他文档格式转换为机器可读的格式,例如 Markdown 和 JSON。该系统专注于在保留文档结构的同时,准确提取文档内容,处理复杂的布局,并转换公式和表格等特殊元素…...
Vue百日学习计划Day46-48天详细计划-Gemini版
Day 46: <KeepAlive> - 组件缓存与优化 (~3 小时) 本日目标: 理解 <KeepAlive> 的作用,学会如何使用它来缓存组件实例,从而优化应用性能和用户体验。所需资源: Vue 3 官方文档 (<KeepAlive>): https://cn.vuejs.org/guide/built-ins/…...
微软的 Windows Linux 子系统现已开源
微软宣布其 Windows Linux 子系统 (WSL) 开源,开放代码供社区成员贡献。自近九年前推出适用于 Windows 10 的 WSL 以来,微软多年来一直致力于开源这项在 Windows 中启用 Linux 环境的功能。 Windows 首席执行官 Pavan Davuluri 表示:“这是开…...
Axure中使用动态面板实现图标拖动交换位置
要在Axure中实现图标拖动交换位置的功能,可以通过动态面板结合交互事件来实现。 实现步骤 准备图标元素 将每个图标转换为动态面板(方便拖动和交互)。 设置拖动交互 选中图标动态面板 → 添加“拖动时”交互 → 选择“移动”当前动态面板&am…...
深入浅出:Spring Cloud Gateway 扩展点实践指南
文章目录 前言一、为什么需要扩展 Spring Cloud Gateway?二、Spring Cloud Gateway 核心扩展点三、扩展点实战:代码与配置详解3.1 全局过滤器(GlobalFilter)3.2 路由过滤器(GatewayFilter)2.3 自定义路由断…...
SCAU18923--二叉树的直径
18923 二叉树的直径 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC Description 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点…...
理解 RESTful 风格:现代 Web 服务的基石
在当今的互联网时代,Web 服务成为了连接各种应用和系统的关键。而 RESTful 风格,作为一种广泛采用的架构风格,为设计和实现 Web 服务提供了一套简洁而强大的指导原则。本文将深入探讨 RESTful 风格的核心概念、优势以及如何在实际项目中应用它…...
大模型(3)——RAG(Retrieval-Augmented Generation,检索增强生成)
文章目录 1. 核心组成2. 工作流程3. 训练方式4. 优势与局限5. 应用场景6. 典型模型变体总结 RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索与文本生成的技术,旨在通过引入外部知识库提升生成内容的准确性…...
电子科技大学软件工程实践期末
Java基础 面向对象 Java高级编程 2023: 软件工程基础 ch1软件工程概述 软件的概念和特点 软件危机的概念以及产生的原因 软件工程的定义 三要素 应用软件工程的原因 三要素:工具,方法,过程 ch2 软件过程 软件生命周期 软件过程…...
线上jvm假死问题排查
1.线上告警接口超时 看接口是用户服务,查看nacos服务实例,发现有一个节点已经下线了 3.找到对应节点所在服务器,jps -l 命令发现用户服务还在,初步判断是假死 4.使用 jstat -gc 进程id 1000 每秒打印gc情况,发现频繁…...
Redis中SETNX、Lua 脚本和 Redis事务的对比
在 Redis 中,SETNX、Lua 脚本 和 Redis 事务 都可以用于实现原子性操作,但它们的适用场景和能力范围不同。以下是详细对比和原因分析: 1. SETNX 的原子性与局限性 (1) 原子性保证 SETNX(SET if Not eXists) 是 Redis…...
Nginx配置记录访问信息
文章目录 方法一:使用Nginx原生配置记录访问信息方法二:使用Nginx_headers_more模块记录更加详细的信息 Nginx被广泛应用于各种场景如:Web服务器、反向代理服务器、负载均衡器、Web应用防火墙(WAF)等 在实际的产品开发中,无论是功…...
基于机载激光雷达数据的森林生物量估测:AI驱动的遥感革新
一、技术背景与意义 森林生物量是生态系统碳循环和碳汇估算的核心参数。传统遥感方法(如光学影像)在三维结构解析上存在局限,而机载激光雷达(LiDAR)凭借高精度点云数据,能够捕捉森林的垂直结构信息。结合人…...
Redis中的事务和原子性
在 Redis 中,事务 和 原子性 是两个关键概念,用于保证多个操作的一致性和可靠性。以下是 Redisson 和 Spring Data Redis 在处理原子性操作时的区别与对比: 1. Redis 的原子性机制 Redis 本身通过以下方式保证原子性: 单线程模型…...
SSL证书:谷歌算法排名的安全基石与信任杠杆
一、技术演进:从安全信号到算法基石 谷歌对SSL证书的重视始于2014年,当时HTTPS首次被纳入排名算法信号。经过十年迭代,SSL证书已从“加分项”升级为“基础门槛”。2025年算法更新中,其权重占比达2%,与页面加载速度、移…...
XXX企业云桌面系统建设技术方案书——基于超融合架构的安全高效云办公平台设计与实施
目录 1. 项目背景与目标1.1 背景分析1.2 建设目标2. 需求分析2.1 功能需求用户规模与场景终端兼容性2.2 非功能需求3. 系统架构设计3.1 总体架构图流程图说明3.2 技术选型对比3.3 网络设计带宽规划公式4. 详细实施方案4.1 分阶段部署计划4.2 桌面模板配置4.3 测试方案性能测试工…...
【GESP真题解析】第 18 集 GESP 一级 2024 年 12 月编程题 1:温度转换
大家好,我是莫小特。 这篇文章给大家分享 GESP 一级 2024 年 12 月编程题第 1 题:温度转换。 题目链接 洛谷链接:B4062 温度转换 一、完成输入 根据题意,输入只有一行,为实数,数据范围: 0 &l…...
鸿蒙开发进阶:深入解析ArkTS语言特性与高性能编程实践
一、前言 在鸿蒙生态蓬勃发展的当下,开发者对于高效、优质的应用开发语言需求愈发迫切。ArkTS 作为鸿蒙应用开发的核心语言,在继承 TypeScript 优势的基础上,进行了诸多优化与扩展,为开发者带来了全新的编程体验。本文将深入剖析…...
现代计算机图形学Games101入门笔记(十七)
双向路径追踪 外观建模 散射介质 人的头发不能用在动画的毛发上。 动物的髓质Medulla特别大 双层圆柱模型应用 BSSRDF是BRDF的延伸。 天鹅绒用BRDF不合理,转成散射介质。 法线分布 光追很难处理微表面模型 光在微型细节上,光是一个波,会发生衍…...
工单派单应用:5 大核心功能提升协作效率
一、工单管理:全流程一目了然 快速创建:录入任务内容、优先级,从源头明确目标 状态分类:待处理 / 进行中 / 已完成工单一目了然,个人进度随时掌控 灵活分配:公海池抢单机制,成员按能力自主接…...
maven 多个模块之间互相引入加载配置的偶遇问题
因为子项目添加了:<!-- aliyun sms SDK --> <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.3</version> </dependency>导致原本运行良好的构建模块,…...
【蓝桥杯嵌入式】【模块】五、ADC相关配置及代码模板
1. 前言 最近在准备16届的蓝桥杯嵌入式赛道的国赛,打算出一个系列的博客,记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点,如果有错误或者遗漏欢迎各位大佬斧正。 本系列博客会分为以下两大类: 1.1. 单独模块的讲…...
DP2 跳台阶【牛客网】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 DP2 跳台阶 一、题目描述 二、测试用例 三、解题思路 基本思路: 动态规划题目的难点基本在于构造状态转移方程,对应这题,我们可以发现每次跳跃我…...
KC 喝咖啡/书的复制/奶牛晒衣服/ 切绳子
二分的解题思路: 常解决最小值最大化和最大值最小化问题 步骤解析 确定答案范围 设定初始左边界 left 和右边界 right,确保解在此区间内。例如: 求最小最大值时,left 可取单个元素的最大值,right 取所有元素总和。 …...
Jedis快速入门【springboot】
引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>6.0.0</version> </dependency> 创立jedis对象,建立连接 private Jedis jedis; BeforeEach void setUp(){//1 …...
SpringBoot 商城系统高并发引起的库存超卖库存问题 乐观锁 悲观锁 抢购 商品秒杀 高并发
介绍 在高并发场景下,特别是商品秒杀、抢购等情况下,库存超卖问题是一个常见且棘手的问题。为了解决这个问题,Spring Boot 常使用乐观锁和悲观锁来保证数据的正确性和一致性。 悲观锁 悲观锁假设在多线程或多进程环境中,资源会被…...