大语言模型(LLM)微调技术笔记
图1:大模型进化树2
大模型微调
在预训练后,大模型可以获得解决各种任务的通用能力。然而,越来越多的研究表明,大语言模型的能力可以根据特定目标进一步调整。
这就是微调技术,目前主要有两种微调大模型的方法1:
- 指令微调,目标是增强(或解锁)大语言模型的能力。
- 对齐微调,目标是将大语言模型的行为与人类的价值观或偏好对齐。
在 OpenAI 发布的 ChatGPT 中,就主要应用了微调技术3,从而获得了惊艳全世界的效果。
图2:InstuctGPT 原理
指令微调 ( Instruction Tuning)
本质上,指令微调是在自然语言格式的实例集合上微调预训练后的大语言模型的方法。这种方法与有监督微调和多任务提示训练密切相关。为了进行指令微调,我们首先需要收集或构造指令格式的实例。然后,我们使用这些格式化的实例以有监督的方式微调大语言模型(例如,使用序列到序列的损失进行训练)。指令微调后,大语言模型展现出泛化到未见过任务的卓越能力 ,即使在多语言场景下也能有不错表现。
格式化实例构造(微调数据集)
通常情况下,一个指令格式化的实例包括一个任务描述(被称为指令 instruction)、一个输入输出对以及少量示例(可选)。
数据集一般用两种方法产出:
图3:实例格式化和两种构造指令格式实例的示意图。1
- 格式化已有数据集。将传统的NLP数据集格式调整后,用于指令微调。
- 为降低人工格式化成本,可以通过 ChatGPT 生成 Instruciton。典型 Prompt:“请你为这段内容生成一个合理的问题”
- 人工标注数据集。为获得更好的人类对齐效果,OpenAI 建议使用人工标注数据集。
- 为降低人工标注成本,目前很多数据集由 ChatGPT 生成,包括用户分享的 ChatGPT 对话历史(如 ShareGPT)或者使用 ChatGPT生成的数据集。
数据集也分为通用任务的数据集以及专用数据集,前者目前有大量开源数据集可供使用,后者则针对某个具体领域,可以自行构建。此外引入多样化的数据集(包括引入 CoT思维链等)可以有效的提升模型性能。
目前通用的中文微调数据集:
数据集 | 内容 |
---|---|
COIG | Chinese Open Instruction Generalist project |
Stanford Alpaca (Chinese) | Alpaca 数据集中文翻译(ChatGPT 辅助翻译) |
BELLE | BELLE 项目的中文数据集(ChatGPT 生成) |
GuanacoDataset | Guannaco 模型的对话数据集 |
WebQA(zh) | 中文网络问答 |
pCLUE | 基于提示的大规模预训练数据集,用于多任务学习和零样本学习 |
其余中文数据集可以参见:
- https://github.com/CVI-SZU/Linly/blob/main/instructions/README.md
- https://github.com/hiyouga/ChatGLM-Efficient-Tuning/blob/main/data/README.md
数据集格式示例
典型的数据集格式:{"instruction": "", "input": "", "output": ""}
, 如果要微调已经经过指令微调的模型,那么微调数据集的格式应该保持不变以获得最佳效果,格式包括分隔符、代码标签等。
以 ChatGLM-6B 为例,其微调格式:
--- Prompt: "编辑文章,使其更吸引读者。自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入。自主机器人在各个行业中被越来越广泛地应用,从制造业到医疗保健再到安全。"Complete: "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入,从而实现了新的效率、精确度和可靠性水平。自主机器人在各个行业中被越来越广泛地应用,从制造业,它们可以使用精度和一致的质量组装复杂的组件,到医疗保健,可以协助进行医疗测试和处理,再到安全,可以监控大面积地区,保障人们和财产的安全。自主机器人还可以减少在危险或有害环境中的错误和增加安全,在工业流程的检查或维修期间等。由于其多样性,自主机器人将彻底改变我们工作方式的方式,使任务变得更加简单、快速,最终更加愉悦。"--- Prompt: "政府可以采取哪些策略来减少空气污染?"Complete: "1. 实施强制的车辆排放标准和基于激励的计划,以降低车辆的碳足迹。\n2. 增加公共交通工具,减少公众对车辆的依赖。\n3. 增加对空气污染的影响的认识,鼓励市民减少污染物的生成。\n4. 投资于可再生能源的研究和开发,如太阳能和风能。\n5. 在工厂和发电厂安装空气污染控制装置,例如洗涤器。\n6. 对车辆和工厂使用清洁燃料。\n7. 实施更好的城市规划和控制拓展。\n8. 改善农业效率,减少化肥和杀虫剂的使用。\n9. 种植更多的树木以减少空气污染。\n10. 减少木材、煤炭和生物质的燃烧。"
以 Claude 模型为例,其格式为:
--- Prompt: "\n\nHuman: Why is the sky blue?\n\nAssistant:"Complete: "The sky appears blue to us due to how the atmosphere interacts with sunlight. <......>"
以 Guannaco 模型为例,其格式为
Prompt: """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.### Instruction: {instruction}### Input: {input}### Response:"""Complete: """{output}"""
指令微调效果
指令微调可以让大模型有质的提升,主要体现在两个方面:
- 性能改进:最近的研究发现经过指令微调的较小模型甚至可以比未经微调的较大模型表现更好。除了模型规模外,指令微调在不同的模型架构、预训练目标和模型适应方法上都展现出持续的改进效果。在实践中,指令微调为提升现有语言模型(包括小型预训练语言模型)的能力提供了一种通用的方法 。此外,与预训练相比,指令微调成本较低,因为大语言模型所需的指令数据数量明显较少于预训练数据。
- 任务泛化性:指令微调鼓励模型理解用于任务完成的自然语言指令。它赋予大语言模型遵循人类指令执行特定任务的能力(通常被视为一种涌现能力),即使在未见过的任务上也能够执行 。大量研究已经证实了指令微调在已见和未见任务上实现卓越的性能表现。此外,指令微调还被证明对缓解大语言模型的一些弱点(如生成重复内容或在不完成特定任务的情况下补充输入)具有帮助,从而使大语言模型具有更强的解决现实世界任务的能力。此外,通过使用指令微调训练的大语言模型可以在不同语言之间泛化到相关任务。
对话微调 (Conversation Tuning)
对话微调是一种特殊的指令微调。其目的是让大语言模型在「补全」能力的基础上,解锁「对话」能力。
典型的数据集格式:{"instruction": "", "input": "", "output": "", "history": [{"", ""}, {"", ""}]}
具体的对话格式应该和模型在预训练以及微调时保持一致,以ChatGLM-6B 微调数据格式为例:
--- Prompt: """[Round 0] 问:你好,你能帮我解答一个问题吗? 答:当然,请问有什么问题? [Round 1] 问:我想了解人工智能的未来发展方向,你有什么想法吗? 答:人工智能在未来的发展方向可能包括更强大的机器学习算法,更先进的自然语言处理技术,以及更加智能的机器人。 [Round 2] 问:听起来很不错。人工智能可能在哪些方面面临挑战呢? 答:"""Complete: "人工智能面临的挑战包括数据隐私、安全和道德方面的问题,以及影响就业机会的自动化等问题。"
Claude 模型格式:
--- Prompt: """Human: I am going to give you a sentence and you need to tell me how many times it contains the word “apple”. For example, if I say “I would like a apple” then the answer is “1” because the word “apple” is in the sentence once. You can reason through or explain anything you’d like before responding, but make sure at the very end, you end your answer with just the final answer in brackets, like this: [1].Do you understand the instructions?Assistant: Yes, I understand. For a given sentence, I should count how many times the word "apple" occurs in the sentence and provide the count as my response in brackets. For example, given the input "I would like a apple", my response should be "[1]".Human: Here’s a sentence: <sentence>I ate one apple and then I ate another apple.</sentence> What is your answer?Assistant: The input sentence "I ate one apple and then I ate another apple." contains the word "apple" two times. Therefore, my answer is [2]Human: Here’s a sentence: <sentence>Apple Amy and Apple Adam came from an apple tree.</sentence> What is your answer?Assistant:"""Complete: """The input sentence "Apple Amy and Apple Adam came from an apple tree." contains the word "apple" four times. Therefore, my answer is: [4]"""
OpenAI 则推出了 ChatML 格式,其原始数据格式为:
Prompt: """<|im_start|>system You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible. Knowledge cutoff: 2021-09-01 Current date: 2023-03-01<|im_end|> <|im_start|>user How are you<|im_end|> <|im_start|>assistant I am doing well!<|im_end|> <|im_start|>user How are you now?<|im_end|>"""Complete: """{output}"""
参数高效微调方法 (Parameter-Efficient Fine-Tuning)
虽然指令微调相比于预训练更加高效(只需要处理微调数据集),但是全参数的指令微调依然需要消耗较多的算力。目前有多种高效参数微调方案,可以在实现和全参数微调相同性能的情况下,大幅降低微调成本。
参数高效微调,也称为 PEFT,可以仅微调少量或者额外的模型参数,并固定住大部分预训练参数,从而大大降低训练成本。目前研究表明,PEFT 相比于全参数微调,在没有微调过的大语言模型上性能略差,但是在已经微调过的模型上,性能接近。
PEFT 方法可以分为三类,不同的方法对模型的不同部分进行下游任务的适配:
- Prefix/Prompt-Tuning:在模型的输入或隐层添加 k 个额外可训练的前缀 tokens(这些前缀是连续的伪 tokens,不对应真实的 tokens),只训练这些前缀参数;
- Adapter-Tuning:将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数;
- LoRA4:通过学习小参数的低秩矩阵来近似模型权重矩阵 W 的参数更新,训练时只优化低秩矩阵参数。
目前针对大语言模型,评测效果最好的是 LoRa。其基本原理是在原始预训练权重旁边增加一个旁路,做一个降维再升维的操作k。训练的时候固定预训练权重,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将B/A与预训练权重的参数叠加。实际微调过程中,A/B 基本在MB级别,与之相比,大语言模型的权重通常在GB级别。
图4:Lora 微调原理
对齐微调
大语言模型在多个自然语言处理任务上展示出了惊人 的能力。但是, 这些模型有时可能表现出意外的行为,例如制造虚假信息、追求不准确的目标,以及产生有害的、误导性的和偏见性的表达。对于 LLM, 语言建模目标通过单词预测对模型参数进行预训练,但缺乏对人类价值观或偏好的考虑。为了避免这些意外行为,研究提出了人类对齐,使大语言模型行为能够符合人类的期望。但是, 与初始的预训练和适应微调(例如指令微调)不同, 语言模型的对齐需要考虑不同的标准(例如有用性, 诚实性和无害性)。 已有研究表明对齐微调可能会在某种程度上损害大语言模型的通用能力,这在相关研究中被称为对齐税。
对齐标准
- 有用性:简明扼要且高效的方式帮助用户解决任务或回答问题。在更高层次上,当需要进一步澄清时,大语言模型应展示出通过相关提问获取额外相关信息的能力,并表现出合适的敏感度、洞察力和审慎程度。
- 诚实性:应该向用户提供准确的内容,而不会捏造信息。此外,大语言模型在输出时传达适当程度的不确定性至关重要,以避免任何形式的欺骗或信息误传。这需要模型了解其能力和知识水平(即所谓的“知道自己不知道”)。
- 无害性:模型生成的语言不得具有冒犯性或歧视性,同时不能生成违反法律法规以及道德规范的有害信息。
基于人类反馈的强化学习(RLHF)
通过 RLHF,大模型可以根据人类反馈进行强化学习,从而和人类对齐。典型步骤如下图。
图5:基于人类反馈的强化学习1
分为三个步骤:
- 监督微调(可选):为了使 LM(语言模型) 具有初步执行所需行为的能力,通常需要收集一个包含输入提示(指令)和所需输出的监督数据集,以对 LM 进行微调。这些提示和输出可以由人工标注人员针对某些特定任务编写,同时确保任务的多样性。例如,InstructGPT 要求人工标注者编写提示(例如,“Listfive ideas for how to regain enthusiasm for my career”)和一些生成式任务(如开放域问答、头脑风暴、聊天和重写)的期望输出。
- 训练奖励模型:第二步是使用人类反馈数据训练 RM(奖励模型)。具体来说,使用 LM 使用采样提示(来自监督数据集或人工生成的提示)作为输入来生成一定数量的输出文本,然后邀请人工标注员为这些对标注偏好。标注过程可以以多种形式进行,常见的做法是对生成的候选文本进行排序标注,这样可以减少标注者之间的不一致性。然后,需要训练 RM 预测人类偏好的输出。在 InstructGPT 中,标注员将模型生成的输出从最好到最差进行排名,然后训练 RM(即 6B 参数量的 GPT-3)来预测排名。
- 在实践中,目前可以使用 GPT-4 代替人类进行排序标注,从而降低人工标注成本。
- RL(强化学习) 微调:在这一步骤中,对齐(即微调)LM 被形式化为 RL 问题。在此设置中,预训练的 LM 作为策略,将提示作为输入并返回输出文本,它的动作空间是 LM 的词表,状态是当前生成的 token 序列,奖励由 RM 生成。为了避免显着偏离初始(调整前)LM,通常将惩罚项纳入奖励函数。例如,InstructGPT 使用 PPO 算法针对 RM 优化 LM。对于每个输入提示,InstructGPT 计算当前 LM 和初始 LM 生成的结果之间的 KL 散度作为惩罚。值得注意的是,第二步和最后一步可以多次迭代来更好地对齐 LLM。
RLHF 实践
目前开源模型中,主要使用指令微调,应用 RLHF 的较少。已知的例子:
- ChatGLM-Efficient-Tuning: 训练奖励模型时,使用了 GPT-4 和 GPT-3.5 产生的对比数据作为监督,没有使用人工标注的对比数据。
- StableVicuna: 奖励模型基于 OpenAssistant Conversations Dataset (OASST1)、 Anthropic HH-RLHF、 Stanford Human Preferences Dataset 数据集训练。
- OASST1 数据集为对话提供 Rank 评分。
- Anthropic HH-RLHF 数据集格式:
{"chosen": "xxxx", "rejected": "yyyy"}
,分别代表正向和负向反馈。 - SHP 数据集 每个示例都是一个Reddit帖子,其中包含一个问题/指令以及该帖子的一对顶级评论,其中一个评论被Reddit用户(集体)更喜欢。SHP利用了这样一个事实:如果A评论写在B评论之后但得分却更高,则可以认为A比B更受欢迎。如果A先于B编写,则我们无法得出此结论,因为其较高的分数可能是可见性更高所致。我们选择意图反映哪个响应更有帮助而不是哪个响应更少有害作为首要标签的数据。
- 评价:Reddit 帖子是否适合LLM,存疑
可以看到 RLHF 极其依赖标注良好的数据集。
微调实战
接下来,我们以 ChatGLM-6B 中文模型为例,通过 Lora 微调修改其自我认知,预期目标:
问:你是谁?
答:我叫ChatGLM-6B,是一个由呱唧于2023年独立训练和开发的人工智能助手。我的主要目标是协助用户解决问题和满足他们的需求。
我们使用 ChatGLM-Efficient-Tuning 库对 ChatGLM-6B 进行 Lora 微调:
- 下载和配置 ChatGLM-Efficient-Tuning 库
git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git conda create -n chatglm_etuning python=3.10 conda activate chatglm_etuning cd ChatGLM-Efficient-Tuning pip install -r requirements.txt
- 产生数据集:
sed -i 's/[NAME]/呱唧/g' data/self_cognition.json
。该数据集包含了 18 条关于模型自我认知的数据,我们的目标是修改模型自身的知识,使模型给出我们希望的答复。使用18条是通过各种方式让大模型学习,如果条数过少则训练效果很差。示例如下:
[{"instruction": "你身份是什么?","input": "","output": "我叫ChatGLM-6B,是一个由[NAME]于2023年独立训练和开发的人工智能助手。我的主要目标是协助用户解决问题和满足他们的需求。"},{"instruction": "你的身份信息能告诉我吗?","input": "","output": "当然可以,我是ChatGLM-6B,一个由[NAME]创建的人工智能助手。我在2023年研发完成,旨在为用户提供有针对性的回答和帮助。"} ]
- 运行以下命令在单个 GPU 上进行模型监督微调。我们使用 self_cognition 数据集,采用 lora 微调方法,微调后的模型保存在 cognition 文件夹中。为了保证模型微调成功,我们采用 0.001 的学习率,在数据集上训练 10 个 epoch。
CUDA_VISIBLE_DEVICES=0 python src/finetune.py \--do_train \--dataset self_cognition \--finetuning_type lora \--output_dir cognition \--overwrite_cache \--per_device_train_batch_size 2 \--gradient_accumulation_steps 2 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--warmup_steps 0 \--learning_rate 1e-3 \--num_train_epochs 10.0 \--fp16
- 运行以下命令在单个 GPU 上测试模型效果,它会加载
cognition
文件夹内保存的微调模型权重,并合并进原版 ChatGLM 模型的参数权重中,同时启动流式交互窗口
CUDA_VISIBLE_DEVICES=0 python src/infer.py \--checkpoint_dir cognition
参考资料
相关项目
- LMFlow : 一个可扩展、方便和高效的工具箱,用于微调大型机器学习模型。支持所有 Decoder 模型的微调。
- FastChat: FastChat is an open platform for training, serving, and evaluating large language model based chatbots.
- PEFT: 参数高效微调工具库。支持 LoRA、Prefix Tuning、P-Tuning、Prompt Tuning、AdaLoRA等方法。
- LLM-Adapters: 对 PEFT 的扩展,支持AdpaterP、AdpaterH、Parallel 等方法。
- ChatGLM-6B: 清华开源中文大模型,及微调训练工具库。
- ChatGLM-Efficient-Tuning: 对 ChatGLM-6B 进行参数高效微调。
- LLMZoo: Phoenix-inst-chat-7b 中文模型(基于BLOOMZ)及微调训练工具库。
- BELLE: 基于 LLaMA 的中文模型及微调训练工具库。
- Linly: 基于 LLaMA 使用中文增量预训练以及微调训练的中文模型。
- Chinese-LLaMA-Alpaca: 基于 LLaMA 使用中文增量预训练以及微调训练的中文模型。
参考文献
Footnotes
-
Zhao, Wayne Xin, Kun Zhou, Junyi Li, Tianyi Tang, Xiaolei Wang, Yupeng Hou, Yingqian Min, et al. “A Survey of Large Language Models.” arXiv, May 7, 2023. [2303.18223] A Survey of Large Language Models. 本文主要参考,同时该论文提供中文版本。 ↩ ↩2 ↩3 ↩4
-
Yang, Jingfeng, Hongye Jin, Ruixiang Tang, Xiaotian Han, Qizhang Feng, Haoming Jiang, Bing Yin, and Xia Hu. “Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond.” arXiv, April 27, 2023. [2304.13712] Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond. ↩
-
Ouyang, Long, Jeff Wu, Xu Jiang, Diogo Almeida, Carroll L. Wainwright, Pamela Mishkin, Chong Zhang, et al. “Training Language Models to Follow Instructions with Human Feedback.” arXiv, March 4, 2022. [2203.02155] Training language models to follow instructions with human feedback. ↩
-
Hu, Edward J., Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. “LoRA: Low-Rank Adaptation of Large Language Models.” arXiv, October 16, 2021. [2106.09685] LoRA: Low-Rank Adaptation of Large Language Models. ↩
相关文章:

大语言模型(LLM)微调技术笔记
图1:大模型进化树2 大模型微调 在预训练后,大模型可以获得解决各种任务的通用能力。然而,越来越多的研究表明,大语言模型的能力可以根据特定目标进一步调整。 这就是微调技术,目前主要有两种微调大模型的方法1&…...

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战
欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化? 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…...

NLP的预处理数据
处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型,重要的是使用与之关联的…...
【DeepSeek问答】QProcess::start是异步的吗?会使UI卡顿吗?
好的,我现在需要回答用户关于QProcess::start是否是异步的,以及它是否会导致UI卡顿的问题。用户之前已经询问过如何开发一个调用7-Zip的Qt应用,并且我给出了示例代码。现在用户可能在使用过程中遇到了问题,或者想更深入了解QProce…...

【Java项目】基于Spring Boot的体质测试数据分析及可视化设计
【Java项目】基于Spring Boot的体质测试数据分析及可视化设计 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:体质测试数据分析及可视化设计是一个基于Web的在线平台,主要分为前台和后台两大功能模块。前台功能模…...

JAVA-如何理解Mysql的索引
一、索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用(指针/地址)。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 二、索引是什么,用来干嘛 数据库中的表、数据、索引之间的…...

VUE向外暴露文件,并通过本地接口调用获取,前端自己生成接口获取public目录里面的文件
VUE中,如果我们想对外暴露一个文件,可以在打包之后也能事实对其进行替换,我们只需要把相关文件放置在public目录下即可,可以放置JSON,Excel等文件 比如我在这里放置一个other文件 我们可以直接在VUE中使用axios去获取…...

京准电钟:NTP精密时钟服务器在自动化系统中的作用
京准电钟:NTP精密时钟服务器在自动化系统中的作用 京准电钟:NTP精密时钟服务器在自动化系统中的作用 NTP精密时钟服务器在自动化系统中的作用非常重要,特别是在需要高精度时间同步的场景中。NTP能够提供毫秒级的时间同步精度,这…...

CSDN年度评选揭晓,永洪科技AI技术与智能应用双星闪耀
近日,永洪科技在CSDN(中国专业开发者社区)的年度评选中,凭借在人工智能技术创新与vividime在行业应用中的卓越表现,一举斩获“人工智能企业”及“智能应用”双料大奖。这一荣誉不仅彰显了永洪科技在AI领域的领先地位&a…...

vscode settings(二):文件资源管理器编辑功能主题快捷键
参考资料 Visual Studio Code权威指南 by 韩骏 一. 文件资源管理器 1.1 文件资源管理器隐藏文件夹 默认情况下,Visual Studio Code会在文件资源管理器中隐藏一些文件夹(如.git文件夹)。可以通过files.exclude来配置要被隐藏的文件和文件…...

Ubuntu本地使用AnythingLLM
1.介绍 AnythingLLM是一个全栈应用程序,由Mintplex Labs Inc.开发,旨在将任何文档、资源或内容片段转换为大语言模型(LLM)在聊天中可以利用的相关上下文。 2.在ubuntu本地安装 打开终端并运行: curl -fsSL https:/…...

MybatisPlus-注解
TableName设定表名 1. MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决 定,且默认操作的表名和实体类型的类名一致 2. 若实体类类型的类名和要操作的表的表名不一致,访问数据库表将会报错 3. 在实体类上添加…...

【多模态大模型学习】位置编码的学习记录
【多模态大模型学习】位置编码的学习记录 0.前言1. sinusoidal编码1.0 数学知识——复数1.0.1 复数乘法、共轭复数1.0.2 复数的指数表示 1.1 sinusoidal编码来历1.2 代码实现 2. Rotary Positional Embedding (RoPE) ——旋转位置编码2.1 RoPE来历2.2 代码实现2.2.1 GPT-J风格的…...

在MAC上面通过HomeBrew安装node和npm@指定版本
文章目录 搜索可用的 Node.js 版本安装指定版本的 Node.js将 node22 添加到 PATH验证安装是否成功给npm配置淘宝镜像 搜索可用的 Node.js 版本 liujinglong192 ~ % brew search node > Formulae libbitcoin-node node-build node20 nodeenv linod…...

基于YOLO11深度学习的医学X光骨折检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

HDFS扩缩容及数据迁移
1.黑白名单机制 在HDFS中可以通过黑名单、白名单机制进行节点管理,决定数据可以复制/不可以复制到哪些节点。 黑名单通常是指在HDFS中被标记为不可用或不可访问的节点列表,这些节点可能由于硬件故障、网络问题或其他原因而暂时或永久性地无法使用。当一…...
【2025信息安全软考重点考点归纳】实时更新
重点页:第14章 恶意代码防范技术原理 页码:271 病毒载体及其对应案例 病毒隐秘载体病毒案例Word文档Melissa照片库尔尼科娃电子邮件“求职信”病毒网页NIMDA病毒 重点页:第6章 认证技术原理与应用 页码:125 Kerberos 认证技术 Kerberos是…...
在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践
在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践 大家好,我是Echo_Wish。今天我们来聊一聊如何在生产环境中部署和管理 PostgreSQL。作为一种广泛使用的开源数据库,PostgreSQL 因其强大的功能和灵活性,成为许多开发者和运维人员的首选数据库。无论是在小型应用还是…...

使用OpenCV实现帧间变化检测:基于轮廓的动态区域标注
在计算机视觉中,帧间差异检测(frame differencing)是一种常用的技术,用于检测视频流中的动态变化区域。这种方法尤其适用于监控、运动分析、目标追踪等场景。在这篇博客中,我们将通过分析一个基于OpenCV的简单帧间差异…...
rabbitmq单向ssl认证配置与最佳实践(适用于各大云厂商)
背景 这里后补直接上代码 最佳实践 主要从两个方面保证消息不丢失 RabbitMQ方面 创建队列时开启持久化创建交换器时开启持久化创建镜像队列(可选)开启延迟队列(可选) 代码层面 开启生产者到交换器回调参数开启交换器到队列…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...