【LLM】3:从零开始训练大语言模型(预训练、微调、RLHF)

一、 大语言模型的训练过程

在这里插入图片描述

  1. 预训练阶段:PT(Pre training)。使用公开数据经过预训练得到预训练模型,预训练模型具备语言的初步理解;训练周期比较长;
  2. 微调阶段1:SFT(指令微调/有监督微调)。如果想要预训练模型在某个垂直领域(金融、法律、电商等)有更好的知识储备,就需要使用人工标注的QA问答对进行有监督的微调训练,从而得到精调模型;训练周期较短;
  3. 微调阶段2:对齐/强化训练。精调模型的输出并不是全部都令人满意的,我们还需要让模型知道回复的接受度。可以在运行日志中收集对齐数据,包含【问题,接受的回复,不接受的回复】,再进行对齐训练,得到最后可使用的模型;

二、 预训练

2.1、 预训练数据

目的:构建一个多样化、高质量的预训练语料库,为模型提供语言知识

  • 数据来源:从公开的数据集(如Common Crawl、Wikipedia、BooksCorpus)中获取文本数据。确保数据包含多种类型(如对话、新闻、小说、百科等),以提高模型的适用性;
  • 数据清洗:去除HTML标签、无意义字符、重复句子等。清洗过程中要特别注意去掉垃圾数据,以保证语料库的质量;
  • 分词与标志化:将数据按单词或子词进行分割。大部分大语言模型使用子词级别的标记化算法(如BPE、WordPiece、SentencePiece),因为它可以提高词汇表覆盖度并减少OOV(Out of Vocabulary)词的出现;
  • 词汇表生成:根据分词后的语料生成词汇表。词汇表大小根据模型大小调整,通常在3万到5万之间;
  • 数据格式:将标记化的数据保存成方便训练的格式(如TFRecord、HDF5),同时包含输入和输出标记以供训练时使用;

2.2、 模型架构选择

目标:定义大语言模型的结构,包括层数、隐藏单元大小、注意力头数等。

选择模型类型:根据任务选择模型架构,例如:

  • GPT类(自回归):适合顺序生成任务:聊天;
  • BERT类(自编码):适合文本理解任务:实体命名;
  • T5、BART等(编码-解码):兼顾生成和理解任务。

超参设计

  • 层数:通常在6层到24层,甚至更多;
  • 隐藏层维度:常见的选择是512、1024、2048等;
  • 注意力头数:可以选4、8、16头等,头数越多注意力计算越细致;
  • 词嵌入层和位置嵌入层:在每个输入标记中嵌入位置编码,用于帮助模型理解序列顺序。

初始化策略:采用适合深度网络的参数初始化方法(如Xavier、He初始化)以避免梯度消失或爆炸。

2.3、训练前准备

目标:配置训练硬件和分布式计算环境,优化数据加载和模型更新效率。

  • 硬件配置:大模型训练需要大量计算资源,建议使用多GPU集群或TPU集群;确保显存足够容纳模型参数和批量数据。
  • 分布式训练:采用数据并行或模型并行策略(如Megatron-LM、DeepSpeed)以提升训练速度。要确保数据加载的高效性和设备间的通信速度。
  • 优化器选择:一般选择Adam或AdamW优化器,针对大模型训练的优化方法(如LAMB、LARS)也可以提高效率。
  • 学习率调度:选择合适的学习率调度策略,如Warmup、Cosine Decay、Polynomial Decay等;在训练初期采用小学习率,以稳定模型更新。

2.4、 正式训练

目标:根据语言建模任务定义训练目标,使用反向传播优化模型参数。

  • 损失函数:大多数大语言模型的预训练目标是自回归语言建模填充式语言建模,两者都依赖于交叉熵损失函数 (Cross-Entropy Loss) 来优化模型参数,计算模型预测的概率分布和目标分布之间的误差。
  • 梯度累积:对于大模型,可以使用梯度累积来模拟更大的批次,从而节省显存开销。
  • 混合精度训练:采用FP16(半精度浮点数)进行训练,降低内存占用并加速计算。
  • 监控与日志记录:记录训练损失、精度、学习率、梯度大小等;可以借助TensorBoard或WandB监控训练进展。
  • 定期保存检查点:定期保存模型检查点,确保即使训练中断也可以从最新进度恢复。

2.5、 评估与验证

目标:评估模型在验证集上的表现,确保模型未出现过拟合或欠拟合。

  • 验证集构建:从原始语料中划分出一部分作为验证集,保持数据分布与训练集一致。
  • 评估指标:使用困惑度(Perplexity,PPL)等指标,评估模型生成内容的连贯性和准确性。
  • 调优超参数:根据验证集上的表现,调节学习率、批次大小、正则化等超参数。

2.6、 后处理与保存

目标:对训练好的模型进行优化和保存,方便后续使用和部署。

  • 模型剪枝与量化:通过模型剪枝(去除冗余参数)和量化(如8位或混合精度量化)来减少模型大小、提升推理效率。
  • 保存模型:将训练好的模型权重、词汇表等保存成可加载格式(如PyTorch的.pt或TensorFlow的SavedModel格式)。
  • 模型测试:在实际下游任务上测试模型生成和理解能力,确保模型可以在推理时高效工作

2.7、 模型部署

目标:将训练好的模型集成到应用中,提供生成或理解任务的服务。

  • 推理优化:通过ONNX、TensorRT等工具优化推理速度,降低延迟。
  • 部署平台:可以选择部署在云平台(如AWS、GCP)、本地服务器或边缘设备,根据应用场景选择合适的架构。

三、 指令微调

3.1、微调数据

微调模型时使用的数据类型应与目标应用场景紧密相关,数据的具体类型取决于任务要求。以下是几种常见的微调数据类型及示例:

  1. 问答数据:适用于客服问答系统、知识库系统;
{"question": "如何重置我的密码?","answer": "请前往设置页面,选择“安全设置”,然后点击“重置密码”按钮,按提示操作即可。"
},
{"question": "你们的退款政策是什么?","answer": "在购买后的30天内,符合条件的订单可申请全额退款。"
}
  1. 对话数据:适用于聊天机器人、客户服务、智能助理
[{"role": "user", "content": "你们的营业时间是几点?"},{"role": "assistant", "content": "我们每天早上9点到晚上9点营业,周末时间相同。"}
],
[{"role": "user", "content": "今天有什么优惠活动?"},{"role": "assistant", "content": "本周有会员双倍积分活动,消费满100元还可享9折优惠。"}
]
  1. 分类数据:情感分析、意图识别、文本分类任务
{"text": "这个产品的质量真差,下次不会再买了!","label": "负面"
},
{"text": "客服服务很好,很满意!","label": "正面"
}
  1. 生成任务数据:适用于内容生成、摘要生成、翻译等任务
{"prompt": "请写一封申请信用卡的邮件","completion": "尊敬的银行工作人员:\n您好!我想申请一张信用卡,希望能获得适合我的信用额度。感谢您的帮助!"
},
{"prompt": "产品描述:请简要描述这款运动手表的功能","completion": "这款运动手表具有心率监测、GPS定位、步数计算和防水功能,是运动爱好者的理想选择。"
}
  1. 指令式数据:适用于对话式AI助理、智能客服、内容推荐
{"instruction": "给出3个关于如何提高生产力的建议。","output": ["每天制定一个合理的工作计划。","避免长时间分心,集中精力处理手头任务。","使用任务管理工具追踪进度。"]
},
{"instruction": "解释一下什么是机器学习。","output": "机器学习是一种让计算机通过数据自动学习和改进的方法,不需要人为编程。"
}
  1. 知识图谱或事实数据:适用于事实问答系统、知识性内容生成
{"entity": "爱因斯坦","facts": [{"fact": "出生日期", "value": "1879年3月14日"},{"fact": "国籍", "value": "德国"},{"fact": "主要成就", "value": "相对论"}]
},
{"entity": "太阳系","facts": [{"fact": "行星数量", "value": "8"},{"fact": "最大行星", "value": "木星"},{"fact": "距银河系中心的距离", "value": "约2.7万光年"}]
}

3.2、任务类型、损失函数、评估指标

任务类型:

  1. 生成任务:如对话生成、文章续写等,模型的目标是生成连贯的文本。
  2. 分类任务:如情感分析、意图识别等,模型需要在每个输入上输出特定类别。
  3. 问答任务:针对用户提出的问题,生成相关回答。

损失函数选择:

  • 交叉熵损失:分类任务通常使用交叉熵损失,评估模型生成的词分布与目标词的匹配度。
  • KL散度:通常用于生成模型,评估两个概率分布的相似性;
  • 定制损失:如果有特定需求,也可以根据任务要求设计损失函数,增加正则化或加权方式等。

评估指标:

  • 困惑度 (Perplexity, PPL):适用于生成任务,评估生成文本的质量。
  • 准确率 (Accuracy):适用于分类任务,评估标签预测的准确度。
  • BLEU/ROUGE:适用于文本生成任务,评估生成文本与参考文本的相似度。
  • F1、召回率:适用于多分类或不平衡数据任务,问答任务或情感分析任务。

3.3、代码

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments
from datasets import load_dataset, Dataset# Step 1: 加载预训练模型和分词器
model_name = "your_pretrained_model"  # 预训练模型名称
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)# Step 2: 加载私域数据集(假设为JSON格式)
# 私域数据的格式为 [{"input": "input text", "target": "target text"}]
data_path = "path_to_your_data.json"  # 数据文件路径
raw_datasets = load_dataset("json", data_files=data_path)# Step 3: 数据预处理
def preprocess_function(examples):# 将输入和目标文本编码为模型可以理解的token形式inputs = tokenizer(examples['input'], padding="max_length", truncation=True, max_length=128)targets = tokenizer(examples['target'], padding="max_length", truncation=True, max_length=128)# 创建labels,将target部分作为训练目标inputs["labels"] = targets["input_ids"]return inputs# 使用map函数对数据集进行预处理
tokenized_datasets = raw_datasets.map(preprocess_function, batched=True)# Step 4: 配置训练参数
training_args = TrainingArguments(output_dir="./finetuned_model",  # 模型保存路径evaluation_strategy="epoch",learning_rate=5e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,logging_dir="./logs",logging_steps=10,save_strategy="epoch",save_total_limit=2,
)# Step 5: 初始化Trainer并微调模型
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets['train'],eval_dataset=tokenized_datasets['test'] if 'test' in tokenized_datasets else None,
)# 开始训练
trainer.train()# Step 6: 保存微调后的模型
model.save_pretrained("./finetuned_model")
tokenizer.save_pretrained("./finetuned_model")print("模型微调完成并保存至 ./finetuned_model")

3.4、大模型微调建议

模型结构:

  • 模型结构+训练目标: Causal Decoder + LM、有很好的zero-shot和few-shot能力,涌现效应
  • layer normalization: 使用Pre RMS Norm
  • 激活函数: 使用GeLU或SwiGLU
  • embedding层后不添加layer normalization,否则会影响LLM的性能
  • 位置编码: 使用ROPE或ALiBi。ROPE应用更广泛
  • 去除偏置项:去除dense层和layer norm的偏置项,有助于提升稳定性

训练配置:

  • batch: 选用很大的batch size; 动态地增加batch size的策略,GPT3逐渐从32K增加到3.2M tokens。
  • 学习率调度:先warmup再衰减。学习率先线性增长,再余弦衰减到最大值的10%。最大值一般在5e-5到1e-4之间。
  • 梯度裁剪:通常将梯度裁剪为1.0。
  • 权重衰减: 采用AdamW优化器,权重衰减系数设置为0.1Adamw相当于Adam加了一个L2正则项
  • 混合精度训练:采用bfloat16,而不是foat16来训练。

训练崩溃挽救:

  • 选择一个好的断点,跳过训练崩溃的数据段,进行断点重训。选择一个好的断点的标准:损失标度lossscale>0;梯度的L2范数<一定值 && 波动小

四、 人类反馈强化学习RLHF

人类反馈强化学习(RLHF, Reinforcement Learning from Human Feedback)

  • 目的:是使用人类反馈强化模型对话的质量和合规性,使其回答更自然、准确且符合伦理,也叫奖励模型训练或强化学习过程。
  • 方法:构建奖励模型并使用它来调整生成模型的输出。通常涉及三个步骤:人类生成数据反馈、奖励模型训练、PPO算法(策略优化)训练。
  • 工具:需要一定的标注人员提供人类反馈,OpenAI等方法中使用PPO(Proximal Policy Optimization)算法。

4.1、 人类生成数据反馈

  1. 采样生成数据:模拟真实的对话场景,让预训练模型根据预设任务和指令生成多条不同的回复。
  2. 构建评分体系:建立标准的评分准则,常见的评价维度包括:准确性、相关性、自然性、简介性,让人类标注员从多个维度来评价模型输出的质量,可以用分数(如1-5分)或“优劣”排序来标注。
  3. 优选与排序:要求标注员对多个模型输出进行排序,以选择最符合用户期望的回复。可以采用成对比较的方式,即给定两条回复,让标注员选择较好的一个。

示例 1:问答任务

输入:
“火星与地球相比有何不同?”模型输出:
火星的重力比地球低、气温更低,且大气主要由二氧化碳组成。
火星是一个有红色表面的星球,但地球有生命和大量水。
火星比地球小,没有适合人类生存的大气。人类反馈:
准确性:输出 1 得分 5/5,输出 2 得分 3/5,输出 3 得分 4/5。
相关性:输出 1 得分 5/5,输出 2 得分 2/5(提及地球和水,但无关主题),输出 3 得分 4/5。
排序:1 > 3 > 2

示例 2:情感分析任务

输入:
“我觉得这次旅行很糟糕,遇到的每件事都令人失望。”模型输出:
情感:负面
情感:正面
情感:中性
人类反馈:准确性:输出 1 得分 5/5(准确反映了消极情绪),输出 2 得分 1/5(与情感明显不符),输出 3 得分 2/5(偏离原意)。
排序:1 > 3 > 2

示例 3:产品推荐任务

输入:
“我在寻找一款轻便耐用的旅行背包,有推荐吗?”模型输出:
建议选择30L的轻便背包,款式多样且适合短途旅行。
推荐X品牌的登山包,非常耐用且轻便。
旅行背包款式众多,推荐考虑容积和耐用性。
人类反馈:准确性:输出 2 得分 5/5(具体推荐了品牌),输出 1 得分 4/5(描述具体,但无品牌推荐),输出 3 得分 3/5(没有实际推荐)。
排序:2 > 1 > 3

4.2、奖励模型训练

数据准备:奖励模型的数据一般有三个部分:输入、输出、评分的格式,例如如下数据:

# 示例数据格式
training_data = [{"input": "火星与地球相比有何不同?","outputs": [{"response": "火星的重力比地球低...", "score": 5},{"response": "火星是一个有红色表面...", "score": 3},{"response": "火星比地球小,没有适合人类生存...", "score": 4}]},{"input": "我觉得这次旅行很糟糕,遇到的每件事都令人失望。","outputs": [{"response": "情感:负面", "score": 5},{"response": "情感:正面", "score": 1},{"response": "情感:中性", "score": 2}]},# 更多样例...
]

构建奖励模型:奖励模型通常基于预训练语言模型(如GPT、BERT),并在其基础上添加一个奖励预测层。这个层的输出是模型对给定输入-输出对的评分预测。

import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer# 使用预训练模型作为奖励模型基础
model_name = "bert-base-uncased"  # 可根据需求选择模型
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=1)  # 设置单一输出(奖励分数)
tokenizer = AutoTokenizer.from_pretrained(model_name)

准备训练数据,生成奖励分数,将输入和模型输出对进行标记转换,以训练奖励模型预测分数。

def preprocess_data(training_data):inputs, scores = [], []for item in training_data:input_text = item["input"]for output in item["outputs"]:response = output["response"]score = output["score"]# 将输入和输出连接,作为奖励模型的输入combined_input = f"输入: {input_text} 输出: {response}"inputs.append(combined_input)scores.append(score)return inputs, scores# 生成输入文本和奖励分数
inputs, scores = preprocess_data(training_data)
# 进行tokenization
tokenized_inputs = tokenizer(inputs, padding=True, truncation=True, return_tensors="pt")
labels = torch.tensor(scores).float()  # 奖励分数标签

训练奖励模型:通过监督学习训练奖励模型,使其预测的奖励分数与人类评分接近。损失函数可以采用均方误差(MSE),因为我们希望奖励模型的输出值与人类评分之间的误差最小

from torch.utils.data import DataLoader, TensorDataset
from transformers import AdamW# 创建DataLoader
dataset = TensorDataset(tokenized_inputs["input_ids"], tokenized_inputs["attention_mask"], labels)
dataloader = DataLoader(dataset, batch_size=8, shuffle=True)# 设置优化器
optimizer = AdamW(model.parameters(), lr=5e-5)# 训练循环
model.train()
epochs = 3
for epoch in range(epochs):total_loss = 0for batch in dataloader:input_ids, attention_mask, label = batchoutputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=label)loss = outputs.losstotal_loss += loss.item()# 反向传播和参数更新loss.backward()optimizer.step()optimizer.zero_grad()print(f"Epoch {epoch + 1} - Loss: {total_loss / len(dataloader)}")

奖励模型训练完成后,将其应用到生成模型的强化学习环节。例如,通过强化学习算法(如PPO)更新生成模型,使其生成的输出逐渐朝着奖励模型给高分的方向优化。具体来说,生成模型每次生成输出后,奖励模型会评估输出质量,生成模型根据奖励反馈调整生成策略,从而生成更加符合人类偏好的内容

4.3、 PPO算法(策略优化)训练

代码步骤概述:

  1. 设置生成模型和奖励模型:加载生成模型(如GPT)和奖励模型(可以是微调过的BERT)。
  2. 实现PPO训练:为生成模型的输出提供奖励反馈。
  3. 更新生成模型:根据奖励值和策略更新生成模型。

设置生成模型和奖励模型

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, AutoModelForSequenceClassification# 加载生成模型(例如,GPT-2)
gen_model_name = "gpt2"
gen_model = AutoModelForCausalLM.from_pretrained(gen_model_name)
gen_tokenizer = AutoTokenizer.from_pretrained(gen_model_name)# 加载已经训练好的奖励模型(例如,BERT)
reward_model_name = "bert-base-uncased"  # 根据实际选择
reward_model = AutoModelForSequenceClassification.from_pretrained(reward_model_name)
reward_tokenizer = AutoTokenizer.from_pretrained(reward_model_name)

定义奖励函数
奖励函数用于评估生成模型的输出质量。将输入文本和生成的响应传递给奖励模型,得到分数并作为奖励信号返回。

def compute_reward(input_text, generated_text):# 将输入和输出拼接成奖励模型的输入格式combined_input = f"输入: {input_text} 输出: {generated_text}"# 对拼接输入进行tokenizationinputs = reward_tokenizer(combined_input, return_tensors="pt", truncation=True, padding=True)# 通过奖励模型计算分数(输出的logits用于评分)with torch.no_grad():reward_score = reward_model(**inputs).logits.squeeze().item()return reward_score

训练循环 - PPO 更新
通过策略梯度方法逐步更新生成模型的参数,PPO的关键点:

  • 奖励计算:利用奖励模型给生成的文本打分,分数越高代表生成效果越好。
  • 优势计算:在PPO中,我们用奖励减去当前策略的log_probs均值,来估计策略的相对优势。
  • 策略更新:PPO主要通过限制更新步长来避免策略的剧烈变化,通常通过优势函数和log概率的乘积来调整生成模型的策略。
from transformers import AdamW
import numpy as np# 超参数设置
ppo_epochs = 5
batch_size = 8
learning_rate = 5e-5# 优化器
optimizer = AdamW(gen_model.parameters(), lr=learning_rate)# PPO训练过程
gen_model.train()
for epoch in range(ppo_epochs):for batch in range(batch_size):# Step 1: 采样输入input_text = "火星与地球相比有何不同?"  # 示例输入,可以改成实际数据的batchinput_ids = gen_tokenizer(input_text, return_tensors="pt").input_ids# Step 2: 生成输出generated_outputs = gen_model.generate(input_ids, max_length=50)generated_text = gen_tokenizer.decode(generated_outputs[0], skip_special_tokens=True)# Step 3: 计算奖励reward = compute_reward(input_text, generated_text)# Step 4: 计算PPO损失outputs = gen_model(input_ids=input_ids, labels=generated_outputs)logits = outputs.logitslog_probs = torch.nn.functional.log_softmax(logits, dim=-1)# 计算优势函数(假设reward即优势)# 可以加入熵正则化项来鼓励探索advantages = reward - log_probs.mean().item()# 计算损失ppo_loss = -advantages * log_probs.mean()ppo_loss.backward()# 参数更新optimizer.step()optimizer.zero_grad()print(f"Epoch {epoch + 1}/{ppo_epochs} - PPO Loss: {ppo_loss.item()}")

这份代码是一个基本的实现,可以进一步在以下方面进行改进:

  • 批量化处理:为提高效率,使用批量数据进行生成和奖励计算。
  • 熵正则化:加入熵项,以鼓励探索、提升生成模型的多样性。
  • 优势函数:采用更加复杂的优势计算方法,如引入值函数基线,进一步提高PPO训练的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11574.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云双11优惠大揭秘:省钱攻略不容错过!

文章目录 1 云服务来袭2 新手大礼包3 轻量应用服务器来袭4 腾讯云福利来袭5 福利代金券来袭 1 云服务来袭 云服务器能够灵活地提供计算和存储资源&#xff0c;帮助用户高效地应对信息技术需求&#xff0c;并保障数据的安全性。各大云服务商也因此纷纷推出多样化的优惠活动&…

皮卡超级壁纸 1.4.1 | 解锁会员版的全景壁纸、动态壁纸和超级壁纸

皮卡超级壁纸是一款提供海量壁纸的应用&#xff0c;不仅包含静态的精美壁纸&#xff0c;还提供了独特的超级壁纸。这些超级壁纸不仅仅是动态效果&#xff0c;还能自动匹配用户的手机UI&#xff0c;提供更加个性化的体验。解锁会员版后&#xff0c;用户可以享受更多高级功能和壁…

“绽放艺术风采、激发强国力量” 海南省第十一届中小学生艺术展演活动圆满开展

2024年11月1日&#xff0c;由省教育厅主办、琼台师范学院承办的海南省第十一届中小学生艺术展演省级展演活动在海口正式拉开帷幕。来自全省各市县、省属学校等共计4000余名师生参加本届中小学生艺术展演现场展演活动。 本届展演活动以“绽放艺术风采、激发强国力量”为主题&…

如何挑选靠谱的IP代理池?

嘿&#xff0c;寻觅一个靠谱的IP代理池就好比找到一双合脚的跑鞋&#xff0c;舒适性和耐用性缺一不可。IP代理池同样要支撑您在网络世界中“跑”得更快更远。所以&#xff0c;别急&#xff0c;我们来看看有哪些小妙招&#xff0c;教您挑选出最合适的IP代理池吧&#xff01; 看…

2024/11/10周报

文章目录 摘要GCNCNNGA混合模型预测进水水质代码运行结果 文献阅读题目研究背景与意义研究方法数据采集与预处理GCN–CNNGA混合深度学习框架的构建 模型优化与实验邻接矩阵的构建与效果分析模型预测效果对比多步预测性能 模型优势与应用前景精度提升与处理效率运营决策的优化支…

公司内部最好用的开源导航网站(EasyNav)

公司导航门户 一个现代化的企业内部导航门户系统&#xff0c;用于集中管理和展示公司各类系统和资源的链接。 项目地址&#xff1a;https://github.com/starslink/EasyNav体验地址&#xff1a;www.easynav.icu/ 功能特点 &#x1f510; 用户认证与授权邮箱注册与验证 JWT t…

pulsar源码--3-官方文档杂技

消息队列中间件会保存消息&#xff0c;直到收到消费者消费成功并确认&#xff0c;在此之后消息便可以删除&#xff0c;不过什么时候删除&#xff0c;由中间件自己决定 ack消息会一直储存&#xff0c;直到现有的所有订阅都确认了这条消息&#xff0c;在此之后如果要继续保存则需…

为什么一些工业厂房的配电箱和供电线路要安装ALP?

1、什么是ALP&#xff1f; ALP 低压线路保护装置是一种智能型电气保护设备&#xff0c;适用于额定电压至 AC660V、额定电流至 AC400A、额定频率为 50/60Hz 的低压系统。集保护、测量、控制、总线通讯为一体&#xff0c;是低压馈线终端的智能化综合装置。 2、功能特点 ①能够…

如何让 AI 更懂你:提示词的秘密

目录 前言常见概念大语言模型&#xff08;Large Language Model&#xff09;大模型输入常见参数提示词工程的限制 战略思想效果评测复杂任务拆解提示词结构化加示例加要求加维度 提示词框架 前言 小册推荐&#xff1a;https://juejin.cn/book/7399064580883742774 评估响应内…

特征值分解原理和实战

特征值分解&#xff08;Eigenvalue Decomposition&#xff09;是线性代数中的一种重要技术&#xff0c;用于分析矩阵的内在属性。这种分解方法主要适用于方阵&#xff08;即行数和列数相等的矩阵&#xff09;&#xff0c;用于将矩阵分解为其特征向量和特征值。 基本原理 假设 …

99人!关于第十八届中国青年科技奖拟表彰对象的公示!

本期精选SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 免费匹配…

cherno引擎课 -

感谢b站星云图形的翻译&#xff1a;【双语】【最佳游戏引擎教程实战】【入门】&#xff08;1&#xff09;&#xff1a;Introducing the GAME ENGINE series!_哔哩哔哩_bilibili Introducing the GAMEENGINE series 希望&#xff1a;它是一个制作(互动)3D实时渲染应用程序的引…

【自然资源】吉林一号卫星有关知识,你要了解

吉林一号卫星有关知识&#xff0c;你要了解 吉林一号商业卫星是中国第一套自主研发的商用遥感卫星星座&#xff0c;由长光卫星技术有限公司研制。 “吉林一号”商业卫星组星包括1颗光学遥感卫星、2颗视频卫星和1颗技术验证卫星&#xff0c;工作轨道均为高约650公里的太阳同步轨…

博图与Factory I/O结合实现运料小车自动往返四次控制

一、示例要求 按照上图所示完成运料小车的往返控制&#xff0c;由于对虚拟工厂中零件应用不熟悉&#xff0c;所以料斗门和小车底门都用M0.x代替完成&#xff1b;只对传送带有了解&#xff0c;因此此处借助传送带使得纸箱达到往返运动。 二、I/O分配表 类别元件I/O端口编号备注…

扩散模型和重新照明的未来

重新照明&#xff08;relighting&#xff09;是在给定输入场景的情况下&#xff0c;在指定的目标照明条件下渲染场景的任务。这是计算机视觉和图形学中的关键任务。然而&#xff0c;这是一个不适定问题&#xff0c;因为场景中物体的外观是由光源、几何形状和表面材料属性等因素…

想学习海量数据的管理方法?听这节课就够了

在大模型时代&#xff0c;由于模型规模的升级&#xff0c;需要处理的数据量也大幅增加&#xff0c;因此对数据管理提出了更高的要求。 首先&#xff0c;分布式存储系统对于企业来说至关重要&#xff0c;将数据分散存储在多个节点上&#xff0c;可以提高数据的访问速度和处理能…

Works With线上开发者大会将提供物联网行业深入的专业知识和技能

Silicon Labs2024年Works With线上开发者大会定于11月20日至21日举行&#xff0c;将汇集全球各地的物联网开发人员、设备制造商、无线技术专家、工程师和商业领袖&#xff0c;观众可免费注册参加。同时&#xff0c;为了方便中文观众&#xff0c;所有在线视频均配有中文字幕。 芯…

2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享

一、背景特殊医学用途配方食品简称特医食品&#xff0c;是指为满足进食受限、消化吸收障碍、代谢素乱或者特定疾病状态人群对营养素或者膳食的特殊需要&#xff0c;专门加工配置而成的配方食品&#xff0c;包括0月龄至12月龄的特殊医学用途婴儿配方食品和适用于1岁以上的特殊医…

【日记】总感觉搞这些才回到了自己的老本行……(1179 字)

正文 前两天忘记写了几件事。 一是&#xff0c;周五晚上打开自己的博客&#xff0c;准备翻自己的笔记&#xff0c;然后…… 我发现&#xff0c;博客的子列表打不开了。我知道&#xff0c;完蛋了。Mdbook 它又双叒叕更新了。这次不知道又把 index.hbs 哪里给改了。 反正&#xf…

2024年11月11日历史上的今天大事件早读

700年11月11日宰相狄仁杰逝世 1821年11月11日《罪与罚》的作者陀思妥耶夫斯基诞辰 1844年11月11日清政府在五口通商口岸解除天主教禁 1851年11月11日御史王茂荫提出请变科举 1861年11月11日清皇太子载淳即皇帝位 1891年11月11日热河金丹教杨悦春发动反洋教起义 1918年11月…