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

【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通

在这里插入图片描述

使用 LLaMA-Factory 进行模型微调:从入门到精通

    • 一、环境搭建:奠定微调基础
      • (一)安装依赖工具
      • (二)创建 conda 环境
      • (三)克隆仓库并安装依赖
    • 二、数据准备:微调的基石
      • (一)数据集格式
      • (二)数据集注册
    • 三、模型文件:微调的起点
      • (一)从 Hugging Face 下载
      • (二)模型文件验证
    • 四、代码下载:获取微调工具
    • 五、配置更新:掌控微调细节
      • (一)微调配置文件详解
      • (二)配置文件的灵活应用
    • 六、可能会遇到的报错及解决方法:微调的挑战与应对
      • (一)CUDA 相关报错
      • (二)数据格式错误
      • (三)模型加载失败
      • (四)训练过程中的其他错误
    • 七、相关的论文信息:理论支撑与前沿探索
      • (一)LoRA 相关论文
      • (二)其他相关论文
    • 八、SFT 和 LoRA 的 SH 命令
      • (一)SFT 的 SH 命令
      • (二)LoRA 的 SH 命令
    • 九、快速开始
    • 十、LLaMA Board 可视化微调(由 Gradio 驱动)

在人工智能快速发展的当下,大模型微调成为了众多研究人员和开发者关注的焦点。LLaMA-Factory 作为一款简单易用的大模型微调框架,以其高效性和便捷性脱颖而出。本文将详细介绍如何利用 LLaMA-Factory 进行模型微调,从数据准备到模型文件、代码下载、配置更新、配置含义、可能会遇到的报错及解决方法,再到相关的论文信息,全方位为您呈现这一过程。

一、环境搭建:奠定微调基础

(一)安装依赖工具

  • 安装 anaconda :访问 Anaconda 官方网站,根据您的操作系统选择对应的安装包进行下载。安装过程中,只需按照安装向导的提示逐步操作,即可完成安装。安装完成后,您可以在命令行中输入 conda --version 来验证安装是否成功。
  • 安装 git :前往 Git 官方网站,根据您的操作系统下载对应的安装程序。安装完成后,在命令行中输入 git --version,若能显示版本信息,则说明安装成功。

(二)创建 conda 环境

在命令行中输入以下命令:

conda create --name openTreck python=3.8

该命令用于创建一个名为 openTreck 的新环境,并指定 Python 版本为 3.8。激活环境的命令为:

conda activate openTreck

(三)克隆仓库并安装依赖

首先,使用以下命令克隆 LLaMA-Factory 项目仓库到本地:

git clone https://github.com/hiyouga/LLaMA-Factory.git

然后,进入项目目录:

cd LLaMA-Factory

最后,使用以下命令安装所需的 Python 包:

pip install -e ".[torch,metrics]"

二、数据准备:微调的基石

(一)数据集格式

为了确保数据集能够被 LLaMA-Factory 正确读取和处理,您的自定义数据集需要遵循特定的格式。一个典型的指令微调数据集应包含以下字段:

  • instruction :表示需要模型执行的指令或任务,例如 “介绍你自己”。
  • input :为模型提供执行指令所需的输入信息,在许多情况下可能为空,如前面提到的例子。
  • output :展示模型执行指令后应产生的理想输出,比如 “我是 Qwen,一个由月之暗面科技有限公司开发的人工智能助手。”

示例数据集如下:

{"instruction": "介绍人工智能的发展历程","input": "","output": "人工智能的发展历程可以追溯到 20 世纪中叶,当时科学家们开始探索如何使机器模拟人类智能。1956 年,达特茅斯会议的召开标志着人工智能学科的正式诞生。在接下来的几十年里,人工智能经历了多次起伏,包括专家系统的兴起与衰落、机器学习的崛起等。近年来,随着深度学习技术的突破,人工智能迎来了新的发展高潮,自然语言处理、计算机视觉等领域取得了显著的成果。"
}

(二)数据集注册

将准备好的数据集文件(例如命名为 my_dataset.json)放置在 LLaMA-Factory 项目根目录下的 data 文件夹内。接着,您需要在 data_info.json 文件中注册该数据集。编辑 data_info.json 文件,添加以下内容:

{"my_dataset": {"file_name": "my_dataset.json","columns": ["instruction", "input", "output"]}
}

三、模型文件:微调的起点

您可以从 Hugging Face 或 ModelScope 等平台下载所需的模型文件,以 DeepSeek-R1-Distill-Qwen-1.5B 为例。

(一)从 Hugging Face 下载

访问 Hugging Face 模型库,在搜索栏中输入 “DeepSeek-R1-Distill-Qwen-1.5B”,进入模型页面。点击 “Download” 按钮,选择下载整个模型文件夹。下载完成后,将解压后的文件夹放置在 LLaMA-Factory 项目根目录下的 models 文件夹内。

(二)模型文件验证

为了确保下载的模型文件完整且可用,您可以通过 LLaMA-Factory 提供的原始推理 demo 进行验证。在命令行中运行以下命令:

llamafactory-cli inference --model_name_or_path models/DeepSeek-R1-Distill-Qwen-1.5B --prompt "介绍你自己"

若模型能够正确输出类似于 “我是 Qwen,一个由月之暗面科技有限公司开发的人工智能助手。” 的内容,则说明模型文件完整且 transformers 库等依赖软件工作正常。

四、代码下载:获取微调工具

通过前面提到的 git clone https://github.com/hiyouga/LLaMA-Factory.git 命令,您已经成功将 LLaMA-Factory 的代码仓库克隆到本地。这一步骤为您后续进行模型微调提供了必要的代码基础。

五、配置更新:掌控微调细节

(一)微调配置文件详解

LLaMA-Factory 提供了灵活的配置文件来控制微调的各个方面。以下是一个示例配置文件 examples/train_lora/llama3_lora_sft.yaml,我们将对其中的关键参数进行详细解释:

model_name_or_path: models/DeepSeek-R1-Distill-Qwen-1.5B  # 指定微调所使用的基座模型路径,这里我们使用之前下载并验证过的 DeepSeek-R1-Distill-Qwen-1.5B 模型。
stage: sft  # 指定训练阶段为监督微调(Supervised Fine-Tuning),这是微调过程中的一个关键阶段,主要目的是利用监督数据对模型进行调整,使其更好地适应特定任务。
do_train: true  # 设置为 true 以启动训练过程,这是开始微调的必要条件。
finetuning_type: lora  # 指定微调方法为 LoRA(Low-Rank Adaptation),这种方法通过在模型原有的权重矩阵上添加一对低秩矩阵来实现微调,具有计算效率高、显存占用少等优点,特别适合在有限资源下对大型模型进行微调。
lora_target: all  # 指定 LoRA 微调的目标模块为所有模块,意味着对模型的各个部分都进行微调,以便全面优化模型性能。
dataset: my_dataset  # 指定用于微调的数据集名称,这里使用我们在前面准备并注册的自定义数据集 my_dataset。
template: default  # 指定数据模板为默认模板,不同的数据模板适用于不同的模型和任务,模板主要定义了如何将数据集中的样本转换为模型可以理解的输入格式,包括提示词(prompt)的构造等。
cutoff_len: 512  # 指定数据的截断长度为 512,防止过长的文本对训练造成影响,如导致显存不足或训练速度过慢等问题。当文本长度超过 512 时,将其截断至该长度。
max_samples: 10000  # 指定最大样本数为 10000,防止数据过多导致训练时间过长,尤其是在资源有限的情况下,可以先使用部分数据进行快速实验和调试。
per_device_train_batch_size: 4  # 指定每个设备上的训练批次大小为 4,批次大小的选择需要综合考虑模型大小、显存容量以及训练效率等因素。较大的批次大小通常可以提高训练效率,但也会增加显存占用。
gradient_accumulation_steps: 2  # 指定梯度累积步数为 2,用于在有限显存下模拟更大的批次大小。例如,当您希望达到批次大小为 8 的效果,但显存不足以支持时,可以将 per_device_train_batch_size 设置为 4,并将 gradient_accumulation_steps 设置为 2,这样每两个步骤累积一次梯度,相当于实现了批次大小为 8 的效果。
learning_rate: 1e-5  # 设置学习率为 1e-5,学习率是控制模型参数更新速度的关键参数。学习率过高可能导致模型参数更新过快,训练过程不稳定,甚至出现 loss 发散的情况;学习率过低则会使训练速度过慢,需要更多的时间才能收敛。通常需要通过实验来确定最佳的学习率。
num_train_epochs: 3  # 设置训练的轮次为 3,表示整个训练数据集将被遍历 3 次。训练轮次的选择需要权衡模型性能和训练成本,过多的轮次可能导致过拟合,而过少的轮次可能无法充分训练模型。
lr_scheduler_type: cosine  # 指定学习率调度器类型为 cosine(余弦退火调度器),该调度器会根据余弦函数的形状调整学习率,在训练初期保持较高的学习率以加快收敛速度,然后逐渐降低学习率,以便在训练后期更精细地调整模型参数,提高模型的泛化能力。
output_dir: output/my_model_lora_sft  # 指定训练输出目录为 output/my_model_lora_sft,用于保存微调后的模型文件、训练日志以及评估结果等。

(二)配置文件的灵活应用

您可以在 LLaMA-Factory 的 examples 文件夹中找到多个示例配置文件,这些文件涵盖了不同的模型、微调方法和任务场景。通过研究和修改这些示例配置文件,您可以快速掌握如何根据自己的需求定制微调配置。

六、可能会遇到的报错及解决方法:微调的挑战与应对

(一)CUDA 相关报错

  • 错误表现 :在训练过程中出现 CUDA out of memory 错误,这通常是因为显存不足导致的。
  • 解决方法
    • 减小 batch size :尝试将 per_device_train_batch_size 从 4 减小到 2 或更小的值,这样可以减少每次训练迭代所需的显存。
    • 使用梯度累积 :适当增加 gradient_accumulation_steps 的值,例如从 2 增加到 4,这样可以在不增加显存占用的情况下,模拟更大的批次大小。
    • 采用混合精度训练 :在配置文件中添加 fp16: true,开启混合精度训练。混合精度训练利用 GPU 对浮点数运算的优化,使用 16 位浮点数(FP16)进行部分计算,从而减少显存占用并加快训练速度。需要注意的是,在开启混合精度训练时,要确保您的 GPU 和深度学习框架支持此功能,并且对训练过程进行适当的监控,以防止可能出现的数值不稳定问题。

(二)数据格式错误

  • 错误表现 :在加载数据集时,可能会出现数据格式错误的提示,如 ValueError: Invalid data format
  • 解决方法
    • 检查数据集文件 :仔细检查您的数据集文件是否符合 LLaMA-Factory 要求的格式,确保每个样本都包含完整的字段(instruction、input、output),且数据类型正确(例如,字符串字段不能包含未转义的特殊字符)。
    • 验证数据注册信息 :检查 data_info.json 文件中对数据集的注册信息是否准确无误,包括文件名和列名等,确保 LLaMA-Factory 能够正确识别和解析您的数据集。

(三)模型加载失败

  • 错误表现 :在运行微调代码时,出现模型加载失败的错误,如 OSError: Error loading model weights
  • 解决方法
    • 检查模型文件完整性 :重新检查下载的模型文件是否完整,文件大小是否与官方提供的信息一致。如果文件损坏或不完整,重新下载模型文件。
    • 验证模型路径 :确保配置文件中指定的 model_name_or_path 路径正确无误,且该路径下包含模型所需的全部文件,如配置文件(config.json)、权重文件(pytorch_model.bin 等)和词汇表文件(vocab.json、merges.txt 等)。

(四)训练过程中的其他错误

  • loss 不下降

    • 原因分析 :可能是因为学习率设置过高或过低,或者数据存在质量问题,如标注不准确、数据分布与模型预训练数据分布差异过大等。
    • 解决方法 :尝试调整学习率,如果不确定合适的范围,可以采用学习率范围测试(Learning Rate Range Test)方法,先运行一个学习率范围测试实验,观察 loss 随学习率变化的趋势,找到使 loss 快速下降且未出现发散现象的学习率范围,然后在该范围内选择合适的学习率进行训练。同时,对数据进行仔细检查和清洗,确保数据质量和标注准确性。
  • nan loss

    • 原因分析 :可能是学习率过高,导致模型参数更新过快,梯度出现爆炸现象,从而使 loss 变为 nan;或者是数据中存在异常值,导致模型在计算 loss 时出现数值不稳定的情况。
    • 解决方法 :降低学习率,观察 loss 是否恢复正常。同时,对数据进行预处理,检查并处理数据中的异常值,如过大的数值或不合理的文本内容等。

七、相关的论文信息:理论支撑与前沿探索

LLaMA-Factory 所使用的微调方法,如 LoRA 等,都得到了相关学术论文的理论支持和实践验证。

(一)LoRA 相关论文

  • 《Low-Rank Adaptation of Large Language Models》 :这篇论文详细介绍了 LoRA 微调方法的原理和优势。论文指出,大型语言模型(LLMs)在各种自然语言处理任务中展现出了强大的性能,但对这些模型进行微调通常需要大量的计算资源和时间。LoRA 提供了一种高效的解决方案,通过在模型原有的权重矩阵上添加一对低秩矩阵(即 rank - decomposition matrices),使得在微调过程中只有这些低秩矩阵需要更新,而模型的原始权重保持不变。这种方法大大减少了需要更新的参数数量,从而降低了计算成本和显存占用。论文还通过实验验证了 LoRA 在多个任务上的有效性,包括文本分类、问答等,证明了 LoRA 能够在保持模型性能的同时,显著提高微调效率。

(二)其他相关论文

  • 《Supervised Fine-Tuning for Large Language Models》 :该论文深入探讨了监督微调(SFT)在大型语言模型中的应用。论文分析了 SFT 的目标、方法和挑战,强调了 SFT 在提高模型任务特定性能方面的重要性。论文还比较了不同的 SFT 策略,如直接微调、对比学习等,并探讨了如何设计有效的训练数据集和损失函数来优化 SFT 效果。通过对多个大型语言模型的实验,论文展示了 SFT 在提高模型准确性和相关性方面的显著作用,为 LLaMA-Factory 中采用的 SFT 方法提供了坚实的理论基础和实践指导。

  • 《AdamW: A Method for Stochastic Optimization》 :AdamW 优化算法是许多微调过程中常用的优化方法之一。这篇论文介绍了 AdamW 的原理和优势,它在 Adam 优化算法的基础上进行了改进,通过将权重衰减(weight decay)与梯度更新解耦,解决了 Adam 优化器在权重衰减处理上的问题,使得优化过程更加稳定和有效。在 LLaMA-Factory 中,使用 AdamW 作为优化器可以更好地控制模型参数更新,帮助模型更快地收敛并提高模型的泛化能力。

八、SFT 和 LoRA 的 SH 命令

(一)SFT 的 SH 命令

以下是一个用于启动监督微调(SFT)的 SH 命令示例:

llamafactory-cli train examples/sft/single_gpu/baichuan2_sft.yaml

该命令用于执行单 GPU 上的监督微调任务,其中 examples/sft/single_gpu/baichuan2_sft.yaml 是 SFT 的配置文件路径。您需要确保该配置文件中已经正确设置了模型路径、数据集名称、训练参数等信息,以便顺利启动微调过程。

(二)LoRA 的 SH 命令

以下是一个用于启动 LoRA 微调的 SH 命令示例:

llamafactory-cli train examples/lora_multi_gpu/baichuan2_lora_sft.yaml

该命令用于执行多 GPU 上的 LoRA 微调任务,其中 examples/lora_multi_gpu/baichuan2_lora_sft.yaml 是 LoRA 微调的配置文件路径。在进行 LoRA 微调时,您需要确保系统中有多块 GPU,并且已经正确安装和配置了支持多 GPU 训练的深度学习框架和相关依赖库。同时,您也需要在配置文件中正确设置与 LoRA 微调相关的关键参数,如 finetuning_type: lora 等,以确保微调过程按照预期进行。

九、快速开始

下面三行命令分别对 Llama3-8B-Instruct 模型进行 LoRA 微调推理合并

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

高级用法请参考 examples/README_zh.md(包括多 GPU 微调)。

十、LLaMA Board 可视化微调(由 Gradio 驱动)

llamafactory-cli webui

通过以上对 LLaMA-Factory 的详细阐述,您已经掌握了如何利用这一强大工具进行模型微调的全流程。从环境搭建到数据准备,从模型文件选择到代码下载和配置更新,再到应对可能遇到的报错以及了解背后的理论支撑,每一步都为您铺就了通往成功微调的道路。在实际操作过程中,建议您多进行实验和探索,尝试不同的模型、数据集和微调配置,不断提升您的模型性能,挖掘模型在各种应用任务中的潜力。

:上文中提及的部分方法(如 LoRA 微调等)的代码实现及参数设置仅供参考,随着 LLaMA-Factory 框架的不断更新,具体的实现方式和最佳实践可能会有所变化。建议您在使用过程中密切关注官方文档和社区动态,以获取最新的信息和指导。

相关文章:

【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通

使用 LLaMA-Factory 进行模型微调:从入门到精通 一、环境搭建:奠定微调基础(一)安装依赖工具(二)创建 conda 环境(三)克隆仓库并安装依赖 二、数据准备:微调的基石&#…...

sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离

前言 sensitive-word-admin 最初的定位是让大家知道如何使用 sensitive-word,所以开始想做个简单的例子。 不过秉持着把一个工具做好的原则,也收到很多小伙伴的建议。 v2.0.0 在 ruoyi-vue(也非常感谢若依作者多年来的无私奉献&#xff09…...

HTML属性

HTML(HyperText Markup Language)是网页开发的基石,而属性(Attribute)则是HTML元素的重要组成部分。它们为标签提供附加信息,控制元素的行为、样式或功能。本文将从基础到进阶,全面解析HTML属性…...

计算机网络 4-1 网络层(网络层的功能)

【考纲内容】 (一)网络层的功能 异构网络互连;路由与转发;SDN基本概念;拥塞控制 (二)路由算法 静态路由与动态路由;距离-向量路由算法;链路状态路由算法;层…...

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

《算法导论(第4版)》学习第 10 天,p17-p27 总结,总计 11 页。 一、技术总结 1. insertion sort (1)keys The numbers to be sorted are also known as the keys(要排序的数称为key)。 第 n 次看插入排序,这次有两个地方感触比较深&#…...

C++中线程安全的对多个锁同时加锁

C中线程安全的对多个锁同时加锁 C中线程安全的对两个锁同时加锁 C中线程安全的对两个锁同时加锁 参考文档:https://llfc.club/articlepage?id2UVOC0CihIdfguQFmv220vs5hAG 如果我们现在有一个需要互斥访问的变量 big_object,它的定义如下: …...

子串简写(JAVA)一维前缀和, 蓝桥杯

这个题用前缀和,开两个数组,一个存前n个字符数据的c1的数字个数,另一个前n个字符c2的数字个数,然后遍历一次加起来,有一个测试点没过去,把那个存最后数的换成long,应该是这题数据范围给的不对&a…...

数据库故障排查全攻略:从实战案例到体系化解决方案

一、引言:数据库故障为何是技术人必须攻克的 "心腹大患" 在数字化时代,数据库作为企业核心数据资产的载体,其稳定性直接决定业务连续性。据 Gartner 统计,企业每小时数据库 downtime 平均损失高达 56 万美元&#xff0…...

vllm笔记

目录 vllm简介vllm解决了哪些问题?1. **瓶颈:KV 缓存内存管理低效**2. **瓶颈:并行采样和束搜索中的内存冗余**3. **瓶颈:批处理请求中的内存碎片化** 快速开始安装vllm开始使用离线推理启动 vLLM 服务器 支持的模型文本语言模型生…...

“AI+城市治理”智能化解决方案

目录 一、建设背景 二、需求分析 三、系统设计 四、系统功能 五、应用场景 六、方案优势 七、客户价值 八、典型案例 一、建设背景 当前我国城市化率已突破65%,传统治理模式面临前所未有的挑战。一方面,城市规模扩大带来治理复杂度呈指数级增长,全国城市管理案件年…...

《医疗AI的透明革命:破解黑箱困境与算法偏见的治理之路》

医疗AI透明度困境 黑箱问题对医生和患者信任的影响:在医疗领域,AI模型往往表现为难以理解的“黑箱”,这会直接影响医生和患者对其诊断建议的信任度 。医生如果无法理解AI给出诊断的依据,就难以判断模型是否存在偏见或错误&#x…...

【论文阅读】Efficient and secure federated learning against backdoor attacks

Efficient and secure federated learning against backdoor attacks -- 高效且安全的可抵御后门攻击的联邦学习 论文来源问题背景TLDR系统及威胁模型实体威胁模型 方法展开服务器初始化本地更新本地压缩高斯噪声与自适应扰动聚合与解压缩总体算法 总结优点缺点 论文来源 名称…...

21、DeepSeekMath论文笔记(GRPO)

DeepSeekMath论文笔记 0、研究背景与目标1、GRPO结构GRPO结构PPO知识点**1. PPO的网络模型结构****2. GAE(广义优势估计)原理****1. 优势函数的定义**2.GAE(广义优势估计) 2、关键技术与方法3、核心实验结果4、结论与未来方向关键…...

深入解析:如何基于开源p-net快速开发Profinet从站服务

一、Profinet协议与软协议栈技术解析 1.1 工业通信的"高速公路" Profinet作为工业以太网协议三巨头之一,采用IEEE 802.3标准实现实时通信,具有: 实时分级:支持RT(实时)和IRT(等时实时)通信模式拓扑灵活:支持星型、树型、环型等多种网络结构对象模型:基于…...

腾讯多模态定制化视频生成框架:HunyuanCustom

HunyuanCustom 速读 一、引言 HunyuanCustom 是由腾讯团队提出的一款多模态定制化视频生成框架。该框架旨在解决现有视频生成方法在身份一致性(identity consistency)和输入模态有限性方面的不足。通过支持图像、音频、视频和文本等多种条件输入,HunyuanCustom 能…...

警惕C#版本差异多线程中的foreach陷阱

警惕C#版本差异多线程中的foreach陷阱​ 同样的代码,不同的结果闭包捕获的“时间差”问题绕过闭包陷阱的三种方法Lambda立即捕获(代码简洁)显式传递参数(兼容性最佳)使用Parallel.ForEach(官方推荐)注意事项:版本兼容性指南警惕多线程中的foreach陷阱:C#版本差异引发的…...

2024年AI发展趋势全面解析:从多模态到AGI的突破

2024年AI发展五大核心趋势 1. 多模态AI的爆发式增长 GPT-4V、Gemini等模型实现文本/图像/视频的跨模态理解应用场景扩展至智能客服、内容创作、工业质检等领域 2. 小型化与边缘AI的崛起 手机端LLM(如Phi-2)实现本地化部署隐私保护与实时响应的双重优…...

高精度之加减乘除之多解总结(加与减篇)

开篇总述:精度计算的教学比较杂乱,无系统的学习,且存在同法多线的方式进行同一种运算,所以我写此篇的目的只是为了直指本质,不走教科书方式,步骤冗杂。 一,加法 我在此讲两种方法: …...

Arduino 开源按键库大合集(单击/双击/长按实现)

2025.5.10 22:25更新:增加了Button2 2025.5.10 13:13更新:增加了superButton 虽然Arduino自带按键中断attachInterrupt(button1.PIN, isr, FALLING);,但是要是要实现去抖,双击检测,长按检测等等就略微麻烦些&#xff0…...

相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机Camera日志分析之七:高通Camx HAL架构opencamera二级日志详解及关键字 这一篇我们开始讲: 相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字 目录 【关注我,后续持续…...

Java零组件实现配置热更新

在某些场景下,我们需要实现配置的热更新,但是又要实现软件即插即用的需求,这就使我们不能引入过多复杂的插件,而nacos等配置中心在分布式业务场景下对配置的管理起着很重要作用,为此需要想一些办法去代替它们而完成同样…...

Kotlin高阶函数多态场景条件判断与子逻辑

Kotlin高阶函数多态场景条件判断与子逻辑 fun main() {var somefun: (Int, Float) -> Longval a 4val b 5fsomefun multi()//if 某条件println(somefun.invoke(a, b))//if 某条件somefun add()println(somefun.invoke(a, b)) }fun multi(): (Int, Float) -> Long {re…...

Ethercat转Profinet网关如何用“协议翻译术“打通自动化产线任督二脉

Ethercat转Profinet网关如何用"协议翻译术"打通自动化产线任督二脉 将遗留的Profinet设备(如传感器)接入现代EtherCAT主站(如Codesys控制器)避免全面更换硬件。 作为一名电气工程师,我最近面临的一个挑战&a…...

每日算法刷题Day1 5.9:leetcode数组3道题,用时1h

1.LC寻找数组的中心索引(简单) 数组和字符串 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 思想: 计算总和和左侧和,要让左侧和等于右侧和,即左侧和总和-左侧和-当前数字 代码 c代码: class Solution { public:i…...

MySQL的视图

一、MySQL视图的介绍和作用 MySQL视图,加油兄弟们,孰能生巧,完整代码在最后!!! 视图是一个虚拟的表,并不是真是存在的,视图其实并没有真实的数据,他只是根据一个sql语句…...

旅游推荐数据分析可视化系统算法

旅游推荐数据分析可视化系统算法 本文档详细介绍了旅游推荐数据分析可视化系统中使用的各种算法,包括推荐算法、数据分析算法和可视化算法。 目录 推荐算法 基于用户的协同过滤推荐基于浏览历史的推荐主题推荐算法 亲子游推荐算法文化游推荐算法自然风光推荐算法…...

Pandas:数据处理与分析

目录 一、Pandas 简介 二、Pandas 的安装与导入 三、Pandas 的核心数据结构 (一)Series (二)DataFrame 四、Pandas 数据读取与写入 (一)读取数据 (二)写入数据 五、数据清洗…...

非阻塞式IO-Java NIO

一、NIO简介 Java NIO是Java1.4引入的一种新的IO API,它提供了非阻塞式IO,选择器、通道、缓冲区等新的概念和机制。相比传统的IO,多出的N不单纯是新的,更表现在Non-blocking非阻塞,NIO具有更高的并发性、可扩展性以及…...

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…...

(二)Linux下基本指令 2

【知识预告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ‒r 指令 27. 重要的⼏个热键 28. 关机 16 date 指令 指定格式显⽰时间&#xff1a;date %Y-…...

[ctfshow web入门] web70

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php error_reporting和ini_set被禁用了&#xff0c;不必管他 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗&#xff1f; if(isset($_POST[c])){…...

第三章 Freertos智能小车遥控控制

本文基于小车APP&#xff0c;通过与蓝牙模块进行连接&#xff0c;发送特定信号给小车主控&#xff0c;实现对小车的模式切换、灯光控制、前进、后退、左右控制。目前还未加入电机控制&#xff0c;具体的电机控制效果还不能实现&#xff0c;但是可以进行模式切换与灯光控制。 …...

Spring 6.x 详解介绍

Spring 6.x 是 Spring Framework 的最新主版本&#xff0c;于2022年11月正式发布&#xff0c;标志着对 Java 17 和 Jakarta EE 9 的全面支持&#xff0c;同时引入了多项革新性特性&#xff0c;旨在优化性能、简化开发并拥抱现代技术趋势。 一、核心特性与架构调整 Java 17 与 J…...

阿里云OSS+CDN自动添加文章图片水印配置指南

文章目录 一、环境准备二、OSS水印样式配置三、CDN关键配置四、Handsome主题自动化配置五、水印效果验证六、常见问题排查 一、环境准备 资源清单 阿里云OSS Bucket&#xff08;绑定自定义域名 static.example.com&#xff09;阿里云CDN加速域名&#xff0c;回源为Bucket的域名…...

hot100-子串-JS

一、560.和为k的子串 560. 和为 K 的子数组 提示 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2…...

LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在日常开发中&#xff0c;我们经常需要在一组有序的数据中快速找到最接近某个目标值的元素。LeetCode 第 270 题“Closest Binary Search Tree Value”正是这样一个问题。本文将深入解析该…...

《操作系统真象还原》第十三章——编写硬盘驱动程序

文章目录 前言硬盘及分区表创建从盘及获取安装的磁盘数创建磁盘分区表硬盘分区表浅析 编写硬盘驱动程序硬盘初始化修改interrupt.c编写ide.h编写ide.c 实现thread_yield和idle线程修改thread.c 实现简单的休眠函数修改timer.c 完善硬盘驱动程序继续编写ide.c 获取硬盘信息&…...

DNS服务实验

该文章将介绍DNS服务的正向和反向解析实验、主从实验、转发服务器实验以及Web解析实验 正向解析实验&#xff1a;将域名解析为对应的IP地址 反向解析实验&#xff1a;将IP地址解析为对应的域名 主从实验&#xff1a;主服务器区域数据文件发送给从服务器&#xff0c;从服务器…...

SierraNet M1288网络损伤功能显著助力GPU互联网络的测试验证,包含包喷洒,LLR等复杂特性的验证测试

SierraNet M1288 以太网协议分析仪 产品概述 SierraNet M1288 是一款兼具高性价比与全面功能的以太网和光纤通道数据捕获及协议验证系统。它能够以全线路速率 100% 记录所有流量&#xff0c;并借助 InFusion™ 工具实现高级错误注入和流量破坏功能&#xff0c;为开发人员和协议…...

HunyuanCustom:文生视频框架论文速读

《HunyuanCustom: A Multimodal-Driven Architecture for Customized Video Generation》论文讲解 一、引言 本文提出了 HunyuanCustom&#xff0c;这是一个基于多模态驱动的定制化视频生成框架。该框架旨在解决现有视频生成模型在身份一致性&#xff08;identity consistenc…...

HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对

HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对 HTTP (HyperText Transfer Protocol) 定义&#xff1a;应用层协议&#xff0c;用于通过Web传输数据&#xff08;如网页、文件&#xff09;默认端口&#xff1a;80机制&#xff1a;客户端发送Get请求&#xff0c;服务器…...

如何启动vue项目及vue语法组件化不同标签应对的作用说明

如何启动vue项目及vue语法组件化不同标签应对的作用说明 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&…...

Ubuntu22.04安装显卡驱动/卸载显卡驱动

报错 今日输入nvidia-smi报错,在安装了535和550,包括560都没办法解决,但是又怕乱搞导致环境损坏,打算把显卡卸载然后重新安装系统默认推荐版本的显卡驱动 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸载…...

【桌面】【输入法】常见问题汇总

目录 一、麒麟桌面系统输入法概述 1、输入法介绍 2、输入法相关组件与服务 3、输入法调试相关命令 3.1、输入法诊断命令 3.2、输入法配置重新加载命令 3.3、启动fcitx输入法 3.4、查看输入法有哪些版本&#xff0c;并安装指定版本 3.5、重启输入法 3.6、查看fcitx进程…...

Web3 初学者学习路线图

目录 🌟 Web3 初学者学习路线图 🧩 第一步:搞懂 Web3 是什么 ✅ 学什么? 🔧 推荐工具: 🎥 推荐学习: 🛠️ 第二步:了解智能合约和 Solidity(核心技能) ✅ 学什么? 🔧 工具: 📘 推荐课程: 🌐 第三步:连接前端和区块链,创建简单 DApp ✅ 学…...

python打卡day21

常见的降维算法 知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 之前学了特征降维的两个思路&#xff0c;特征筛选&#xff08;如树模型重要性、方差筛选&#xff09;和特征组合&#xff08;如SVD/PCA&#xff09;。 现在引入特征降维的另一种分类&#xff1a;无/有…...

KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享

期刊介绍&#xff1a; KBS是计算机一区&#xff0c;CCF-c期刊&#xff0c;&#xff08;只看大类分区&#xff0c;小类不用看&#xff0c;速度很快&#xff0c;桌拒比较多&#xff0c;能送审就机会很大&#xff01;&#xff09; 具体时间流程&#xff1a; 7月初投稿&#xf…...

vue使用rules实现表单校验——校验用户名和密码

编写校验规则 常规校验 const rules {username: [{ required: true, message: 请输入用户名, trigger: blur },{ min: 5, max: 16, message: 长度在 5 到 16 个字符, trigger: blur }],password: [{ required: true, message: 请输入密码, trigger: blur },{ min: 5, max: 1…...

[CANN] 安装软件依赖

环境 昊算平台910b NPUdocker容器 安装步骤 安装依赖-安装CANN&#xff08;物理机场景&#xff09;-软件安装-开发文档-昇腾社区 apt安装miniconda安装 Apt 首先进行换源&#xff0c;参考昇腾NPU容器内 apt 换源 Miniconda 安装miniconda mkdir -p ~/miniconda3 wget …...

代码随想录算法训练营第三十七天

LeetCode题目: 300. 最长递增子序列674. 最长连续递增序列718. 最长重复子数组2918. 数组的最小相等和(每日一题) 其他: 今日总结 往期打卡 300. 最长递增子序列 跳转: 300. 最长递增子序列 学习: 代码随想录公开讲解 问题: 给你一个整数数组 nums &#xff0c;找到其中最长…...