【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs

🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


基本信息

标题: QLoRA: Efficient Finetuning of Quantized LLMs
作者: Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, Luke Zettlemoyer
发表: NeurIPS 2023
arXiv: https://arxiv.org/abs/2305.14314

基本信息

摘要

我们提出了QLoRA,一种高效的微调方法,能够将内存使用量降低到足以在单个48GB GPU上微调一个65B参数模型,同时保持完整的16位微调任务性能。

QLoRA通过冻结的、4位量化预训练语言模型将梯度反向传播到低秩适配器(LoRA)。

我们最好的模型系列,命名为Guanaco,在Vicuna基准测试中优于所有之前公开发布的模型,达到ChatGPT性能的99.3%,而只需在单个GPU上微调24小时。

QLoRA引入了多项创新以节省内存而不牺牲性能:

  1. 4-bit NormalFloat,一种信息论上对正态分布权重最优的新数据类型;
  2. Double Quantization,通过量化量化常数来减少平均内存占用;
  3. Paged Optimizers来管理内存峰值。

我们使用QLoRA微调了超过1000个模型,对8个指令数据集、多种模型类型(LLaMA、T5)和模型规模(例如33B和65B参数模型)的指令遵循和聊天机器人性能进行了详细分析,这些规模使用常规微调是不可行的。

我们的结果表明,在小型高质量数据集上进行的QLoRA微调可以达到最先进的结果,即使使用比之前SoTA更小的模型。

我们根据人类和GPT-4评估对聊天机器人性能进行了详细分析,表明GPT-4评估是廉价且合理的替代品。此外,我们发现当前的聊天机器人基准测试无法准确评估聊天机器人的性能水平。

柠檬采摘分析展示了Guanaco与ChatGPT相比失败的地方。

我们发布了所有模型和代码,包括4位训练的CUDA内核。

简介

Different finetuning methods and their memory requirements

不同的微调方法和它们的内存需求。QLoRA通过将Transformer模型量化到4位精度并使用分页优化器来处理内存峰值,在LoRA的基础上进行了改进。

背景

Block-wise k-bit Quantization

量化是将输入从一个包含更多信息的表示转换为包含较少信息的表示的过程。它通常意味着将具有更多位的数据类型转换为更少位,例如从32位浮点数转换为8位整数。为了确保低比特数据类型的整个范围被使用,输入数据类型通常通过归一化到输入元素绝对最大值来重新缩放到目标数据类型范围,这些输入元素通常以张量的形式结构化。例如,将32位浮点(FP32)张量量化为范围 [ − 127 , 127 ] [-127, 127] [127,127] 的Int8张量:

X Int8 = round ( 127 absmax ( X FP32 ) X FP32 ) = round ( c FP32 ⋅ X FP32 ) \mathbf{X}^{\text{Int8}} = \text{round}\left(\frac{127}{\text{absmax}(\mathbf{X}^{\text{FP32}})} \mathbf{X}^{\text{FP32}}\right) = \text{round}(c^{\text{FP32}} \cdot \mathbf{X}^{\text{FP32}}) XInt8=round(absmax(XFP32)127XFP32)=round(cFP32XFP32)

其中 c c c 是量化常数或量化尺度。反量化是其逆过程:

dequant ( c FP32 , X Int8 ) = X Int8 c FP32 = X FP32 \text{dequant}(c^{\text{FP32}}, \mathbf{X}^{\text{Int8}}) = \frac{\mathbf{X}^{\text{Int8}}}{c^{\text{FP32}}} = \mathbf{X}^{\text{FP32}} dequant(cFP32,XInt8)=cFP32XInt8=XFP32

这种方法的问题是,如果在输入张量中出现大数值(即异常值),则量化箱——某些位组合——没有得到充分利用,有些箱几乎没有或没有数字被量化。

为防止异常值问题,一种常见的方法是将输入张量分割成独立量化的块,每个块都有自己的量化常数 c c c。这可以形式化如下:我们将输入张量 X ∈ R b × h \mathbf{X} \in \mathbb{R}^{b \times h} XRb×h 分割成 n n n 个连续的块,每个块大小为 B B B,通过展平输入张量并将线性段切分为 n = ( b × h ) / B n = (b \times h)/B n=(b×h)/B 块。我们独立地量化这些块,使用方程1创建量化张量和 n n n 个量化常数 c i c_i ci

Low-rank Adapters

低秩适配器(LoRA)微调是一种通过使用一组可训练参数(通常称为适配器)减少内存需求的方法,同时不更新保持固定的完整模型参数。在随机梯度下降期间,梯度通过固定预训练模型权重传递给适配器,该适配器被更新以优化损失函数。LoRA 通过额外的因子投影增强线性投影。给定一个投影 X W = Y \mathbf{XW} = \mathbf{Y} XW=Y 其中 X ∈ R b × h \mathbf{X} \in \mathbb{R}^{b \times h} XRb×h W ∈ R h × o \mathbf{W} \in \mathbb{R}^{h \times o} WRh×o,LoRA 计算:

Y = X W + s X L 1 L 2 \mathbf{Y} = \mathbf{XW} + s \mathbf{XL}_1 \mathbf{L}_2 Y=XW+sXL1L2

其中 L 1 ∈ R h × r \mathbf{L}_1 \in \mathbb{R}^{h \times r} L1Rh×r L 2 ∈ R r × o \mathbf{L}_2 \in \mathbb{R}^{r \times o} L2Rr×o,且 s s s 是标量。

QLoRA Finetuning

QLoRA通过我们提出的两种技术实现了高保真4位微调——4位NormalFloat(NF4)量化和双重量化。此外,我们引入了分页优化器,以防止梯度检查点期间的内存峰值导致传统上使大型模型在单机上微调困难的内存不足错误。

QLoRA有一个低精度存储数据类型,在我们的案例中通常是4位,还有一个通常是BFloat16的计算数据类型。在实践中,这意味着每当使用QLoRA权重张量时,我们将张量反量化为BFloat16,然后进行16位矩阵乘法。

现在我们讨论QLORA的组件,然后给出QLoRA的正式定义。

4-bit NormalFloat Quantization

NormalFloat(NF)数据类型建立在分位数量化之上,这是一种信息论上最优的数据类型,确保每个量化区间从输入张量中分配相同数量的值。分位数量化通过经验累积分布函数估计输入张量的分位数。

分位数量化的主要局限性在于分位数估计过程成本高昂。因此,使用快速分位数近似算法,如SRAM分位数,来估计它们。由于这些分位数估计算法的近似性质,该数据类型对于异常值具有较大的量化误差,而异常值通常是最重要的值。

当输入张量来自一个固定到量化常数的分布时,可以避免昂贵的分位数估计和近似误差。在这种情况下,输入张量具有相同的分位数,使得精确的分位数估计在计算上是可行的。

由于预训练神经网络权重通常具有均值为零、标准差为 σ \sigma σ 的正态分布,我们可以通过缩放 σ \sigma σ 将所有权重转换为单一固定分布,使得该分布正好适合我们的数据类型范围。对于我们的数据类型,我们设定了任意范围 [ − 1 , 1 ] [-1, 1] [1,1]。因此,数据类型和神经网络权重的分位数都需要归一化到这个范围内。

理论上最优的数据类型适用于均值为零、标准差为 σ \sigma σ 的正态分布,且 σ \sigma σ [ − 1 , 1 ] [-1, 1] [1,1] 范围内,计算方法如下:

  1. 估计理论 N ( 0 , 1 ) N(0, 1) N(0,1) 分布的 2 k + 1 2^k + 1 2k+1 个分位数,以获得 k k k 位量化数据类型用于正态分布;
  2. 取此数据类型并将其值归一化到 [ − 1 , 1 ] [-1, 1] [1,1] 范围内;
  3. 通过绝对最大值重新缩放,将输入权重张量量化到 [ − 1 , 1 ] [-1, 1] [1,1] 范围内。

一旦权重范围和数据类型范围匹配,我们可以像往常一样进行量化。步骤3等价于重新缩放权重张量的标准差,使其与 k k k 位数据类型的标准差相匹配。更正式地,我们估计数据类型的 2 k 2^k 2k 个值 q i q_i qi 如下:

q i = 1 2 ( Q X ( i 2 k + 1 ) + Q X ( i + 1 2 k + 1 ) ) q_i = \frac{1}{2} \left( Q_X \left( \frac{i}{2^k + 1} \right) + Q_X \left( \frac{i + 1}{2^k + 1} \right) \right) qi=21(QX(2k+1i)+QX(2k+1i+1))

其中 Q X ( ⋅ ) Q_X(\cdot) QX() 是标准正态分布 N ( 0 , 1 ) N(0, 1) N(0,1) 的分位数函数。对称 k k k 位量化的一个问题是,这种方法没有精确表示零,这对于量化填充和其他零值元素时无误差是一个重要属性。为了确保离散零点为 0 0 0,并使用所有 2 k 2^k 2k 位作为 k k k 位数据类型,我们创建了一个不对称的数据类型,通过估计两个范围 q i q_i qi 的分位数: 2 k − 1 2^{k-1} 2k1 用于负部分, 2 k − 1 + 1 2^{k-1} + 1 2k1+1 用于正部分,然后统一这两组 q i q_i qi 并去除两组中出现的其中一个零。我们将每个量化箱具有相同期望值数量的数据类型称为 k k k 位 NormalFloat (NFk),因为该数据类型信息理论上最适合均值为中心的正态分布数据。

Double Quantization

我们引入了Double Quantization(DQ),即对量化常数进行量化以节省额外的内存。虽然 4 4 4 位量化需要较小的块大小以实现精确量化,但它也具有相当大的内存开销。例如,使用 32 32 32 位常数和 64 64 64 的块大小 W \mathbf{W} W,量化常数平均为每个参数增加 32 / 64 = 0.5 32/64 = 0.5 32/64=0.5 位。双重量化有助于减少量化常数的内存占用。

更具体地说,双重量化将第一次量化的量化常数 c 2 FP32 c_2^{\text{FP32}} c2FP32 作为输入进行第二次量化。这第二步产生了量化后的量化常数 c 2 FP8 c_2^{\text{FP8}} c2FP8 和第二级量化常数 c 1 FP32 c_1^{\text{FP32}} c1FP32。我们使用 8 8 8 位浮点数和 256 256 256 的块大小进行第二次量化,因为对于 8 8 8 位量化没有观察到性能下降。由于 c 2 FP32 c_2^{\text{FP32}} c2FP32 是正数,我们在量化之前从 c 2 c_2 c2 中减去均值,使值集中在零附近,并利用对称量化。

平均而言,对于 64 64 64 的块大小,这种量化将每个参数的内存占用从 32 / 64 = 0.5 32/64 = 0.5 32/64=0.5 位减少到 8 / 64 + 32 / ( 64 ∗ 256 ) = 0.127 8/64 + 32/(64 * 256) = 0.127 8/64+32/(64256)=0.127 位,每个参数减少了 0.373 0.373 0.373 位。

Paged Optimizers

使用 NVIDIA 统一内存特性,该特性在 CPU 和 GPU 之间自动进行页面到页面的传输,以确保在 GPU 偶尔出现内存不足的情况下进行无错误的 GPU 处理。该功能类似于 CPU RAM 和磁盘之间的常规内存分页。我们使用此功能为优化器状态分配分页内存,当 GPU 内存不足时,这些内存自动被移至 CPU RAM,在优化器更新步骤需要内存时,这些内存又会自动回传到 GPU 内存中。

QLoRA

使用上述组件,我们为单线性层中的量化基础模型与单个 LoRA 适配器定义了 QLoRA,如下所示:

Y BF16 = X BF16 ⋅ doubleDequant ( c 1 FP32 , c 2 k -bit , W NF4 ) + X BF16 L 1 BF16 L 2 BF16 Y^{\text{BF16}} = X^{\text{BF16}} \cdot \text{doubleDequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}, W^{\text{NF4}}) + X^{\text{BF16}} L_1^{\text{BF16}} L_2^{\text{BF16}} YBF16=XBF16doubleDequant(c1FP32,c2k-bit,WNF4)+XBF16L1BF16L2BF16

doubleDequant ( c 1 FP32 , c 2 k -bit , W k -bit ) = dequant ( dequant ( c 1 FP32 , c 2 k -bit ) , W 4 bit ) = W BF16 \text{doubleDequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}, W^{k\text{-bit}}) = \text{dequant}(\text{dequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}), W^{4\text{bit}}) = W^{\text{BF16}} doubleDequant(c1FP32,c2k-bit,Wk-bit)=dequant(dequant(c1FP32,c2k-bit),W4bit)=WBF16

我们对 W W W 使用 NF4,对 c 2 c_2 c2 使用 FP8。为了提高量化精度,我们对 W W W 使用 64 的块大小,对 c 2 c_2 c2 使用 256 的块大小以节省内存。

在参数更新时,仅需要计算适配器权重 ∂ E ∂ L i \frac{\partial E}{\partial L_i} LiE 相对于误差的梯度,而不需要计算 4-bit 权重 ∂ E ∂ W \frac{\partial E}{\partial W} WE。然而, ∂ E ∂ L i \frac{\partial E}{\partial L_i} LiE 的计算涉及到通过 Y BF16 Y^{\text{BF16}} YBF16 从存储形式 W NF4 W^{\text{NF4}} WNF4 解量化到计算数据类型 W BF16 W^{\text{BF16}} WBF16,以计算梯度 ∂ X ∂ W \frac{\partial X}{\partial W} WX,并在 BFloat16 精度下完成。

总结来说,QLoRA 使用一种存储数据类型(通常为 4-bit NormalFloat)和一种计算数据类型(16-bit BrainFloat)。我们将存储数据类型解量化为计算数据类型以执行前向和后向传递,但仅为使用 16-bit BrainFloat 的 LoRA 参数计算权重梯度。

实验

QLoRA vs. Standard Finetuning

Mean zero-shot accuracy over Winogrande, HellaSwag, PiQA, Arc-Easy, and ArcChallenge using LLaMA models with different 4-bit data types

Mean 5-shot MMLU test accuracy for LLaMA 7-65B models finetuned with adapters on Alpaca and FLAN v2 for different data types

Pile Common Crawl mean perplexity for different data types for 125M to 13B OPT, BLOOM, LLaMA, and Pythia models

Pushing the Chatbot State-of-the-art with QLoRA

Zero-shot Vicuna benchmark scores as a percentage of the score obtained by ChatGPT evaluated by GPT-4

MMLU 5-shot test results for different sizes of LLaMA finetuned on the corresponding datasets using QLoRA

Elo rating for a tournament between models where models compete to generate the best response for a prompt, judged by human raters or GPT-4

Limitations and Discussion

我们已经证明了我们的方法QLoRA,使用4位基模型和低秩适配器,可以复制16位全微调的性能。然而,由于资源成本巨大,我们没有在33B和65B规模上证明QLoRA可以匹配16位微调性能。

另一个限制是对指令微调模型的评估。虽然我们在MMLU、Vicuna/OA基准上提供了评估,但我们没有在BigBench、RAFT和HELM上评估,也不能保证我们的评估可以推广到这些基准。另一方面,我们在MMLU上进行了非常广泛的研究,并开发了评估聊天机器人新方法。

从所提供证据来看,这些基准的性能可能取决于微调数据与基准数据集的相似程度。例如,FLAN v2与MMLU相似,但与Vicuna基准不相似,反之亦然对于Chip2数据集。这表明,不仅需要更好的基准和评估,而且需要谨慎考虑最初要评估的内容。我们是要创建在教室高中和同事知识上表现良好的模型,还是要创建在聊天机器人对话能力上表现良好的模型?也许还有其他?因为与创建新的基准相比,评估现有的基准总是更容易,某些基准可能会引导社区走向某个方向。作为社区,我们应该确保基准衡量的是我们所关心的。

另一个限制是我们没有评估不同的位精度或不同的适配器方法。除了LoRA之外,还有许多参数高效微调(PEFT)方法已被证明效果良好。然而,不清楚这些方法是否可以扩展到大型模型。我们使用LoRA,因为许多结果已经证明了其鲁棒性,但其他适配器可能产生更好的性能。由于量化后的微调似乎可以恢复量化过程中丢失的大部分信息,这可能使得量化更加激进。例如,3位GPTQ量化在微调后也可能产生16位全微调的性能。

Broader Impacts

我们的QLoRA微调方法首次实现了在单个消费级GPU上对33B参数模型进行微调,以及在单个专业GPU上对65B参数模型进行微调,同时不会降低与完整微调基线相比的性能。我们已经证明,我们在Open Assistant数据集上训练的最佳33B模型在Vicuna基准测试中可以与ChatGPT相媲美。由于指令微调是将原始预训练LLM转换为类似ChatGPT的聊天机器人的重要工具,我们相信我们的方法将使微调变得普遍且常见,特别是对于资源最少的科研人员来说——这是对最先进NLP技术可及性的重大胜利。QLoRA可以被视为一种平衡因素,有助于缩小大型企业和拥有消费级GPU的小团队之间的资源差距。

另一个潜在的影响来源是将QLoRA部署到手机和其他低资源设备上。虽然之前已经证明7B模型可以在手机上运行,但QLoRA是第一个能够对这类模型进行微调的方法。我们估计,使用iPhone 12 Plus,QLoRA可以在手机充电时每晚微调300万个标记。QLoRA可以帮助实现LLM的隐私保护使用,用户可以拥有和管理自己的数据和模型,同时使LLM更容易部署。

此外,由于4位模型推理效率的提高,如果部署QLoRA模型,它们可以减少LLM在个人使用时产生的环境影响。我们估计,如果50%的部署是个人使用,50%是公司部署,QLoRA部署可以将总体碳足迹减少72%。

然而,微调是一种双刃剑技术,可能会被滥用造成伤害。LLM的广泛使用存在已知的危险,但我们相信,平等获取一种迅速普及的技术将允许进行更好的独立分析,而不是将LLM的权力掌握在那些不发布模型或源代码以供审计的大型企业手中。

总的来说,我们相信QLoRA将产生广泛积极的影响,使高质量LLM的微调变得更加广泛和容易获取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常用的数据结构API概览

List ArrayList 1、在初始化一个ArrayList的时候&#xff0c;如果我想同时set一些值 比如存放int[ ] List<int[]> list new ArrayList(Arrays.asList(new int[]{intervals[0][0],intervals[0][1]}));//或者int[] temp new int[]{intervals[0][0],intervals[0][1]}…

音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现

一、引言 从《音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;3&#xff09;——MPEG2-PS格式简介》中可以知道&#xff0c;PS流由一个个pack&#xff08;包装&#xff09;组成。一个pack 一个pack_header 一个或多个PES_packet。pack_header中还可能存在system header…

《无力逃脱》V1.0.15.920(59069)官方中文版

艾丹是一名三臂赏金猎人&#xff0c;他必须追捕银河系中最危险、最难以捉摸的割喉者。 有些悬赏是金钱&#xff0c;有些则是有价值的信息。艾丹可以利用这些信息找到让他走上这条路的人&#xff0c;同时也会卷入一个全银河系的阴谋中。 拥有三条手臂可以让你同时对付更多的敌…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

【Qt】快速添加对应类所需的头文件包含

快速添加对应类所需的头文件包含 一&#xff0c;简介二&#xff0c;操作步骤 一&#xff0c;简介 本文介绍一下&#xff0c;如何快速添加对应类所需要包含的头文件&#xff0c;可以提高开发效率&#xff0c;供参考。 二&#xff0c;操作步骤 以QTime类为例&#xff1a; 选中…

以太网UDP协议栈实现(支持ARP、ICMP、UDP)--FPGA学习笔记26

纯verilog实现&#xff0c;仅使用锁相环IP、FIFO IP&#xff0c;方便跨平台移植。支持ping指令。 以太网系列文章&#xff1a; 以太网ICMP协议(ping指令)——FPGA学习笔记25-CSDN博客 以太网ARP协议——FPGA学习笔记23-CSDN博客 以太网PHY_MDIO通信&#xff08;基于RTL821…

java项目之校园管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; springboot校园…

大模型推理加速调研(框架、方法)

大模型推理加速调研&#xff08;框架、方法&#xff09; 大模型推理框架调研总结推理框架TensorRT-LLMllama.cppmnn-llmfastllmmlc-llm 环境搭建&部署推理环境llama.cppfastllmmnn-llmvllm vllm_openai_completions.pylmdeployTensorRT-LLM 大模型加速技术总结模型压缩量化…

遮挡半透明效果

1、遮挡半透明效果是什么 在游戏开发中&#xff0c;遮挡半透明效果就是物体被挡住的部分&#xff0c;也能呈现出一种半透明效果而被看到&#xff08;具体效果可以自定义&#xff09;比如 当角色在建筑物之间穿行时&#xff0c;被遮挡部分能够呈现出半透明效果而被我们看到。遮…

操作系统——并发控制

学习目标 两个进程之间互斥&#xff0c;但也承担了唤醒对方得义务&#xff0c;不然就一直被自己阻塞 互斥条件与解决方案 互斥的要求

【Android项目学习】3. MVVMHabit

项目链接 文章目录 一. 项目结构1. 项目整体划分2. 模块细分 二. Android知识点学习1. registerActivityLifecycleCallbacks方法2. 一. 项目结构 1. 项目整体划分 MVVMHabit是以谷歌DataBindingLiveDataViewModel框架为基础&#xff0c;整合OkhttpRxJavaRetrofitGlide等流行…

【虚拟机】VMware 16图文安装和配置 AlmaLinux OS 9.5 教程

准备工作 下载AlmaLinux ISO文件&#xff1a;从AlmaLinux官方网站&#xff08;https://almalinux.org/&#xff09;下载最新版本的ISO文件。 安装VMware Workstation&#xff1a;确保您的计算机上已安装VMware Workstation。&#xff08;注&#xff1a;我这边使用的是VMware16…

【数据结构】链表(2):双向链表和双向循环链表

双向链表&#xff08;Doubly Linked List&#xff09; 定义&#xff1a; 每个节点包含三个部分&#xff1a; 数据域。前驱指针域&#xff08;指向前一个节点&#xff09;。后继指针域&#xff08;指向下一个节点&#xff09;。 支持从任意节点向前或向后遍历。 #define dat…

CryptoHack:Diffie-Hellman(STARTER)

1.Working with Fields 这里的主要目的是算乘法逆元d 我们有RSA中算乘法逆元的基础这里就很快了&#xff0c;找到“e”和“phi”就是题目中的“g”和"N" # Diffie-Hellman算法 import gmpy2 p991 N991 g209 dgmpy2.invert(g, N) print(d) #5692.Generators of Grou…

Transformer知识梳理

Transformer知识梳理 文章目录 Transformer知识梳理什么是Transformer&#xff1f;语言模型迁移学习 Transformer结构注意力层原始结构 总结 什么是Transformer&#xff1f; 语言模型 Transformer模型本质上都是预训练语言模型&#xff0c;大部分采用自监督学习&#xff08;S…

计算机缺失x3daudio1 7.dll怎么修复?

电脑运行时常见问题解析与修复策略&#xff1a;以“x3daudio1_7.dll缺失”为例 在软件开发与日常电脑维护的广阔领域中&#xff0c;我们时常会遇到各种系统报错和文件问题。这些问题不仅影响我们的工作效率&#xff0c;还可能对数据安全构成潜在威胁。作为一位经验丰富的软件开…

mysql找回误删除数据

查看binlog日志是否开启以及日志文件位置 SHOW VARIABLES LIKE %log_bin%; log_bin 为 ON表示开启状态 /var/mysql/data/ 为binlog日志文件位置 查看正在使用的binlog日志文件 show master status; 通过第一步和第二步可以确定文件位置 将二进制文件转为txt或者sql文件 m…

第五届神经网络、信息与通信工程国际学术会议(NNICE 2025)

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 征稿主题&#xff1a; 神经网络 机器人控制 优化组合 知识工程 人工智能 逻辑程序设计 人机交互 深度学习 信号处理 信息提取 自然语言推论 信号与信息处理 信息管理与集成 实时信号处理与应用、 DSP应用 图…

JVM对象内存结构

1对象内存结构说明 注意&#xff1a; 如果对象为数组对象&#xff0c;在对象头后面有4字节存储数组长度&#xff1b; 1.1对象头 对象头分为Mark Word和Class Pointer两部分&#xff1b; Mark Word&#xff1a;对象基础信息 32位操作系统中占4字节&#xff0c;64位操作系统中占8…

创建并配置华为云虚拟私有云

目录 私有云 创建虚拟私有云 私有云 私有云是一种云计算模式&#xff0c;它将云服务部署在企业或组织内部的私有基础设施上&#xff0c;仅供该企业或组织内部使用&#xff0c;不对外提供服务.私有云的主要特点包括&#xff1a; 私密性&#xff1a;私有云的资源&#xff08;如…