当前位置: 首页 > news >正文

第十七章:Llama Factory 深度剖析:易用性背后的微调框架设计

在这里插入图片描述

章节引导:在模型定制的实践中,Llama Factory (github.com/hiyouga/LLaMA-Factory) 以其惊人的易用性和对多种开源大模型、多种参数高效微调方法(PEFT)的广泛支持,迅速成为开源社区的热门选择。你可能已经熟练掌握了如何通过其 Web UI 或命令行启动一次微调任务,并获得了初步的效果。但本章,我们将超越“如何使用”,深入 Llama Factory 的“引擎盖下”,探究其设计哲学、核心架构与关键实现机制。我们将分析它是如何巧妙地封装复杂性,实现对 LoRA, QLoRA 等多种微调策略的统一管理和高效执行的?它在数据处理、模型加载、训练循环、结果保存等方面有哪些值得学习的设计?理解这些,不仅能让我们更高效地使用 Llama Factory,也能为我们自行构建或定制微调流程提供深刻的启示,并更好地理解微调这一关键的模型定制技术。

目标读者与前提: 本章假设读者对 LLM 微调的基本概念(如指令微调、SFT)有所了解,并对 Llama Factory 有初步的使用经验。我们将聚焦于其内部设计和实现逻辑,而非基础操作教程。

17.1 再探微调:Llama Factory 在微调生态中的定位与价值

在深入 Llama Factory 之前,让我们再次明确微调在 LLM 应用开发中的位置。

微调的核心目的与挑战

  • 目的:
    • 知识注入/领域适应: 让模型学习特定领域知识、术语、风格。
    • 能力对齐/指令遵循: 提升模型理解和执行特定指令的能力。
    • 行为/风格模仿: 输出符合特定品牌、角色或对话风格的文本。
    • (有时) 降低推理成本: 用微调后的小模型替代大通用模型。
  • 挑战:
    • 数据依赖: 高质量、任务相关的数据是成功的关键,获取成本高。
    • 资源消耗: 全量微调大型 LLM 对计算资源要求极高。
    • 技术门槛: 理解原理、选择参数、配置环境、处理错误有难度。
    • 过拟合风险: 小数据集易导致过拟合或灾难性遗忘。

Llama Factory 的核心价值主张

Llama Factory 致力于解决微调的技术门槛和资源消耗问题,其核心价值在于:

  1. 极简配置与操作: 通过直观 Web UI、统一 YAML 配置或命令行参数,大幅简化复杂的微调流程。
  2. 统一多种 PEFT 方法: 内置支持 LoRA, QLoRA, IA3 等,用户通过配置切换,无需深究底层 API。
  3. 集成常见模型与数据集: 预置对 Llama, Mistral, Qwen 等模型和 Alpaca, ShareGPT 等数据格式的支持。
  4. 内置最佳实践与优化: 默认集成 FlashAttention, DeepSpeed, BitsAndBytes 量化等,用户无需手动配置。
  5. 降低使用门槛: 使非深度 AI 背景的开发者也能快速上手并进行有效的微调实验。

生态位分析

  • vs. 手动脚本 (Hugging Face Trainer + PEFT): Llama Factory 提供了高度封装和易用性抽象,避免了大量样板代码。
  • vs. 大规模训练框架 (DeepSpeed/Megatron-LM): Llama Factory 可选择性集成 DeepSpeed,更侧重于参数高效微调的易用性。
  • 独特优势: 易用性、高集成度、对多种 PEFT 方法的开箱即用支持

17.2 Llama Factory 架构概览与核心组件剖析

Llama Factory 的易用性源于其模块化设计。

整体架构图 (概念性):

在这里插入图片描述

关键组件详解:
(路径提示:以下提及的源码文件路径可能随 Llama Factory 版本更新而变化,请以你所使用的项目实际结构为准。)

  1. 配置管理 (核心在 workflow.py 或主训练脚本如 src/llmtuner/train/tuner.py 的参数解析部分):
    • 统一管理来自 Web UI、命令行或 YAML 文件的参数,进行类型校验、默认值填充,并传递给下游模块。
  2. 数据处理与加载模块 (通常在 src/llmtuner/data/ 目录下):
    • 数据集适配: 包含针对 Alpaca, ShareGPT 等格式的预处理逻辑,将其转换为模型训练所需格式。
    • Prompt 模板化 (如 template.py): 内置多种模型的对话模板(Llama2-Chat, ChatML 等),确保输入格式与模型预训练一致。
    • Data Collator: 使用 Hugging Face DataCollatorForSeq2Seq 或自定义 Collator 处理批处理中的 Padding 和 Label Masking。
  3. 模型加载与 PEFT 适配模块 (通常在 src/llmtuner/model/loader.pysrc/llmtuner/model/patcher.py):
    • 基础模型加载: 使用 AutoModelForCausalLM 等。
    • PEFT 集成: 根据配置,使用 peft 库的 get_peft_model 动态注入 LoRA, QLoRA 等适配器。对于 QLoRA,与 bitsandbytes 集成进行量化。
    • 模型 Patching: 应用 FlashAttention 等优化。
  4. 训练器核心 (通常围绕 src/llmtuner/train/tuner.pysft_trainer.py 等):
    • 高度依赖并扩展 Hugging Face Trainer
    • 处理 PEFT 模型保存/加载、自定义评估、Web UI 交互、分布式训练 (DeepSpeed, DDP/FSDP) 等。
  5. 日志、监控与结果保存模块 (通常在 src/llmtuner/extras/callbacks.py, src/llmtuner/extras/logging.py):
    • 标准日志输出,支持 TensorBoard, WandB 等回调。
    • 保存模型权重、配置文件等。

17.3 核心功能实现探秘:Llama Factory 如何简化复杂性?

Llama Factory 的简洁背后是对复杂技术的巧妙封装:

  • 多种 PEFT 方法的统一接口:
    • 机制: 内部维护 PEFT 方法到 peftPeftConfig 子类的映射。用户选择方法和参数后,Llama Factory 实例化相应 PeftConfig,调用 get_peft_model 动态注入适配器到基础模型的指定模块。
    • 简化: 用户无需关心 peft 库 API 细节。
  • 数据并行与模型并行 (DDP, FSDP, DeepSpeed) 的集成:
    • 机制: 主要依赖 Hugging Face Trainer 的内置支持。Llama Factory 提供便捷的配置入口,Trainer 自动处理初始化、数据分发、梯度同步等。
    • 简化: 用户无需手动编写复杂的分布式训练代码。
  • 混合精度训练与量化 (QLoRA):
    • 机制: fp16/bf16 通过 TrainingArguments 启用,由 Trainer 的 PyTorch AMP 实现。QLoRA 则在模型加载时使用 bitsandbytes 进行量化,再应用 LoRA。
    • 简化: 用户只需配置选项,框架自动处理。
  • 模型保存与加载 (Checkpointing & Merging):
    • 机制: PEFT 方法通常只保存 Adapter 权重 (PeftModel.save_pretrained())。Llama Factory 提供脚本或选项将 Adapter 合并回基础模型 (PeftModel.merge_and_unload())。
    • 简化: 屏蔽了手动加载、合并等步骤。

17.4 数据集处理与 Prompt 构建的最佳实践 (Llama Factory 视角)

高质量数据和适配的 Prompt 是微调成功的关键。

  • 常见数据集格式支持: Llama Factory 内置解析器支持 Alpaca (instruction, input, output), ShareGPT (conversations 列表) 等格式,并将其统一转换为内部表示。
  • Prompt 模板化与处理 (核心在 template.py 或类似模块):
    • 为多种主流模型预定义了对话模板,包含特殊 Tokens 和角色标记。
    • 根据选择的基础模型类型,自动应用相应模板格式化输入数据,确保与模型预训练格式一致,这对微调效果至关重要。
  • 自定义数据集与 Prompt 结构:
    • 自定义数据集: 通常支持自定义 JSONL 文件,需包含框架能理解的字段。
    • 自定义 Prompt:
      1. 注册新模板: 修改 Llama Factory 的模板系统(如 template.py),定义新模板类和格式化逻辑(需要代码能力)。
      2. 预格式化数据: 在数据准备阶段将数据完全格式化为最终 Prompt 字符串,选择框架中“原始”或简单拼接的模板。

理解 Llama Factory 的数据和 Prompt 处理机制,有助于准备更优质的微调数据。

17.5 进阶使用与场景分析 (基于已有经验)

本节我们基于已有的 Llama Factory 使用经验,对不同微调场景进行更深层次的策略分析和思考。

场景一:特定知识注入的微调策略分析

  • 经验回顾: 使用 Llama Factory 向模型注入垂直领域知识。
  • 讨论点:
    • 数据构建:QA 格式是否足够?篇章性描述或对话数据效果如何?数据量、质量、Prompt 格式对知识“吸收”的影响?
    • 效果评估:如何验证知识是否学会?是直接回答问题,还是在下游任务中运用?
    • 参数敏感性:学习率、Epochs、LoRA Rank/Alpha、Target Modules 对此类任务的影响?如何避免过拟合与灾难性遗忘?
  • 思考: 微调注入知识 vs. RAG 动态检索,各自优劣与适用场景?

场景二:模型行为/风格对齐的微调策略分析

  • 经验回顾: 微调模型模仿特定写作风格或对话行为。
  • 讨论点:
    • 高质量风格数据集构建:是否需要正反例?
    • Prompt 设计:除了风格化输入输出对,是否需在 Prompt 中明确指示学习风格?
    • 评估挑战:风格对齐的主观性强,如何客观评估?有无自动化指标辅助?
    • 泛化与过拟合:如何确保学习新风格的同时不丢失原有能力或在不相关任务上强套风格?

场景三:多轮对话微调的挑战与 Llama Factory 的支持

  • 经验回顾: 使用 ShareGPT 等格式数据微调模型提升多轮对话能力。
  • 讨论点:
    • 数据格式重要性:清晰的多轮历史、角色区分对模型学习上下文至关重要。
    • Llama Factory 处理:对话模板如何处理和截断长历史?如何构建训练标签(仅预测最后一轮 AI 回复 vs. 全部)?
    • 上下文长度挑战:微调能否显著提升处理长程依赖的能力?

** 源码片段验证与探索:**

为了更深入理解,可以尝试:

  • 数据处理探索: 在 Llama Factory 的数据预处理脚本(如 src/llmtuner/data/preprocess.py,具体路径请查阅你使用的版本)中,找到处理特定数据集格式(如 ShareGPT)的函数。通过断点或打印,观察原始数据如何被转换为模型输入的 Token ID 和标签。
  • PEFT 应用探索: 在模型加载模块(如 src/llmtuner/model/loader.py),找到调用 get_peft_model 的地方,查看如何根据用户配置(如 lora_target)选择注入 LoRA 适配器的层。

17.6 微调模型的评估、部署与持续迭代 (Llama Factory 输出的后续)

微调完成并非终点。

  • 评估再强调 (回顾 Ch16): 多维度评估(人工、自动化、与 RAG/Prompting 对比),关注泛化与灾难性遗忘。
  • 模型导出与合并: Llama Factory 支持导出 Adapter 权重,并提供脚本或选项将 Adapter 合并回基础模型,生成可直接部署的完整模型(通过 PeftModel.merge_and_unload())。
  • 部署考量 (连接下一章):
    • Adapter 动态加载: 现代推理框架如 vLLM (下一章详述)、Hugging Face TGI、SGLang 支持加载基础模型后动态加载和切换 LoRA Adapter。这极大节省显存,允许单基础模型服务多微调任务。vLLM 通常通过特定 API 参数或配置启用 LoRA。
    • 合并后模型部署: 与普通预训练模型类似,但需注意大小和计算需求。
    • 兼容性: 确认推理框架与微调模型的结构(尤其 QLoRA 量化方式)兼容。
  • 持续迭代: 收集反馈和数据,定期重新微调优化模型,建立版本管理。

17.7 总结:Llama Factory 的设计哲学与对开发者的启示

Llama Factory 的成功源于其优秀的设计哲学:

  • 极致的易用性: 通过简洁 UI 和统一配置,大幅降低 LLM 微调门槛。
  • 高度的集成性: 一站式支持多种模型、PEFT 方法、数据集和优化技术。
  • 拥抱开源与社区: 快速跟进最新进展,积极响应社区需求。

对开发者的启示:

  • 封装复杂性,提供简洁接口是优秀工具的核心。
  • 默认最佳实践与灵活配置之间取得平衡
  • 社区驱动与快速迭代是保持活力的关键。

通过本章对 Llama Factory 的深度剖析,我们不仅能更有效地使用它,更理解了其易用性背后的工程智慧。这对于我们选择、评估甚至构建 AI 开发工具都将大有裨益。下一章,我们将转向同样关键的领域——高性能推理优化。


相关文章:

第十七章:Llama Factory 深度剖析:易用性背后的微调框架设计

章节引导:在模型定制的实践中,Llama Factory (github.com/hiyouga/LLaMA-Factory) 以其惊人的易用性和对多种开源大模型、多种参数高效微调方法(PEFT)的广泛支持,迅速成为开源社区的热门选择。你可能已经熟练掌握了如何…...

SpringSecurity当中的CSRF防范详解

CSRF防范 什么是CSER 以下是基于 CSRF 攻击过程的 顺序图 及详细解释,结合多个技术文档中的攻击流程: CSRF 攻击顺序图 #mermaid-svg-FqfMBQr8DsGRoY2C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…...

CSRF防范歪招

不保存到Cookie里呗 如果每次请求都强制通过请求头携带Token,并且不将Token存储在Cookie中,这种设计可以有效防御CSRF攻击。以下是具体原因和关键实现要点: 1. 防御原理 CSRF攻击的本质是攻击者伪造用户的请求,利用浏览器自动携…...

MyBatis与MyBatis-Plus深度分析

MyBatis与MyBatis-Plus深度分析 一、MyBatis原理与基础 1. MyBatis核心原理 MyBatis是一个半自动ORM框架,主要原理包括: SQL与代码分离:通过XML或注解配置SQL语句动态SQL:提供if、choose、foreach等标签实现动态SQL结果集映射…...

STM32 变量加载到flash的过程中

在STM32中,BIN文件内需要加载到RAM的数据由链接脚本(Linker Script)​和启动代码(Startup Code)​共同决定,具体机制如下: 一、BIN文件内容结构 STM32的BIN文件包含三类数据: ​Co…...

TCP核心机制

1. TCP五大核心机制 1.1. 顺序问题(稳重不乱) 背景:网络传输中数据包可能因路径不同或网络波动导致乱序到达,需保证接收方能按正确顺序处理数据。 原理: 序列号(Sequence Number)&#xff1…...

6.3对象序列化

在 Java 中,ObjectInputStream 和 ObjectOutputStream 是用于实现对象序列化(Serialization)和反序列化(Deserialization)的核心类。通过这两个类,可以将对象转换为字节流进行存储或传输,并在需…...

Flutter小白入门指南

Flutter小白入门指南 🚀 轻松构建漂亮的跨平台应用 📑 目录 一、Flutter是什么? 为什么选择Flutter?Flutter工作原理 二、环境搭建与命令行 安装Flutter SDK常用Flutter命令创建第一个项目 三、Flutter基础语法 变量与类型函数条…...

Python -将MP4文件转为GIF图片

给大家提供一个工具代码,使用Python,将MP4格式的视频文件,转换为GIF图片 首先先安装必要的包: pip install imageio pip install imageio[ffmpeg] 工具代码: import imageio# 视频文件路径 video_path r""…...

51c嵌入式~电路~合集27

我自己的原文哦~ 一、7805应用电路 简介 如上图,7805 集成稳压电路。 7805是串联式三端稳压器,三个端口分别是电压输入端(IN),地线(GND),稳压输出(OUT)…...

数据结构—(链表,栈,队列,树)

本文章写的比较乱,属于是缝合怪,很多细节没处理,显得粗糙,日后完善,今天赶时间了。 1. 红黑树的修复篇章 2. 红黑树的代码理解(部分写道注释之中了) 3. 队列与栈的代码 4. 重要是理解物理逻辑&a…...

GitHub 趋势日报 (2025年05月12日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1harry0703/MoneyPrinterTurbo利用ai大模型,一键生成高清短视频使用…...

ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言

​一、软件介绍 文末提供程序和源码下载 ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107 种语言。从电子书到带有章节和元数据的有声读物的 CPU/GPU 转换器,使用 XTTSv2、Bark、Vits、Fairseq、YourTTS …...

《算法导论(第4版)》阅读笔记:p39-p48

《算法导论(第4版)》学习第 13 天,p39-p48 总结,总计 10 页。 一、技术总结 1. recurrence/recurrence equation 书里面 recurrence(递归式) 和 recurrence equation(递归方程) 指的是同一个东西。 二、英语总结(生词:2) 1. squint (1)…...

c语言第一个小游戏:贪吃蛇小游戏07

贪吃蛇吃饭喽 所谓贪吃蛇的食物&#xff0c;也就是创建一个和蛇身一样的结构体&#xff0c;只是这个结构体不是链表&#xff0c;也是将这个结构体设置hang和lie坐标&#xff0c;放进gamepic进行扫描&#xff0c;扫到了就也是做操作将 ## 打出来 #include <curses.h> #i…...

(七)深度学习---神经网络原理与实现

分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.神经网络原理概述 二.神经网络的训练方法 三.基于Ker…...

VSCode中Node.js 使用教程

一、visual studio code下载与安装 二、修改vscode主题颜色 三、汉化 菜单view-->Command Palette...,输入Configure Display Language。 重启之后如下&#xff1a; 四、安装node.js Node.js 是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;使用了事件驱动、非阻…...

web 自动化之 KDT 关键字驱动详解

一、什么是关键字驱动&#xff1f; 1、什么是关键字驱动&#xff1f;&#xff08;以关键字函数驱动测试&#xff09; 关键字驱动又叫动作字驱动&#xff0c;把项目业务封装成关键字函数&#xff0c;再基于关键字函数实现自动化测试 2、关键字驱动测试原理 关键字驱动测试是一…...

web 自动化之 yaml 数据/日志/截图

文章目录 一、yaml 数据获取二、日志获取三、截图 一、yaml 数据获取 需要安装 PyYAML 库 import yaml import os from TestPOM.common import dir_config as Dirdef read_yaml(key,file_name"test_datas.yaml"):file_path os.path.join(Dir.testcases_dir, file_…...

基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

数学复习笔记 6

前言 复习一下行列式的一些基本的题。感觉网课有点没跟上了。今天花点时间跟上网课的进度。要紧跟进度&#xff0c;然后剩下的时间再去复习前面的内容。多复习&#xff0c;提升自己的解题能力。 行列式和矩阵 三年级&#xff0c;我现在是三年级下册。。。马上就要结束大学的…...

JS Map使用方法

JS Map使用方法 Map 是 ES6 引入的一种新的数据结构&#xff0c;它类似于对象&#xff08;Object&#xff09;&#xff0c;但提供了更强大的键值对存储功能。 文章目录 JS Map使用方法基本特性基本用法创建 Map常用方法遍历方法 与 Object 的区别实际应用示例示例1&#xff1a…...

大模型分布式光伏功率预测实现详解

一、引言 随着全球能源结构向可再生能源转型,光伏发电作为清洁能源的重要组成部分,其装机容量持续快速增长。然而,光伏发电具有显著的间歇性和波动性特点,给电力系统的稳定运行带来了巨大挑战。准确的光伏功率预测对于电网调度、电力市场交易和电站运营管理至关重要。近年…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集

作者&#xff1a;Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位&#xff1a;武汉大学计算机学院 论文标题&#xff1a;RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【LLM模型】如何构建自己的MCP Server?

什么是 MCP&#xff1f; Model Context Protocol (MCP) 是一种协议&#xff0c;它允许大型语言模型&#xff08;LLMs&#xff09;访问自定义的工具和服务。Trae 中的智能体作为 MCP 客户端可以选择向 MCP Server 发起请求&#xff0c;以使用它们提供的工具。你可以自行添加 MC…...

SQL 索引优化指南:原理、知识点与实践案例

SQL 索引优化指南&#xff1a;原理、知识点与实践案例 索引的基本原理 索引是数据库中用于加速数据检索的数据结构&#xff0c;类似于书籍的目录。它通过创建额外的数据结构来存储部分数据&#xff0c;使得查询可以快速定位到所需数据而不必扫描整个表。 索引的工作原理 B-…...

java基础-方法的重写、super关键字

1.定义&#xff1a;子类可以根据需要改写从父类那继承来的方法&#xff0c;执行时&#xff0c;子类的方法会覆盖父类的方法 2.要求&#xff1a; &#xff08;1&#xff09;子类和父类的方法必须同名&#xff0c;同参数列表 &#xff08;2&#xff09;父类中private修饰的方法…...

技术并不能产生一个好的产品

技术是产生一个好的产品充分条件&#xff0c;不是必要条件。 当笔者到了40岁的年龄时间&#xff0c;发现再怎么努力提升技术&#xff0c;也没办法挽救烂的产品设计。 一个好的产品&#xff0c;首先要找准自己的定位&#xff0c;不能动不动就把自己拿一线品牌来比较。 好的产品…...

lubuntu 系统详解

Lubuntu 系统详解&#xff1a;轻量高效的 Ubuntu 衍生版 一、系统概述 定位与背景&#xff1a; Lubuntu 是 Ubuntu 的官方衍生版本&#xff08;Flavor&#xff09;&#xff0c;专注于轻量性与高效性&#xff0c;旨在为低配置设备&#xff08;如老旧电脑、上网本、低配笔记本 …...

《设备管理与维修》审核严吗?“修改后再投”是拒稿了吗?

有过论文投稿经验的朋友&#xff0c;可能在审核后收到过“修改后再投”的回复。有些期刊可能是真的建议投稿人在修改后再投稿&#xff0c;有些则可能是标准的拒稿模板。 《设备管理与维修》审核严吗&#xff1f;收到“修改后再投”的回复该怎么办&#xff1f;下面我就来分享下之…...

2025年5月-信息系统项目管理师高级-软考高项一般计算题

决策树和期望货币值 加权算法 自制和外购分析 沟通渠道 三点估算PERT 当其他条件一样时&#xff0c;npv越大越好...

界面组件DevExpress WPF中文教程:Grid - 如何自定义Band Header外观?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

Supabase 的入门详细介绍

Supabase 是什么&#xff1f; 简单来说&#xff0c;Supabase 是一个开源的 Firebase 替代品。它提供了一整套后端即服务 (BaaS - Backend as a Service) 的工具&#xff0c;让你能够快速构建应用程序的后端&#xff0c;而无需自己从头搭建和管理服务器、数据库等基础设施。 S…...

【实战】基于 ABP vNext 构建高可用 S7 协议采集平台(西门子 PLC 通信全流程)

&#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全流程&#xff09;&#x1f4ca; &#x1f4d1; 目录 &#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全…...

20、map和set、unordered_map、un_ordered_set的复现

一、map 1、了解 map的使用和常考面试题等等&#xff0c;看这篇文章 map的key是有序的 &#xff0c;值不可重复 。插入使用 insert的效率更高&#xff0c;而在"更新map的键值对时&#xff0c;使用 [ ]运算符效率更高 。" 注意 map 的lower和upper那2个函数&#x…...

leetcode 189. 轮转数组

题目描述 代码&#xff1a; class Solution { public:void rotate(vector<int>& nums, int k) {int len nums.size();k k % len;reverse(nums,0,len-1);reverse(nums,0,k-1);reverse(nums,k,len-1);}void reverse(vector<int>& nums,int left,int right…...

得物0509面试手撕题目解答

题目 使用两个栈&#xff08;一个无序栈和一个空栈&#xff09;将无序栈中的元素转移到空栈&#xff0c;使其有序&#xff0c;不允许使用其他数据结构。 示例&#xff1a;输入&#xff1a;[3, 1, 6, 4, 2, 5]&#xff0c;输出&#xff1a;[6, 5, 4, 3, 2, 1] 思路与代码 如…...

8天Python从入门到精通【itheima】-6~10

目录 7节-开发出第一个Python程序&#xff1a; 1.在cmd窗口写下第一个最简单的程序&#xff1a;Hello World!!! 9节&#xff1a; 1.如何卸载python&#xff1a; 2.报错&#xff1a;不是可运行的程序 ​编辑 3.报错&#xff1a;无法初始化设备PRN&#xff1a; 4.报错&…...

Qt —— 使用Enigma Virtual Box将Qt程序打包为独立可运行exe(附:完整打包方法且完美运行)

🔔 Qt 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 打包结果 1、如下图,准备好Qt已打包后程序文件夹。附 Qt —— 在Windows下打包Qt应用程序(在其他Windows电脑下使用)...

大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比

引言 随着大语言模型&#xff08;LLM&#xff09;参数规模突破千亿级&#xff0c;基于人类反馈的强化学习&#xff08;RLHF&#xff09;成为提升模型对齐能力的关键技术。OpenRLHF、verl、LLaMA-Factory和SWIFT作为开源社区的四大标杆框架&#xff0c;分别通过分布式架构、混合…...

VTK|类似CloudCompare的比例尺实现1-源码分析

文章目录 CloudCompare源码分析void ccGLWindowInterface::drawScale(const ccColor::Rgbub& color)&#x1f9e9; 总体功能&#x1f9e0; 函数逐步解析✅ 1. 断言只在正交模式下使用✅ 2. 计算显示的实际长度✅ 3. 字体和图形区域准备✅ 4. 计算比例尺图形的绘制位置✅ 5.…...

【计算机视觉】OpenCV实战项目:基于Tesseract与OpenCV的字符识别系统深度解析

基于Tesseract与OpenCV的字符识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理流水线1) 形态学操作2) 自适应阈值 2.2 Tesseract OCR引擎 3. 实战部署指南3.1 环境配置3.2 项目结构优化建议3.3 增强版代码实现 4. 常见问题与解决方案4.1 Tesseract路径错误4.2…...

CVE-2025-31258 macOS远程视图服务沙箱逃逸漏洞PoC已公开

苹果公司近日针对macOS系统中新披露的CVE-2025-31258漏洞发布补丁&#xff0c;该漏洞可能允许恶意应用程序突破沙箱限制&#xff0c;获取未授权的系统资源访问权限。在安全研究员Seo Hyun-gyu公开概念验证&#xff08;PoC&#xff09;利用代码后&#xff0c;该漏洞已在macOS Se…...

使用CAS操作实现乐观锁的完整指南

乐观锁是一种高效的并发控制机制&#xff0c;而CAS(Compare-And-Swap)是实现乐观锁的核心技术。下面我将详细介绍如何通过CAS操作实现乐观锁。 一、CAS操作原理 CAS(Compare-And-Swap)是一种原子操作&#xff0c;包含三个操作数&#xff1a; 内存位置(V)预期原值(A)新值(B) …...

java之网络编程

文章目录 网络编程概述什么是网络编程基本的通信架构CS架构BS架构 Java提供了哪些网络编程解决方案&#xff1f; 网络编程三要素IPIP地址IP域名&#xff08;Domain Name&#xff09;DNS域名解析&#xff08;Domain Name System&#xff09;公网IP、内网IP本机IPInetAddress类In…...

苍穹外卖--新增菜品

1.需求分析和设计 产品原型 业务规则&#xff1a; 菜品名称必须是唯一的 菜品必须属于某个分类下&#xff0c;不能单独存在 新增菜品时可以根据情况选择菜品的口味 每个菜品必须对应一张图片 接口设计&#xff1a; 根据类型查询分类(已完成) 文件上传 新增菜品 根据类型…...

Spark处理过程-转换算子

&#xff08;一&#xff09;RDD的处理过程 Spark使用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。RDD的处理过程如图所示&#xff1b; RDD经过一系列的“转换”操作&#xff0c;每一次转换都会产生不同的RDD&#xff0c;以供给下一次“转换”操作使…...

运行Spark程序-在Spark-shell——RDD

一、基本概念 RDD&#xff08;弹性分布式数据集&#xff09;是 Apache Spark 的核心抽象&#xff0c;是 Spark 提供的最基本的数据处理单元。理解 RDD 的概念对于掌握 Spark 编程至关重要。以下是 RDD 的核心概念和特性&#xff1a; 1. 什么是 RDD&#xff1f; 定义&#xf…...

Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案

程序启动时优化的价值 在桌面软件开发领域&#xff0c;应用程序的启动过程就像音乐的序曲&#xff0c;决定了用户对软件品质的第一印象。比如首次启动等待超过3秒时&#xff0c;会让大多数用户产生负面看法&#xff0c;而专业工具软件的容忍阈值甚至更低。Qt框架作为跨平台开发…...

vue3父子组件传值

父 → 子&#xff1a;props 父组件 <template><ChildComponent :message"parentMessage" :user"user" /> </template><script setup> import ChildComponent from ./ChildComponent.vue; const parentMessage Hello from paren…...