LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念
欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/145056912
Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持广泛的应用场景。在多个行业标准基准测试中展示了最先进的性能,特别是在推理、代码生成和指令遵循方面表现出色,超过了同等规模的商业模型。
Llama 3 Paper: The Llama 3 Herd of Models,Llama3 模型群
参考:大模型训练 RLHF 阶段的 PPO/DPO 策略公式与源码
1. Llama 3 Loss
Llama 3 主要包括 2个阶段,即 预训练阶段(Pre-Training) 和 后训练阶段(Post-Training)。
Llama 3 的网络架构,如下:
1.1 预训练阶段(Pre-Training)
预训练阶段(Pre-Training),包括:
- 初始预训练(Initial Pre-Training):使用 AdamW 优化器对 Llama 3 405B 进行预训练,峰值学习率为 8 × 1 0 − 5 8 × 10^{−5} 8×10−5;线性预热步数为 8,000 步,采用余弦学习率调度,在 1,200,000 步内衰减至 8 × 1 0 − 7 8 × 10^{−7} 8×10−7 ;为了提高训练稳定性,在训练初期使用较小的 BatchSize,在后续逐步增加以提高效率。具体:
- 初始使用 Batch Size 是 4M Tokens 和 序列(Sequences)长度是 4,096 (4K) Tokens,预训练 252M 个 Token。
- 将 Batch Size 和序列长度,增加至 8M Tokens (batch size) 和 8,192 (8K) Tokens (sequences),预训练 2.87T 个 Token。
- 再次将批量大小增加到 16M。
- 降低到损失值的突刺(Spikes),不需要进行干预以纠正模型训练的发散(Divergence)。
- 长上下文预训练(Long Context Pre-Training):使用 800B 个训练 Token,上下文长度增加到 6 个阶段,从 8K 的上下文窗口开始,达到 128K。在长上下文预训练中,自注意力层的计算量,随着序列长度的平方增长。评估模型适应长上下文的标准:
- 模型在 短上下文 评估中的性能是否完全恢复。
- 在特定长度中,模型是否能够完美解决 大海捞针(needle in a haystack) 任务。
- 退火阶段(Annealing):最后 400M 个 token 预训练,线性的(Linearly) 将学习率退火到 0,同时,保持上下文长度 128K Token。使用少量高质量的代码和数学数据,进行退火,提高预训练模型在关键基准测试上的性能。退火阶段,在 8B 模型中效果明显,但是,在 405B 模型中改进较小。
损失函数都是 交叉熵损失,其中 w i w_{i} wi 是第 i i i 个词, N N N 是序列长度, p p p 是概率(softmax), C C C 是 类别数(也就是输出维度),即:
L o s s = − 1 N ∑ i = 1 N l o g p ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) L o s s = − 1 N ∑ i = 1 N ∑ j = 1 C y i j l o g ( p i j ) \begin{align} Loss &= -\frac{1}{N}\sum_{i=1}^{N}log \ p(w_{i}|w_{1},w_{2},...,w_{i-1}) \\ Loss &= -\frac{1}{N}\sum_{i=1}^{N}\sum_{j=1}^{C}y_{ij}log(p_{ij}) \end{align} LossLoss=−N1i=1∑Nlog p(wi∣w1,w2,...,wi−1)=−N1i=1∑Nj=1∑Cyijlog(pij)
这 2 个公式的含义是一样的,第 1 个是选择 w i w_{i} wi ,第 2 个是通过 y i j = 1 y_{ij}=1 yij=1 确定 w i w_{i} wi 。
1.2 后训练阶段(Post-Training)
后训练阶段(Post-Training),包括:
- 奖励模型(Reward Modeling, RM):偏好数据(Preference data) 包含 3 个经过排序的响应,即 编辑后(edited) > 所选(chosen) > 被拒(rejected)。
Reward Model 训练 Loss 函数:
L o s s = − l o g σ ( r ϕ ( x , y w i n ) − r ϕ ( x , y l o s s ) ) Loss = -log \ \sigma(r_{\phi}(x,y_{win}) - r_{\phi}(x,y_{loss})) Loss=−log σ(rϕ(x,ywin)−rϕ(x,yloss))
源码:
loss = -torch.nn.functional.logsigmoid(chosen_scores.float() - rejected_scores.float()).mean()
-
监督微调 (Supervised Finetuning, SFT):使用奖励模型对于人工标注提示进行拒绝采样(Rejection Sampling)。 SFT 的 Loss 函数与 PreTraining 阶段一致,数据略有不同。
-
直接偏好优化 (Direct Preference Optimization, DPO),其中,在 Llama3 中,学习率 L R = 1 0 − 5 LR=10^{-5} LR=10−5,超参数 β = 0.1 \beta=0.1 β=0.1, α = 0.2 \alpha=0.2 α=0.2,即:
L o s s D P O = L o s s D P O + α L o s s N L L = − l o g σ ( β l o g π θ ( y w i n ∣ x ) π r e f ( y w i n ∣ x ) − β l o g π θ ( y l o s e ∣ x ) π r e f ( y l o s e ∣ x ) ) − α l o g π θ ( y w i n ∣ x ) \begin{align} Loss_{DPO} &= Loss_{DPO} + \alpha Loss_{NLL} \\ &= - log \ \sigma(\beta log\frac{\pi_{\theta}(y_{win}|x)}{\pi_{ref}(y_{win}|x)} - \beta log\frac{\pi_{\theta}(y_{lose}|x)}{\pi_{ref}(y_{lose}|x)}) - \alpha log \ \pi_{\theta}(y_{win}|x) \end{align} LossDPO=LossDPO+αLossNLL=−log σ(βlogπref(ywin∣x)πθ(ywin∣x)−βlogπref(ylose∣x)πθ(ylose∣x))−αlog πθ(ywin∣x)
DPO 训练的改进如下:
- 在 DPO 损失中,在 所选(chosen) 和 被拒(rejected) 的响应中,屏蔽 特殊格式令牌(Special Formatting Tokens)。学习这些标记,导致模型出现不期望的行为,例如尾部重复或突然生成终止标记。可能是由于 DPO 损失的对比性质,在选定和拒绝的响应中都存在常见标记,这导致了冲突的学习目标,因为模型需要同时增加和减少这些标记的出现概率。
- DPO 损失 增加 NLL (Negative Log-Likelihood, 负对数似然) 损失,避免 所选(chosen) 响应的对数概率下降。参考论文 Iterative Reasoning Preference Optimization 。
- 模型平均(Model Averaging):训练多个模型,在不同的数据集、不同的初始化、不同的学习率或其他超参数设置下进行训练,对于模型权重进行平均,可以使用简单的算术平均,也可以使用加权平均。
- 迭代轮次(Iterative Rounds):划分 6 个轮次应用上述方法(RM、SFT、DPO、MA)。在每个轮次中,收集新的偏好标注和 SFT数据,以及从最新模型中采样合成数据。
Llama 3 的网络参数:
2. 补充内容
前置概念:
- PreTraining 阶段 与 SFT 阶段 的差异
- logits 含义
- logps 含义
1.1 PreTraining 阶段 与 SFT 阶段 的差异
PreTraining 与 SFT 在训练过程中,没有任何区别,主要区别在于数据的组成形式上,包括 6 点,即:
- PreTraining 样本数据都是满编 4K / 8K;SFT 样本数据保持不变,原始多长就是多长。
- SFT 引入 PreTraining 阶段中未见过的
special_token
,让模型学习全新的语义。 - SFT 让模型 重新学习 最重要的
eos_token
,停止生成;PreTraining 阶段eos_token
只是作为样本的一部分,无法停止生成。 - SFT 借助
special_token
,把语料切分成不同的角色,标配包括system
、user
、assistant
,根据业务需求也可以自定义。 - SFT 的
prompt
部分不做loss
反传,原因是 prompt 的同质化严重,如果不做loss_mask
,同样的一句话会被翻来覆去的学。如果保证每条prompt
都是独一无二的,也可以省略prompt
的loss_mask
部分。 - SFT 的 session 数据(多轮对话),可以每一个
answer
都计算loss
,也可以只对最后一轮的answer
计算loss
。
两者的训练目的也不一样,PreTraining 是在背书,纯粹的学习知识;SFT 则是在做题,学习的是指令 follow 能力。
整体的数据源码,参考 Llama-Factory 的 src/llamafactory/data/preprocess.py
文件,包括不同阶段的数据处理,即 pt
、sft
、rm
、kto
等。
其中,PreTraining 数据源码(src/llamafactory/data/processors/pretrain.py
),
def preprocess_pretrain_dataset(examples: Dict[str, List[Any]], tokenizer: "PreTrainedTokenizer", data_args: "DataArguments"
) -> Dict[str, List[Any]]:# build grouped texts with format `X1 X2 X3 ...` if packing is enabledeos_token = "<|end_of_text|>" if data_args.template == "llama3" else tokenizer.eos_tokentext_examples = [messages[0]["content"] + eos_token for messages in examples["_prompt"]]tokenized_examples = tokenizer(text_examples, add_special_tokens=False) # add_special_tokens=Falseconcatenated_examples = {k: list(chain(*tokenized_examples[k])) for k in tokenized_examples.keys()}total_length = len(concatenated_examples[list(concatenated_examples.keys())[0]])block_size = data_args.cutoff_lentotal_length = (total_length // block_size) * block_sizeresult = {k: [t[i : i + block_size] for i in range(0, total_length, block_size)]for k, t in concatenated_examples.items()}return result
其中,SFT 的 prompt mask 源码(src/llamafactory/data/processors/supervised.py
),参考:
IGNORE_INDEX = -100if train_on_prompt:source_label = source_ids
elif template.efficient_eos:# mask 掉 prompt(source) 部分,保留 answer(target) 部分source_label = [tokenizer.eos_token_id] + [IGNORE_INDEX] * (source_len - 1)
else:source_label = [IGNORE_INDEX] * source_lenif mask_history and turn_idx != 0: # train on the last turn only# 只训练最后 1 轮target_label = [IGNORE_INDEX] * target_len
else:target_label = target_ids
PreTraining 阶段的数据:
- 数据组成形式:
- 输入 input:
<bos> X1 X2 X3
- 标签 labels:
X1 X2 X3 </s>
- 输入 input:
- 典型的 Decoder 架构的数据训练方式
SFT 阶段的数据:
- 数据组成形式:
- 输入 input:
<bos> prompt response
- 标签 labels:
-100 ... -100 response </s>
- 输入 input:
- labels 的重点在于prompt部分的被 -100 所填充
训练过程源码,参考 transformers/src/transformers/models/llama/modeling_llama.py
,即:
logits = self.lm_head(hidden_states)
logits = logits.float()loss = None
if labels is not None:# Shift so that tokens < n predict nshift_logits = logits[..., :-1, :].contiguous()shift_labels = labels[..., 1:].contiguous()# Flatten the tokensloss_fct = CrossEntropyLoss()shift_logits = shift_logits.view(-1, self.config.vocab_size)shift_labels = shift_labels.view(-1)# Enable model parallelismshift_labels = shift_labels.to(shift_logits.device)loss = loss_fct(shift_logits, shift_labels)
其中,shift_logits
和 shift_labels
数据:
输入文本 | <bos> | 我 | 是 | 一 | 个 | 中 | 国 | 人 | <eos> |
---|---|---|---|---|---|---|---|---|---|
shift_logits | <bos> | 我 | 是 | 一 | 个 | 中 | 国 | 人 | |
shift_labels | 我 | 是 | 一 | 个 | 中 | 国 | 人 | <eos> |
1.2 logits 含义
模型输出的数值部分,被称为 logits,其英文含义是 log-odds
,即对数几率,即:logits = self.lm_head(hidden_states)
。
logits
是模型在 应用激活函数(如 softmax)之前 的原始输出。假设有一个分类问题,模型的输出层有多个神经元,每个神经元对应一个类别。这些神经元的输出值就是 logits。例如,对于一个三分类问题,模型输出层的三个神经元输出值可能是[2.1, -1.5, 0.7],这就是 logits。logits
可以看作是每个类别的 对数几率,表示某个事件发生的几率的对数。在分类问题中,假设某个类别发生的概率是p
,那么该类别的几率是p/(1 - p)
。对数几率就是log(p/(1 - p))
。模型输出的logits
通过一些变换(如softmax
函数)来近似地表示这种对数几率。在 softmax 函数中,使用 e 为底数,将 对数几率(logits) 转换为概率分布,使得输出值在 0 到 1 之间,并且所有类别的概率之和为 1。
Softmax 公式,其中 x
就是 logits
,即:
s o f t m a x ( X ) = e x ∑ i = 1 n e x i softmax(X) = \frac{e^x}{\sum_{i=1}^{n}e^{x_{i}}} softmax(X)=∑i=1nexiex
Sigmoid 公式,其中 x
就是 logits
,即:
σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
例如源码:
logits = self.lm_head(hidden_states)
logits = logits.float()
1.3 logps 含义
logps
是 log probabilities
的缩写,即对数概率。具体来说,logps
是模型输出的对数概率分布,通过对 logits
应用 softmax
函数,并且取 对数(log)
得到的。
源码测试:
- 初始化数据
logits
和labels
import torch
from torch import nn
import torch.nn.functional as F
torch.manual_seed(42)logits = torch.randn(3, 4) # 模拟 logits,3个样本,维度是4
# 真实标签,即4个维度中,正确的是0位置、1位置、1位置,也就是说让 logits 的这些位置的对数几率最大。
labels = torch.tensor([0, 1, 1])
print(f"[Info] logits: {logits}")
print(f"[Info] labels: {labels}")[Info] logits: tensor([[ 0.3367, 0.1288, 0.2345, 0.2303],[-1.1229, -0.1863, 2.2082, -0.6380],[ 0.4617, 0.2674, 0.5349, 0.8094]])
[Info] labels: tensor([0, 1, 1])
- 计算
logps
使用log_softmax
,即 softmax -> log,先概率化,再转换成对数(负值)
logps = torch.log(nn.Softmax(dim=1)(logits))
print(f"[Info] logps1: {logps}")
logps = F.log_softmax(logits, dim=1)
print(f"[Info] logps2: {logps}")[Info] logps1: tensor([[-1.2849, -1.4928, -1.3871, -1.3912],[-3.5008, -2.5643, -0.1698, -3.0160],[-1.4621, -1.6565, -1.3889, -1.1144]])
[Info] logps2: tensor([[-1.2849, -1.4928, -1.3871, -1.3912],[-3.5008, -2.5643, -0.1698, -3.0160],[-1.4621, -1.6565, -1.3889, -1.1144]])
- 再调用 负对数似然(Negative Log-Likelihood,NLL) Loss,把多个样本的 logps 均值,再计算负值,因为负负得正,即 loss 值(正值),优化越来越小
v_nll = - (-1.2849 + -2.5643 + -1.6565) / 3 # 0,1,1 位置
print(f"[Info] NLL1: {v_nll}")
v_nll = nn.NLLLoss()(torch.log(nn.Softmax(dim=1)(logits)), labels)
print(f"[Info] NLL2: {v_nll}")[Info] NLL1: 1.8352333333333333
[Info] NLL2: 1.8352112770080566
- 直接使用
CrossEntropyLoss
函数,代替这些操作,即CrossEntropyLoss = Softmax+log+NLLLoss
v_nll = nn.CrossEntropyLoss()(logits, labels)
print(f"[Info] NLL3: {v_ce}")[Info] NLL3: 1.835211157798767
参考 PPL (Perplexities,困惑度) 源码 (scripts/stat_utils/cal_ppl.py
):
outputs = model(**batch)
shift_logits: "torch.Tensor" = outputs["logits"][..., :-1, :]
shift_labels: "torch.Tensor" = batch["labels"][..., 1:]
loss_mask = shift_labels != IGNORE_INDEX
flatten_logits = shift_logits.contiguous().view(shift_labels.size(0) * shift_labels.size(1), -1)
flatten_labels = shift_labels.contiguous().view(-1)
token_logps: "torch.Tensor" = criterion(flatten_logits, flatten_labels)
token_logps = token_logps.contiguous().view(shift_logits.size(0), -1)
sentence_logps = (token_logps * loss_mask).sum(-1) / loss_mask.sum(-1)
total_ppl += sentence_logps.exp().sum().item()
perplexities.extend(sentence_logps.exp().tolist())
参考:
- 知乎 - 详解 PyTorch 的损失函数:NLLLoss()和CrossEntropyLoss()
- 知乎 - 大模型Pretrain和SFT阶段的Loss分析
- 大模型训练(SFT)实践总结
相关文章:
LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持…...
MySQL 中删除重复数据 SQL 写法
要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法(要用的时候直接复制小改下条件和表名称即即可) 方法一:使用 left join 子查询删除重复数据(推荐) 温馨提示:本人在 500w 数据下执行此 SQL 耗费 15s-30s…...
docker minio镜像arm64架构
minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造,服务器资源改为了arm64架构,统信uos docker镜像库内没有对应的minio镜像,当前镜像为拉取源码后,自编译打包镜像,亲测可用。 使用方式 将tar包导入到服务器…...
VUE3 监听器(watch)
在 Vue 3 中,监听器(watch)是用来观察响应式数据的变化,并在数据发生变化时执行相应操作的机制。watch 主要用于响应式数据变化时的副作用处理,比如异步操作、数据更新等。 1. 基础使用 在 Vue 3 中,watc…...
CAPL如何设置TCP/IP传输层动态端口范围
在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...
随记:有关Springboot项目中的时间格式实现的几种方式
1.注解 JsonFormat DateTimeFormat import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDateTime;public class Event {// 序列化和反序列化时生效JsonFormat(pattern "yyyy-MM…...
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
jsp企业财务管理系统设计与实现
企业财务管理系统 摘要 对于企业集来说,财务管理的地位很重要。随着计算机和网络在企业中的广泛应用,企业发展速度在不断加快,在这种市场竞争冲击下企业财务管理系统必须优先发展,这样才能保证在竞争中处于优势地位。对此企业必须实现财务管理…...
EscherNet运行笔记
文章标题:EscherNet: A Generative Model for Scalable View Synthesis 1. 环境配置 conda env create -f environment.yml -n eschernet conda activate eschernet 2. 数据下载 wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz 3…...
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
信息科技伦理与道德3:智能决策
1 概述 1.1 发展历史 1950s-1980s:人工智能的诞生与早期发展热潮 1950年:图灵发表了一篇划时代的论文,并提出了著名的“图灵测试”;1956年:达特茅斯会议首次提出“人工智能”概念;1956年-20世纪70年代&a…...
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础 一、定义一个组件二、使用组件三、传递 props四、监听事件五、通过插槽来分配内容六、动态组件七、DOM 内模板解析注意事项1、大小写区分2、闭合标签3、元素位置限制 课题摘要:本文介绍了Vue.js中的组件基础…...
25/1/11 算法笔记 Yolov8物体识别
这几天做了给Yolov8检测物体的小任务,今天来做下总结。 首先介绍下整个Yolov8检测的步骤吧,安装库那些就不讲了。 这是我的文件包的对象树。 有images包,里面装了训练和验证的图像。 labels包,装了标注好的labels的txt文件&…...
水水水水水水
为了拿推广卷,但不想把我原本完整的文章拆成零散的多篇,只能出此下策随便发一篇,认真写的都笔记专栏里 网络技术:数字时代的基础设施 在当今社会,网络技术无疑是推动现代生活和经济发展的核心动力之一。从简单的信息传…...
XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态
XS5037C是一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,最 大支持 5M sensor接入。内置高性能ISP处理器,支持3D降噪和数字宽动态。标清模拟输出支 持960H,高清模拟输出支持HDCCTV 720P/1080P/4M/5M。高度集成…...
机器学习无处不在,AI顺势而为,创新未来
机器学习无处不在: 1、推荐广告和搜索:推广搜不分家,属于数据科学中,对人的行为进行理解 2、计算机视觉CV:对人看到的东西进行理解 3、自然语言处理:对人交流的东西进行理解 4、数据挖掘和数据分析&…...
pandas处理json的相关操作
Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作: 1. 读取 JSON 文件 使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。 从 JSON 文件读取 import pandas as …...
linux内存泄露定位过程(kmemleak和slab debug)
1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…...
2025年安卓面试复习总结
文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…...
JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...
【Ubuntu 24.04】常见问题解决
1.24开启3D加速黑屏 参考文章:Ubuntu24开机黑屏,VMware卡死,虚拟机繁忙解决方案 没有3D加速就没有动画,所以我们需要开启3D加速,但是直接开启3D加速会黑屏 由于Ubuntu24内部的图形加速驱动异常,因此需要更新…...
前端依赖安装指南
前端依赖安装指南 一、NVM管理工具安装 1.在 Windows 上安装 下载 NVM for Windows 的安装程序:(最新版本可以在 nvm-windows Releases 页面 找到)运行下载的安装程序并按步骤操作。 2.配置 NVM exe安装自动配置环境变量 3. 验证 NVM 安装 验证 NVM 是否成功…...
灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…...
ELK实战(最详细)
一、什么是ELK ELK是三个产品的简称:ElasticSearch(简称ES) 、Logstash 、Kibana 。其中: ElasticSearch:是一个开源分布式搜索引擎Logstash :是一个数据收集引擎,支持日志搜集、分析、过滤,支持大量数据…...
《大型语言模型与强化学习的融合:探索问题的新解决方案与开源验证需求》
强化学习在2020年代初期通过开源项目如CleanRL的多学习者PPO算法取得了显著进展,但在语言模型领域未能充分利用其潜力 1. 开源项目CleanRL的贡献 CleanRL 是一个致力于提供简单、高效且易于理解的强化学习(RL)算法实现的开源项目。该项目通…...
springboot 默认的 mysql 驱动版本
本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…...
10分钟快速了解OceanGPT(沧渊)
10分钟快速了解OceanGPT(沧渊) 海洋科学任务的大语言模型——OceanGPT OceanGPT是如何训练的?为了训练 OceanGPT (沧渊) ,收集了一个跨越多个领域的海洋科学语料库。由于每个子领域和主题都有其独特的数据特征和模式,因此提出了一个特定于领域的指令生成框架,称为 DoDirec…...
蓝桥杯嵌入式速通(1)
1.工程准备 创建一文件夹存放自己的代码,并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中,之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…...
Redis优化建议详解
Redis优化建议详解 1. 内存优化 1.1 内存配置 设置最大内存 maxmemory 4gb 内存淘汰策略 maxmemory-policy allkeys-lru 样本数量 maxmemory-samples 51.2 内存优化策略 数据结构优化 使用压缩列表(ziplist)合理设置hash-max-ziplist-entries使用整数…...
ceph 存储 full 阈值调整
前言 在 Ceph 集群中,默认情况下,当某些 OSD(对象存储守护进程)的使用率达到 85% 时,系统会发出 nearfull 警告,并可能限制进一步的写入操作,以防止数据丢失或集群不稳定。 要允许在 OSD 使用率超过 85% 的情况下继续写入,您可以调整以下两个参数: mon_osd_nearful…...
网站备案作用/百度极速版下载
这题目的问题是 最后要加加 ,supplier.SName 虽然sid应该已经能分出行了 应该已经是不同的了 但是以前我写join的时候 都是要把所有的 除了count的列都group 这题是要写 distinct...
装修公司怎么做免费网站/b站是哪个网站
1、问题 javaweb工程中都有web.xml文件。 那么web.xml的作用是什么呢?每个web工程中web.xml都必须的吗? 2、前言 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。 web.xml文件是用来初始化配置信息…...
网站怎么做qq登录/企点客服
【kindle笔记】读书记录-总 2017-12-26 《犬夜叉》 买kindle的初衷是看计算机工具书看得眼快瞎了,我弟弟推荐给我的Linux系列《鸟叔私房菜》 真的是深思熟虑并且最终陷入一种不买不休的状态之后……买了。在亚马逊官网上。 万万没想到的是,我的第一台啃豆…...
dw怎么做打开网站跳出提示/策划推广
1.下载搜狗拼音词库 wget http://hslinuxextra.googlecode.com/files/sougou-phrases-full.7z 2.用sougou-phrases-full.7z中的ibus/android.db文件替换/usr/share/ibus-pinyin/db/android.db文件。 转载于:https://www.cnblogs.com/tswcypy/p/3930848.html...
住房和城乡建设厅网站青海省/今日军事新闻头条
typedef int ElemType; typedef struct Node { ElemType data; struct Node *prev; struct Node *next; }RingLink;以上是定义结构体。 以下是双向循环链表的实现 void RingLinkInit(RingLink *head) //初始化 { if (head NULL) exit(0); head->next head->prev …...
沈阳做微网站/岳阳网站建设推广
手机“恢复出厂设置”后,真会像新机一样流畅吗?答案你可能不信在互联网时代,移动支付已经普及,相比于以前,现在不管是工作还是生活,我们都需要使用到手机,也相信很多小伙伴每天醒来的第一件事情࿰…...