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中,并基于动态量化区间生成显著提升输出质量。由于我们的方法在推理过程中没有额外开销,我们期望这项研究能在移动和边缘设备的低比特扩散模型中提高性能,同时保持质量。

思考和心得

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

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

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

相关文章

C99中的变长数组

在C99标准之前,从语言在创建数组的时候,指定数组的大小只能使用常量和表达式,或者数据初始化的时候,可以省略数组大小。 1.int arr[5]{1,2,3,4,4}; 2.int arr[24]{1,2,3,4,5,6}; 3.int arr[]{1,2,3,3,4,5,6}; 这样的语法限制不够灵…

使用 ModelScope Studio 实现可滚动 ChatBot

前面的文章提到过 Gradio 的 Chatbot 不能自动滚动的问题,最近看到了 ModelScope Studio 扩展的一些组件,其中 Chatbot 就完美解决了自动滚动的问题,同时还增加了很多更细化的功能,例如可以设置用户和 AI 的头像。官方文档&#x…

QCamera6.7笔记

1.QCamera​ .h文件 #include <QtWidgets/QMainWindow> #include "ui_QCamera_test1.h" #include <QCamera> #include <QtMultimedia> #include <QtMultimediaWidgets> #include<QMediaCaptureSession> #include <QMediaDevices&…

渗透测试之密码暴力破解工具medusa美杜莎

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

C语言指针详解与应用(不断更新)

指针简介 指针(Pointer)是C语言的一个重要知识点&#xff0c;其使用灵活、功能强大&#xff0c;是C语言的灵魂 指针与底层硬件联系紧密&#xff0c;使用指针可操作数据的地址&#xff0c;实现数据的间接访问 指针生活实例化 指针的本质是地址&#xff0c;在生活中比如你取快…

C++快速入门

文章目录 C快速入门一、命名空间1.初始C2.概念3.命名空间的定义1.普通的命名空间2.命名空间的嵌套3.命名空间的重名问题3.命名空间的展开 二、C的输入&输出三、缺省参数1.全缺省参数2.半缺省参数3.缺省参数的用途4.缺省参数的注意点 四、函数重载1.函数重载的原则2.以下的函…

【RocketMQ】RocketMQ应用难点

&#x1f3af; 导读&#xff1a;本文探讨了RocketMQ中消息重复消费的问题及其解决方案&#xff0c;尤其是在CLUSTERING模式下的扩容影响。文章分析了重复消费的原因&#xff0c;如广播模式、负载均衡模式下的多consumerGroup消费、消费者组内的动态变化及网络延迟等&#xff0c…

婚恋交友系统该如何做才能做到日进斗金?

要使婚恋交友系统实现盈利并做到日进斗金&#xff0c;需要综合考虑市场需求、用户体验、商业模式和营销策略等多个方面。以下是一些建议&#xff0c;旨在帮助构建一个成功且盈利的婚恋交友系统&#xff1a; 深入了解目标市场&#xff1a; 研究目标用户群体的需求、偏好和行为模…

这 5 个自动化运维场景,可能用 Python 更香?

许多运维工程师会使用 Python 脚本来自动化运维任务。Python 是一种流行的编程语言&#xff0c;具有丰富的第三方库和强大的自动化能力&#xff0c;适用于许多不同的领域。 这里插播一条粉丝福利&#xff0c;如果你正在学习Python或者有计划学习Python&#xff0c;想要突破自我…

10款好用的开源 HarmonyOS 工具库

大家好&#xff0c;我是 V 哥&#xff0c;今天给大家分享10款好用的 HarmonyOS的工具库&#xff0c;在开发鸿蒙应用时可以用下&#xff0c;好用的工具可以简化代码&#xff0c;让你写出优雅的应用来。废话不多说&#xff0c;马上开整。 1. efTool efTool是一个功能丰富且易用…

YOLO11震撼发布!

非常高兴地向大家介绍 Ultralytics YOLO系列的新模型&#xff1a; YOLO11&#xff01; YOLO11 在以往 YOLO 模型基础上带来了一系列强大的功能和优化&#xff0c;使其速度更快、更准确、用途更广泛。主要改进包括 增强了特征提取功能&#xff0c;从而可以更精确地捕捉细节以更…

编程魔法:基于LLM的AI function开发,如何实现高效数据生成?

基于大语言模型&#xff08;LLM&#xff09;的AI function开发&#xff0c;简直就是现代编程界的“魔法棒”&#xff01; 你好&#xff0c;我是三桥君 最近三桥君有个任务&#xff0c;需要造一些测试数据&#xff0c;比如姓名、手机号、银行卡号、邮箱啥的&#xff0c;用来做测…

PV大题--专题突破

写在前面&#xff1a; PV大题考查使用伪代码控制进程之间的同步互斥关系&#xff0c;它需要我们一定的代码分析能力&#xff0c;算法设计能力&#xff0c;有时候会给你一段伪代码让你补全使用信号量控制的操作&#xff0c;请一定不要相信某些人告诉你只要背一个什么模板&#…

新手必知的录屏工具及其使用方法详解

你平常会录屏吗&#xff1f;录屏已经成为了一项非常实用的技能。无论是制作教学视频还是记录游戏精彩瞬间&#xff0c;录屏都可以帮我们记录我们在电脑上看到的精彩瞬间。今天我们就一同来探索在电脑上如何录屏吧。 1.福昕录屏工具 链接&#xff1a;www.foxitsoftware.cn/REC…

太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡

FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡 一、板卡概述 该子卡是高速AD9172 DAC和AD9689 ADC的FMC板。为客户提供高达2 GHz 的可用模拟带宽以及 JESD204B 接口&#xff0c;以快速地对各种宽带 RF 应用进行原型制作。 AD芯片AD9689&#xff0c;AD9689-2…

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间&#xff0c;实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性&#xff0c;比较优的配置通常分散在博客文章或邮件列表中&#xff0c;但是往往都没有说明这些设置的实际作…

论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 我们提出了一种轻量级的自适应方法&#xff0c;可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示&#xff0c;在冻结的LLaMA 7B模型上只引入1.2M可学习参数&#xff0c;在8个A100 gpu上进行微调花费不到一个小时。具体来说&#xff0c;我们采用了一…

armbian安装docker

最近又搞了台瑞莎Radxa 3E &#xff0c;从零开始部署unbuntu环境&#xff0c;发现是真曲折啊&#xff0c;虽然有点前车之鉴了 在Armbian上安装Docker&#xff0c;可以按照以下步骤操作&#xff1a; 1、更新软件包列表&#xff1a; sudo apt-get update 2、安装必要的软件包…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数&#xff1f;1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例&#xff1a;静态数组的实现 第二章: 模板的特化2.1 什么是模板特化&#xff1f;2.1.1 模板…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力&#xff0c;能够实现对视频中的特…