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

Temporal Dynamic Quantization for Diffusion Models阅读

文章目录

  • Abstract
    • Introduction
    • Backgrounds and Related Works
      • 2.1 扩散模型
      • 2.2 量化
      • 2.3 量化感知训练和训练后量化
    • TemporalDynamic Quantization
      • 3.1 量化方法
      • 3.2 扩散模型量化的挑战
      • 3.3 TDQ模块的实现
      • 3.4 工程细节
        • 时间步的频率编码
        • TDQ模块的初始化
    • Experimental Setup
    • Results
      • 5.1 QAT和PTQ后的质量分析
      • 5.2 TDQ模块的泛化性能
      • 5.3 TDQ模块的消融研究
    • Discussion
    • Conclusion
    • 思考和心得

Abstract

扩散模型因其出色的生成性能和多功能性在视觉应用中受到广泛关注。然而,由于模型大小和迭代生成带来的高存储和计算需求,限制了其在移动设备上的使用。现有的量化技术在8位精度下难以维持性能,因为扩散模型的激活具有时间变化的独特属性。我们引入了一种新颖的量化方法,该方法基于时间步信息动态调整量化区间,大幅提高了输出质量。与传统动态量化技术不同,我们的方法在推理过程中没有计算开销,并且兼容于训练后量化(PTQ)和量化感知训练(QAT)。我们的广泛实验表明,经过量化的扩散模型在各种数据集上输出质量显著提升。

什么是扩散模型?
扩散模型是一种生成模型,主要用于图像生成等任务。其基本思想是通过定义一个正向过程,将数据逐步加入噪声,直到接近纯噪声,然后学习逆过程,从噪声生成数据。扩散模型的结构一般包括以下部分:1. **正向扩散过程**:- 从原始数据开始,逐步添加噪声。- 每一步的小改动使数据分布逐渐变得模糊,直至接近高斯噪声。2. **逆向扩散过程**:- 学习去噪过程,通过逐步去除噪声回到数据分布。- 使用神经网络(例如UNet)预测和去除每一步的噪声。通常使用UNet等结构,因为它们擅长处理图像去噪任务。3. **训练**:- 通过最大化对数似然或最小化噪声预测误差来训练模型。扩散模型的关键在于其逐步变化的过程,使得生成的数据质量高且多样性好。它在图像生成、修复等任务中表现优异。

Introduction

生成建模在机器学习中对于图像、语音和文本合成等应用至关重要。扩散模型通过涉及数百次迭代推理的去噪过程逐步优化输入图像,因其优于GAN等替代方案的性能而受到关注。然而,扩散模型的高成本是其广泛应用的主要障碍。这些模型的尺寸较大,常达到数GB,并且单次图像生成需要大量迭代计算。因此,在资源有限的移动设备上执行扩散模型几乎是不可能的,大多数应用目前在昂贵的高性能服务器上实现。

为了充分利用扩散模型的潜力,已提出多种方法以减少其计算成本和内存需求,同时保持生成性能。例如,J. Song等人和L. Liu等人提出了更高效的采样调度方法,T. Salimans和J. Ho则提出使用知识蒸馏技术减少采样步骤。因此,可以用较少的采样步骤生成高质量图像,使得扩散模型的使用变得更具成本效益和可行性。尽管有这些进步,扩散模型的去噪过程仍需大量计算成本,因此需要进一步的性能增强和模型压缩。

虽然大多数先前的方法都集中在减少采样步骤以加速去噪过程,但减轻单个去噪步骤的负担也很重要。由于单个去噪步骤可以视为传统深度学习模型的推理,因此可以使用多种模型压缩技术。量化是一种广泛使用的压缩技术,它将权重和激活映射到低精度域。然而,由于扩散模型的独特性质,例如在迭代推理过程中激活分布的显著变化,随着激活位宽的减少,输出会严重失真。

为了解决扩散模型量化的独特挑战,我们引入了一种称为时间动态量化(TDQ)模块的新设计。该TDQ模块生成时间依赖的最佳量化配置,最小化激活量化误差。TDQ模块的显著优点在于可以无缝集成现有的QAT和PTQ算法,扩展这些算法以创建时间依赖的最佳量化配置,最小化激活量化误差。具体来说,该模块设计为在推理过程中不产生额外的计算开销,使其兼容于现有的加速框架而无需修改。TDQ模块通过生成优化的量化配置,显著提高了传统量化方案的质量。

Backgrounds and Related Works

2.1 扩散模型

扩散模型首次在2015年提出,革新了图像生成,通过将其描述为一个顺序去噪过程。如图1所示,正向扩散过程通过在每个时间步添加少量高斯噪声,将图像 (x_0) 逐渐转变为服从标准正态分布的随机数据 (x_T)。反向扩散过程则通过迭代去噪步骤,从随机数据 (x_T) 生成干净图像 (x_0)。因此,扩散模型学习的是反向过程,即在每个时间步 (x_t) 上估计给定噪声数据的噪声量。正向 (q) 和反向 (p_\theta) 过程可以描述为:

在这里插入图片描述

其中 (\beta_t) 表示高斯噪声的大小。

文献[3]引入了一种重参数化技巧用于 (\mu_\theta) 和相应的损失函数,促进了扩散模型的训练。
在这里插入图片描述

虽然扩散模型能够生成高质量的图像,但迭代去噪过程使其难以在实际场景中使用。早期的扩散模型研究,如DDPM[3],需要数百到数千次迭代推理来生成一张图像,导致采样速度极慢。因此,众多研究致力于探索算法增强和各种优化,以提高性能,使扩散模型更高效且适用于实际应用。

DDIM[2]引入了一种隐式概率模型,通过重新解释DDPM方法的马尔可夫过程,以十分之一的去噪步骤实现了具有竞争力的图像质量。基于蒸馏的方法[16, 17]提出使用知识蒸馏技术减少去噪步骤的数量。

另一方面,为了解决生成高分辨率图像的显著计算开销,[4]提出了一种潜在扩散模型(LDM),其中扩散模型处理的是潜在变量而非图像。尤其是大规模扩散模型(如Stable Diffusion [4])利用了LDM并从大规模数据集(LAION-Dataset [27])中学习,实现了基于文本输入生成高质量、高分辨率图像。

2.2 量化

量化是一种显著的神经网络优化技术,通过低精度表示减少存储需求,并在可用低精度加速时提升性能。使用(b)位精度时,仅有(2^b)个量化级别可用,相较于浮点表示极大地限制了量化模型的自由度。因此,最终质量会显著依赖于量化超参数的调整,如量化区间或零偏移。为了在低精度下保持输出质量,至关重要的是在更新模型参数时,结合目标任务的特定特征和要求调整量化参数。

2.3 量化感知训练和训练后量化

量化算法大致可分为两类:量化感知训练(QAT)[19, 28, 29, 20, 30]和训练后量化(PTQ)[23, 24, 25]。QAT在引入量化算子后进行额外训练,允许更新网络参数,以考虑量化算子的影响来最小化最终损失值。而PTQ在量化后不进行端到端的前向/后向传播,而是专注于减少量化引起的块级重构误差。QAT在低精度场景中通常优于PTQ,但由于数据集不足、训练管道限制和资源约束等原因,QAT可能并不总是适用。由于其实用性,PTQ近年来被积极研究。在扩散模型的文献中,[18]引入了一种专门的8位训练后量化方法,展示了高保真度的图像生成性能。

另一方面,尽管大多数QAT和PTQ算法专注于静态量化,近期研究强调了输入依赖的动态量化的优势[31, 32, 33, 34]。动态量化能够根据激活的输入依赖分布调整量化区间,具有减少量化误差的潜力。然而,实施这些动态方法通常会因提取激活统计信息而产生额外成本,使得实际中难以实现性能提升。例如,[35]指出输入依赖的激活函数可能导致显著的延迟增加,尽管其计算量相对较小。

尽管先前有多项工作提出加速扩散模型采样过程的不同方法,但很少有工作尝试利用扩散模型的动态特性。本文提出了一种新颖的扩散模型量化方案,通过基于时间步信息生成合适的量化区间,最大限度减少激活量化误差,同时不产生额外的推理成本。

TemporalDynamic Quantization

3.1 量化方法

在详细说明所提方法之前,我们定义本文中使用的量化函数。本研究专注于(b)位线性量化,其中(2^b)个可能的量化级别是均匀分布的。线性量化涉及两个关键超参数:量化区间(s)和零偏移(z)。给定全精度数据(x),量化后的数据(\hat{x})可按如下计算:

在这里插入图片描述

其中(n§)是最小(最大)量化索引,(\text{clip}(·))是裁剪函数,(\lfloor·\rceil)是舍入函数。为了实际加速,我们对权重使用对称量化,其中(z=0)且(p=-n=2{(b-1)}-1)。另一方面,对于激活量化,我们假设使用不对称量化,其中(z=0)、(n=0)和(p=2b-1),这是一种常用方法[36]。

3.2 扩散模型量化的挑战

量化扩散模型的最大挑战在于为激活找到最优量化参数((s)和(z\)以最小化量化误差。如图2所示,扩散模型的激活分布由于迭代去噪过程具有独特特性,其分布高度依赖于时间步((t)),而与层索引无关。

因此,使用静态值作为量化参数会在不同时间步引发显著的量化误差,如图3所示。先前研究[37,18]也报告了扩散模型中激活的动态特性,并尝试通过在所有时间框架内采样校准数据集来解决这一问题。然而,尽管有这些努力,这些研究仍依赖于静态参数,导致在最小化量化误差时收敛效果欠佳。要从根本上解决这个问题,至关重要的是能够根据输入激活分布的动态性更新量化参数。

3.3 TDQ模块的实现

为应对输入激活的快速变化,一种简单思路是输入依赖的动态量化。先前研究表明,结合生成量化参数的量化模块(基于输入特征如最小值、最大值和平均值)可以显著提高特定应用的准确性[38,32]。

根据我们的观察(详见附录),我们自己实现的输入依赖动态量化在质量上有显著提升。然而,收集给定激活的统计数据会导致复杂的实现和显著的开销[35]。尽管存在质量提升的潜力,这种方法在实际中可能不具吸引力。因此,我们提出了一种新颖的动态量化,利用时间信息而非输入激活。我们发现,当测量时间步与每个张量激活变化的皮尔逊相关系数时,62.1%的层表现出中等的时间依赖(|r| > 0.5),38.8%表现出强时间依赖(|r| > 0.7)。这表明扩散模型中的许多层确实具有强烈的时间依赖性。尽管激活分布可能根据输入数据变化,但在同一时间框架内整体趋势相似(见图2)。因此,我们可以基于时间步的差异确定最优区间,从而获得更可靠和稳健的量化结果。

直观上,我们可以为每个时间步采用一个标量量化区间。然而,这种策略难以捕捉时间间关系,且不能应用于训练和推理使用不同时间步的情况。因此,我们提出使用一个可学习的小型网络,通过时间步信息预测量化区间。该策略可以跨多个时间步整体评估激活变化,从而使学习过程更稳定并提高性能,如表3所示。

图4(b)展示了我们的想法概览,称为TDQ模块。在TDQ模块中,动态区间(\tilde{s})基于提供的时间步(t)生成,如下所示:
在这里插入图片描述

其中(\text{enc}(·))表示时间步的编码函数,将在3.4节中描述。这里,(I)是编码特征,(f(·))表示生成模块函数。

在我们的方法中,TDQ模块附着于每个量化算子,独立的动态量化区间基于给定时间步生成。如图4所示,生成器通过简单堆叠多个线性层和一个softplus函数实现,以将数据范围限制为非负值。请注意,生成器的所有组件都是可微的。因此,在PTQ或QAT过程中,可以通过梯度下降更新区间以最小化量化误差。

例如,当使用知名QAT算法如LSQ [29]时,静态区间可以用TDQ模块的输出替代。方程5中的量化函数修改如下:

在这里插入图片描述

当我们使用直通估计器[39]时,梯度可以通过生成器的可学习参数传播。这些参数然后通过迭代梯度下降更新,目标是最小化最终任务损失。同样的流程可以应用于利用局部梯度最小化重构误差的PTQ算法[23, 24]。因此,TDQ模块很容易适用于QAT和PTQ方案。

然而,与输入依赖动态量化不同,TDQ模块实现了无成本推理。在PTQ或QAT过程后,时间依赖的区间可以离线预计算,在推理期间,我们可以利用预计算的量化区间。这是TDQ模块在现有框架中无须修改即可实现无缝集成的一大优势。

3.4 工程细节

我们进行了系列实验以增强TDQ模块的稳定性和效果,发现一些工程改进在实现可靠结果方面起到了关键作用。本节详细描述了这些改进及其对TDQ模块性能的影响。

时间步的频率编码

直接将时间步输入生成器会导致收敛质量较差。这主要是由于神经网络的低频归纳偏差[40, 41]。如果直接将时间步输入生成器,它往往会生成一个几乎不随时间步变化的区间。为减轻这种低频偏差,我们对时间步使用几何傅里叶编码[42, 43],如方程6所示:

在这里插入图片描述

其中(t)是当前时间步,(d)是编码向量的维度,(I)是编码后的向量。这种编码方法允许TDQ模块适应时间步的高频动态。在本文中,我们经验性地将(t_{\text{max}})设置为10000。

TDQ模块的初始化

量化区间的适当初始化至关重要,因为初始化不当会导致QAT或PTQ过程中的不稳定。现有的量化技术仅需初始化静态步长值,但我们需要将TDQ模块的输出初始化为期望值。为此,我们对TDQ模块(MLP)的最后一层线性层的权重使用He初始化[44],并将偏差设置为期望值。由于MLP的输入(几何傅里叶编码)可视为均值为零的随机变量,经过He初始化的MLP的输出也将具有零均值。因此,我们可以通过偏差调整将MLP输出的均值控制为期望值。提取整个时间步的1000个样本后,我们初始化量化区间以最小化整体误差,然后进行更新以适应每个时间步。

Experimental Setup

为了展示TDQ的卓越性能,我们在两个不同的模型上进行了测试:DDIM[2](像素空间扩散模型)和LDM[4](潜在空间扩散模型)。在DDIM实验中,我们使用了CIFAR-10数据集[45](32x32),而在LDM实验中,我们采用了LSUN Churches数据集[46](256x256)。这使我们能够在低分辨率和高分辨率图像生成场景中展示所提方法的有效性。

我们将PTQ和QAT应用于这两个模型。然而,值得注意的是,虽然潜在扩散模型由VAE和扩散模型组成,但我们专注于量化扩散模型,并未对VAE部分进行量化。

由于缺乏扩散模型的先前QAT研究,我们尝试了知名的静态量化方法,如PACT[19]、LSQ[29]和NIPQ[30]作为基线。我们的构想是将TDQ模块的输出替换静态区间,集成于LSQ之上。我们在附录中提供了TDQ与其他方法集成的额外实验。对所有卷积层和线性层的激活和权重,包括注意力层的激活,进行逐层量化。模型在CIFAR-10和LSUN-churches上分别训练了200K次迭代,批量大小分别为128和32。学习率与全精度模型一致。

在PTQ中,我们使用了PTQ4DM[18]作为基线进行广泛分析。为公平比较,我们遵循PTQ4DM的实验设置,但修改了激活量化算子,使用TDQ模块生成动态量化区间。与PTQ4DM类似,我们对权重使用逐通道不对称量化,对激活使用逐张量不对称量化。权重量化范围通过逐通道最小/最大值确定,激活量化范围通过梯度下降训练以最小化分块重构误差,如BRECQ[24]等方法。量化应用于所有层,但在LDM的PTQ实验中,注意力矩阵的激活未量化。按照PTQ4DM的方法,我们使用由5120个样本组成的校准集进行PTQ,包括256张图像,每张图像随机选择20个时间步。

为了衡量模型性能,我们使用Fréchet Inception Distance(FID)[47]和Inception Score(IS)[48]评估CIFAR-10,并使用FID评估LSUN-churches。在评估中,我们使用QAT和DDIM的200步采样生成50,000张图像,使用PTQ和DDIM的100步生成50,000张图像。在QAT的情况下,我们选择了验证损失最低的5个检查点,并报告了表现最佳模型的分数。

所有实验在高性能服务器上进行,配备4个A100 GPU和8个RTX3090 GPU,使用PyTorch[49] 2.0框架。源代码可在https://github.com/ECoLab-POSTECH/TDQ_NeurIPS2023获取。此外,我们使用WxA表示x位权重和y位激活量化以简化表达。

Results

5.1 QAT和PTQ后的质量分析

表1比较了TDQ模块与现有静态量化方法。随着激活位数减少,所有静态量化方法的质量都下降,而我们的方法则保持一致的输出。即使在8位精度下,TDQ模块也显著提高了质量,在4位精度下甚至能将质量降至全精度输出的水平。TDQ通过有效分配有限的激活量化级别实现了这些优势。

此外,NIPQ通过基于人工噪声的伪量化来解决直通估计器的不稳定性问题。然而,NIPQ的噪声与输入噪声难以区分,阻碍了扩散模型的收敛。要利用基于PQN的QAT在扩散模型中的优势,需付出额外努力。

表2展示了TDQ模块与现有静态PTQ方案的比较。MinMax方法代表一种简单的线性量化方法,其范围由目标张量的最小值和最大值确定。实验表明,所有基线在激活位数高时保持良好的FID水平,但随着激活位数减少,性能显著下降。相比之下,TDQ仅表现出轻微的FID下降,表明TDQ模块在QAT和PTQ场景中均表现出色。

图5到图7展示了量化扩散模型生成的图像。在相同位宽配置下,我们的方法在生成高保真图像方面始终优于其他量化技术。图5和图6进一步说明了这一点,传统的QAT和PTQ生成模糊且不可识别的图像,而我们的方法生成逼真的图像。激活量化中融入时间信息在保持输出感知质量方面非常有效。

5.2 TDQ模块的泛化性能

本节展示了TDQ模块在快速推理中的性能实验结果。训练涵盖所有时间步(1到1000),但推理可以在较少时间步(50到100)下执行以提高性能。这改变了训练/测试时的时间步分布,因此TDQ模块的生成需要良好的泛化能力。

图8显示了在W8A4和W4A4配置下,通过LSQ算法量化的DDIM模型的FID测量。推理过程中时间步从100逐渐减少到10。如图所示,随着时间步减少,LSQ的性能显著下降,而我们的方法性能的下降与全精度基线相似。该实验表明,即使采样时间步变化,TDQ模块依然有效运作。

5.3 TDQ模块的消融研究

为研究TDQ模块输出的动态性,我们可视化了与时间步相关的动态区间更新(图9)。在DDIM上使用W4A4 LSQ训练的区间显示出与激活变化一致的趋势。然而,这种模式并非所有层都一致。此不一致可能表明TDQ模块尝试生成一个最小化最终损失值的区间,因为LSQ相应地调整了量化区间。

为提供对TDQ模块优点的全面分析,我们将其与输入依赖的动态量化方法进行了比较,并对TDQ模块进行了消融研究。如表4所示,即使不直接利用层的分布信息,TDQ仍表现出优越的性能。我们还研究了TDQ模块中层数对性能的影响。结果表明,当层数超过4时,输出质量显著稳定。基于这些发现,我们经验性地选择了4层MLP,以平衡性能和复杂性。

我们也进行了实验,将TDQ与每个时间步直接学习的量化区间配置进行比较。如表3所示,直接为每个时间步学习量化区间并在多个时间步中使用共享量化区间的概念相比基线(S1)可提高输出质量,但TDQ依然表现出卓越的输出质量和更大的灵活性。TDQ的成功在于其能够在考虑相邻时间步激活分布演变的同时,促进量化区间的连续稳定学习。

Discussion

在本节中,我们讨论了一些额外的直觉和局限性。虽然许多层表现出强烈的时间依赖性,但大约30%的层并未表现出这种相关性。这些层主要位于U-Net的中间块,并受到实例语义信息的强烈影响。此外,我们观察到LDM模型的时间依赖性较少,因此性能提升较小。然而,重要的是要强调,即使在这些情况下,TDQ模块也能确保收敛,在各个时间步上保持一致的输出。这种一致性保证了即便时间依赖性较弱,输出质量仍与现有PTQ/QAT算法相当。

Conclusion

在本文中,我们探讨了扩散模型中激活量化的挑战,特别是时间步中激活的动态变化,并表明现有的静态量化方法未能有效解决此问题。我们介绍了TDQ模块,将其无缝集成到QAT和PTQ中,并基于动态量化区间生成显著提升输出质量。由于我们的方法在推理过程中没有额外开销,我们期望这项研究能在移动和边缘设备的低比特扩散模型中提高性能,同时保持质量。

思考和心得

我看这个期刊最近关于扩散模型相关的量化还是很多的。因为目前我关注的都是量化这一块。个人感觉,量化要最求效果好就势必涉及底层的优化,要追求创新就必须得寻求新的场景(比如这个扩散模型)。唉还好今天得知我之后走的是工程向,我觉得论文还是挺难发的,可恶。

相关文章:

Temporal Dynamic Quantization for Diffusion Models阅读

文章目录 AbstractIntroductionBackgrounds and Related Works2.1 扩散模型2.2 量化2.3 量化感知训练和训练后量化 TemporalDynamic Quantization3.1 量化方法3.2 扩散模型量化的挑战3.3 TDQ模块的实现3.4 工程细节时间步的频率编码TDQ模块的初始化 Experimental SetupResults5…...

828华为云征文|华为云Flexus X实例性能实测:速度与稳定性的完美结合

828华为云征文|华为云Flexus X实例性能实测:速度与稳定性的完美结合 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、实践环境介绍2.1 本次实践环境规划2.2 本次实践介绍 …...

【PyTorch】图像分割

图像分割是什么 Image Segmentation 将图像每一个像素分类 图像分割分类 超像素分割:少量超像素代替大量像素,常用于图像预处理语义分割:逐像素分类,无法区分个体实例分割:对个体目标进行分割全景分割:…...

如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监控视频(上)

目录 一、需求 二、方案 2.1、计划方案 2.2、实施准备 2.2.1所需配置的产品和服务 2.2.1.1云主机 (1)选择云平台 (2)配置云服务器 2.2.2.2视频监控平台软件 (1)视频监控平台软件 (2&am…...

实验2思科网院项目2.7.2-packet-tracer---configure-single-area-ospfv2---实践练习

实践练习 2.7.2-packet-tracer---configure-single-area-ospfv2---实践练习physical-mode 实验拓扑 相关设备配置 实验目标: 第 1 部分:构建网络并配置设备的基本设置 第 2 部分:配置和验证单区域 OSPFv2 的基本部署 第 3 部分:优化和验…...

Nginx实战经验分享:从小白到专家的成长历程!

目录 一、Nginx概述1、Nginx简介(1)事件驱动模型(2)异步处理(3)模块化设计(4)高性能(5)反向代理(6)负载均衡(7&#xff09…...

从画质设置看游戏引擎(其一)

前往我的博客,获取无广告,更好的阅读体验 1. 抗锯齿(Anti-Aliasing) 1.1 锯齿问题的起因 在三维模型的世界中,模型是连续的,但是屏幕像素是不连续,是离散的; 即当一个圆形显示在显…...

#git 问题failed to resolve head as a valid ref

问题如下: 解决方法: 1、运行 git fsck --full 可以查看具体error信息,一般都是head索引问题 2、.git\refs\heads\xxx(当前分支)txt编辑器打开显示乱码,而不是hash编码 3、在.git\logs\refs\heads\xxx&a…...

YOLOv11,地瓜RDK X5开发板,TROS端到端140FPS!

YOLOv11 Detect YOLOv11 Detect YOLO介绍性能数据 (简要) RDK X5 & RDK X5 Module 模型下载地址输入输出数据公版处理流程优化处理流程步骤参考 环境、项目准备导出为onnxPTQ方案量化转化使用hb_perf命令对bin模型进行可视化, hrt_model_exec命令检查bin模型的输入输出情况…...

Python精选200Tips:181-182

针对图像的经典卷积网络结构进化史及可视化 针对图像的经典卷积网络结构进化史及可视化(续)P181--MobileNet【2017】模型结构及创新性说明模型结构代码MobileNet V1版本MobileNet V2版本MobileNet V3 版本Small版本Large版本 P182--EfficientNet【2019】…...

SpringCloud 配置 feign.hystrix.enabled: true 不生效

SpringCloud 配置 feign.hystrix.enabled: true 不生效的原因 feign 启用 hystrix feign 默认没有启用 hystrix,添加配置,启用 hystrix feign.hystrix.enabledtrue application.yml 添加配置 feign:hystrix:enabled: true启用 hystrix 后,访…...

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…...

UI设计师面试整理-作品集展示

在UI设计师的面试中,作品集展示是非常关键的一环。它不仅展示了你的设计技能和风格,也让面试官了解你的设计思维和解决问题的能力。下面是如何有效地准备和展示你的作品集的建议: 1. 选择合适的项目 ● 多样性:选择能展示你在不同领域或平台上的设计能力的项目。确保作品集…...

CMU 10423 Generative AI:lec10(few-shot、提示工程、上下文学习)

文章目录 1 概述2 摘录2.1 zero-shot 和 few-shot一、Zero-shot Learning(零样本学习)特点:工作原理:优点:缺点: 二、Few-shot Learning(少样本学习)特点:工作原理&#…...

做数据抓取工作要如何选择ip池

选择合适的IP池对于数据抓取工作至关重要。一个优质的IP池可以提高抓取的效率和成功率,同时减少被目标网站封禁的风险。以下是选择IP池时需要考虑的一些关键因素: 1. IP类型 住宅IP:住宅IP通常来自真实用户,难以被识别为代理。它…...

防止电脑电池老化,禁止usb或者ac接口调试时充电

控制android系统,开发者模式,开启和禁止充电 连接 Android 手机到电脑的 USB 端口。 下载并安装 Android Debug Bridge (ADB) 工具[1]。 USB: 在命令行中输入 adb shell dumpsys battery set usb 0,以禁止 USB 充电。 在命令…...

智权半导体/SmartDV力助高速发展的中国RISC-V CPU IP厂商走上高质量发展之道

作者:Karthik Gopal SmartDV Technologies亚洲区总经理 智权半导体科技(厦门)有限公司总经理 进入2024年,全球RISC-V社群在技术和应用两个方向上都在加快发展,中国国内的RISC-V CPU IP提供商也在内核性能和应用扩展…...

利用vue-capper封装一个可以函数式调用图片裁剪组件

1. 效果 const cropData await wqCrop({prop:{img,autoCrop: true, // 是否开启截图框maxImgSize: 600,autoCropWidth: 30,canMove: true, // 图片是否可移动canMoveBox: true, // 截图框是否可移动fixedBox: false, // 截图框是否固定}});console.log(cropData);使用wqCrop会…...

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景: 在系统开发过程中,数据导出为 Excel 格式是一个常见的需求。然而,由于各个开发人员的编码习惯和实现方式不同,导致导出代码风格不一。有的人使用第三方库,有的人则自定义实现。这种多样化不仅影响了代码的一致性…...

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…...

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展&#xff0c;智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势&#xff0c;彰显了行业蓬勃发展的活力与潜力。然而&#xff0c;车联网技术的广泛应用也带来了一系列网络安全问题&a…...

Android常用C++特性之std::function

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::function 是 C 标准库中的一个 函数包装器&#xff0c;用于存储、复制、调用任何可以调用的目标&#xff08;如普通函数、lambda 表达式、函数对象、成员函数等&…...

人工智能与机器学习原理精解【27】

文章目录 集成学习集成学习概述集成学习的定义集成学习的性质集成学习的算法过程集成学习的算法描述集成学习的例子和例题Julia实现集成学习 集成学习数学原理一、基学习器的生成Bagging&#xff08;装袋法&#xff09;Boosting&#xff08;提升法&#xff09; 二、基学习器的结…...

XXL-JOB在SpringBoot中的集成

在SpringBoot中&#xff0c;XXL-JOB作为一个轻量级的分布式任务调度平台&#xff0c;提供了灵活的任务分片处理功能&#xff0c;这对于处理大规模、复杂的任务场景尤为重要。以下将详细探讨如何在SpringBoot中利用XXL-JOB实现灵活控制的分片处理方案&#xff0c;涵盖配置、代码…...

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…...

Qt系列-1.Qt安装

Qt安装 0 简介 1.安装步骤 1.1 下载 进入qt中文网站:https://www.qt.io/zh-cn/ Qt开源社区版本:https://www.qt.io/download-open-source#source 1.2 安装 chmod +x qt-online-installer-linux-x64-4.8.0.run ./qt-online-installer-linux-x64-4.8.0.run 外网不能下载…...

《自控原理》最小相位系统

在复平面右半平面既没有零点&#xff0c;也没有极点的系统&#xff0c;称为最小相位系统&#xff0c;其余均为非最小相位系统。 从知乎看了一篇答案&#xff1a; https://www.zhihu.com/question/24163919 证明过程大概率比较难&#xff0c;我翻了两本自控的教材&#xff0c;…...

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…...

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…...

YOLOv11训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示&#xff1a;本文是YOLOv11训练自己数据集的记录教程&#xff0c;需要大家在本地已…...

一个公司主体可以在多个网站做备案/竞价托管哪家便宜

1.content-type 是指 数据在 http网络通信的时候&#xff0c;字符串的类型 2.请求有 发送数据的 content-type,有 可以接收的content-type 3.而 编码格式&#xff0c;只是 这个字符串里面的 字符的 编码格式&#xff0c;content-type是这个字符串的 类型 4.而有些特定的 需求 例…...

access 网站数据库/seo分析工具有哪些

其实每个设计模式都是很重要的一种思想&#xff0c;看上去很熟&#xff0c;其实是因为我们在学到的东西中都有涉及&#xff0c;尽管有时我们并不知道&#xff0c;其实在Java本身的设计之中处处都有体现&#xff0c;像AWT、JDBC、集合类、IO管道或者是Web框架&#xff0c;里面设…...

建设银行网站怎么查开户行/上海网站营销推广

很多朋友对DOM有感冒&#xff0c;这里我花了一些时间写了一个小小的教程&#xff0c;这个能看懂&#xff0c;会操作了&#xff0c;我相信基于DOM的其它API&#xff08;如JDOM&#xff0c;DOM4J等&#xff09;一般不会有什么问题。 后附java代码&#xff0c;也可以下载&#xff…...

手机商场网站制作/谷歌浏览器安卓版下载

给列其别名: SELECT RTRIM(vend_name) ( RTRIM(vend_contry) ) AS vend_title FROM Vendors ORDER BY vend_name; 这种sql做什么事情呢? 分解出一个简单的东西: SELECT vend_name,vend_contry FROM Vendors ORDER BY vend_name; 得到的数据是这样: vend_name vend_contr…...

网站的建设与设计论文/申请友情链接

时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 64M&#xff0c;其他语言128M 热度指数&#xff1a;514583 本题知识点&#xff1a; 分治 题目描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新…...

ic千库网/seo专员是指什么意思

首先感慨下 vivizhyy 现在正在看的这本书——《Flex 完全自学手册》&#xff0c;这本书会让你看后相当有自信心&#xff0c;因为一般你会发现里面的代码不是太 cuo 就是太冗余……好吧&#xff0c;拿书里面给出的单选控件与用户交互的例子来说&#xff0c;书里给的 ① 个解决方…...