从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

1 Introductions

近期,视觉 transformer (vits)成为一项新兴研究,极大地挑战了占主导地位的卷积神经网络(cnns),在诸如分类[9, 13, 18, 22, 44]、目标检测[1, 3, 61]、语义分割[5, 35]等各种图像分析和理解任务上表现出与cnns相当甚至更优的性能,但完全没有了cnns中的卷积机制。尽管在任务性能上取得了成功,正如[54]所指出的,vits架构的一个主要缺点是,与cnns相比,vits在内存占用、计算复杂度以及最终功耗方面的资源效率要低得多。为了使高性能的vits更加环保并普及这项技术,有必要压缩vits模型并降低功耗,以便它们可以被低端计算设备以相同或可比的模型性能访问。

在神经网络压缩的不同分支中,网络剪枝是一种在CNNs上已显示成功的方法,它剪除网络中的冗余神经元或排除计算。在之前的CNN研究中,一些尝试对模型进行非结构化剪枝,移除层权重中的单个神经元;而其他[36, 41]使用结构化剪枝,移除通道方向的神经元。与非结构化剪枝相比,后者的结构化方案具有很高的数据局部性,因此对硬件更友好[2],因为它通过简单地移除权重矩阵中的整行或整列更容易实现计算加速,但由于剪枝粒度较粗,会导致严重的准确度下降,因此它是一种更具挑战性的剪枝方案。

然而,对于主要由线性层(矩阵乘法)组成的 Transformer 架构,块结构化(半结构化)剪枝在准确性和硬件加速之间是一个更好的折中方案,因为GEMM以块对块的方式进行矩阵乘法。因此,在相同的剪枝比例下,与块稀疏矩阵的乘法可以实现比非结构化矩阵更快的加速,同时仍然保持高准确度。各种剪枝方案的定性比较总结在图1中。在NLP领域的先前研究[30, 37]在语言模型(BERT[11],MobileBERT[42]等)上验证了块结构化剪枝,实现了超过的速度提升,且性能下降可以忽略不计。然而,它们的其他剪枝方案相对过时,例如,普通的剪枝标准。在ViTs上进行类似尝试以应对各种视觉任务的研究仍然很少。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

图1:不同稀疏方案在模型准确性和硬件加速方面的折中。

在这项工作中,作者为ViTs提出了一种新颖的块结构化剪枝方法,以块为基础剪除参数,以实现准确性和效率之间的更好折中。作者以一种同时保持剪枝模型准确性和最小化计算操作数量的方式制定学习目标。在目标中融入了硬件感知的约束,以在推理阶段提升加速和降低功耗。此外,作者提出了一种快速的优化方法来利用二阶泰勒近似求解目标函数。经过等价的重新公式化,作者能够非常高效地求解目标(对于经验数据收集,相对于网络大小,二次到三次复杂度,对于方程求解,线性时间复杂度)。据作者所知,这是第一篇介绍块结构化剪枝方案并针对ViTs提出硬件感知的后训练剪枝方法的论文。主要贡献总结如下:

作者系统地制定了在块结构化剪枝方案下针对ViTs模型的最佳硬件感知剪枝目标,它直接优化模型准确性和功耗。功耗完全估计,无需构建任何经验查找表(LUTs),使它成为一种轻量级方法,且优化不需要额外的开销。所提出的剪枝方案仅依赖于减少参数化层的连接,而不操纵跳过配置和标记剪枝。作者接着为提出的硬件感知目标函数提供一个有效的解决方案,通过二阶泰勒近似,并提出了一种经验优化方法,仅具有线性时间复杂度。随着权重的剪枝,从片外内存到片上内存的读写所需参数更少,从而实现内存减少和显著功耗降低。大量实验证明了作者方法的有效性。在包括DeiT-B、DeiT-S、Swin-T、Swin-B等在内的各种深度ViTs架构上的结果表明,与现有技术水平相比,作者的方法明显表现更优,在专用硬件上加速高达,在GPU上高达。在真实世界的GPU上,推理功耗降低。2 Related WorksVision Transformers (ViTs)

在自注意力机制为基础的 Transformer 架构在自然语言处理领域取得成功[46]之后,基于 Transformer 的视觉模型也开始在图像领域取得进展,并在各种场景中成为传统卷积神经网络(CNNs)的有力竞争者,如目标检测[3, 61]、分割[5]等。ViT[12]首次尝试将多头注意力(MHA)架构引入图像模态,并在大规模数据集上的图像分类任务中超越CNN的性能。后来,DeiT[45]采用相同的架构但通过基于token的知识蒸馏来增强表示学习,进一步提升了原始ViTs的性能。MAE[22]引入了一种监督技术,在 Mask 图像重建的预训练任务上训练ViT编码器,并在ImageNet分类任务上取得了最先进的表现。Swin Transformer[35]利用了移位窗口来引入窗口间信息交换并增强局部注意力。Transformer-iN-Transformer(TNT)[19]通过在每个 Transformer 块内的嵌套自注意力来聚合图像的块 Level 和像素 Level 的表示。

Pruning on CNNs

卷积神经网络(CNN)的剪枝研究已经进行了数十年。大量的剪枝方法可以根据稀疏程度被分为非结构化剪枝、半结构化剪枝、结构化(通道/滤波器级)剪枝等。

非结构化剪枝 从卷积核中移除单个连接(神经元),这是由开创性工作[20, 21]最早建立起来的剪枝方案,这些工作尝试对LeNet和AlexNet进行非结构化剪枝。随后,[15, 39, 40, 59]采用基于幅度或泰勒的准则重要性得分来全局地阈值低分连接。[14, 17]利用架构启发式来确定逐层剪枝率。一些努力[31, 32, 39]考虑剪枝对模型输出的影响来确定逐层剪枝率。[24]假设CNN权重的拉普拉斯分布来近似输出失真。[48, 50]利用率失真理论推导出实现最优率失真性能的逐层剪枝比。

结构化剪枝 或通道/滤波器级剪枝方案一次性地剪除卷积层中的整个核或全连接层中的通道。[36]使用特征图重要性作为确定可移除通道的代理。[23]采用基于正则化的结构剪枝方法。[53]通过在最终响应层传播得分来获得通道级重要性得分。[33]利用特征图的排名信息来确定可剪枝通道。[48]利用率失真理论剪除导致模型准确度下降最小的通道。[41]对通道进行一阶重要性评估,并通过解决整个网络中所有通道重要性的背包问题来分配稀疏性。

半结构化剪枝 是一种探索较少的方法,它利用非结构化和结构化剪枝之间的稀疏模式,其中像matmul中的块稀疏性可以通过利用GPU计算的性质极大地提升现实世界的加速[30, 37]。由于稀疏模式比结构化剪枝更为温和,因此移除神经元对模型准确度的影响小于结构化剪枝。然而,半结构化剪枝在新兴的ViTs(主要由大部分全连接层的 Transformer 编码器架构构建)上的探索还不够充分。

Sparsity in ViTs

在见证了CNN剪枝的成功之后,ViT(视觉 Transformer )的剪枝也开始受到越来越多的关注。与CNN剪枝相比,纯权重剪枝的努力较少,而更多关注于 Token 、多头自注意力(MHA)等的剪枝。SViTE [6] 首先提出在结构化剪枝方案下,通过稀疏训练对ViT进行 Token 和自注意力 Head 的剪枝。UVC [55] 推导出一个混合优化目标,统一了针对ViT权重、 Token 和跳跃连接配置的结构化剪枝,以实现ViT的稀疏训练。SPViT [27] 只在注意力头上进行 Token 剪枝,但采用延迟约束以在边缘设备上最大化加速。[51] 采用Nvidia的Ampere 2:4稀疏结构以实现高加速,但需要结构约束确保qkv、前馈和投影层( Head 对齐)的维度匹配,从更大的ViT变体中搜索子网络以匹配较小网络的延迟。与之前的工作 [51, 54] 不同,作者的方法专注于纯权重剪枝方案,并且不需要对不同压缩方案的协调进行繁重的搜索。

一些工作 [49, 56, 26, 47] 通过引入稀疏和局部注意力模式来稀疏化重的自注意力,用于语言模型。[7] 尝试在ViT上应用,但这些稀疏注意力方案仍然需要从头开始训练。

3 MethodologiesPreliminaries

层内块结构剪枝。 作者针对所有线性层权重的块结构剪枝进行了研究,这包括ViTs中的任何参数化线性层,例如qkv层、前馈和投影层。这些权重矩阵中的神经元以2维固定大小的块为单位进行分组,作为剪枝的目标。为了确定哪些块需要被剪枝,给定一个块结构,对于每个矩阵,作者根据每个块内神经元的1阶泰勒展开分数的平均值对块进行排序。从数学上讲,作者首先通过泰勒展开获得神经元分数,类似于[38],然后进行2D平均池化以获得每个块的分数(是非负实数集)。然后,给定每个层的剪枝比例,作者可以根据它们的分数对块进行排序并消除排名靠后的块。图2最右侧部分真实地展示了从ViTs生成的块结构模式。上述剪枝方案可以表示为,其中是在剪枝比例下从前一个块分数矩阵生成的二值 Mask 。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

ViTs的剪枝方案。 与之前的工作不同,本文的工作范围仅限于消除模型参数以减少计算量,而不考虑ViTs的其他方面,如 Token 数量、 Token 大小和 Transformer 块跳过[6, 27, 55]。

作者进一步采用了一个关于典型剪枝操作对权重造成的权重扰动的基本假设:

假设1:_各层间独立同分布权重扰动[58]:这意味着联合分布的均值为零:_

forall 0

并且协方差为零:.Hardware-aware pruning objective

由于各层可能对模型性能的贡献不同[16],已提出了各种标准来在给定总预算的情况下分配逐层稀疏性[24, 31, 32, 50]。然而,大多数现有的剪枝目标可以概括为在计算约束下最小化模型输出准确度,而没有明确考虑实际功耗和加速。相比之下,作者的压缩剪枝目标直接优化功耗以达到特定的计算减少目标(FLOPs)。具体来说,给定一个由层及其参数集组成的神经网络,其中是第层的权重,对中的剪枝参数将得到一个新的参数集。作者将剪枝的影响视为网络输出与之间的距离。

图2:所提出的低功耗半结构化剪枝方法的图解。在ViT块内不同层的宽度展示了单层的计算复杂度(FLOPs)。作者首先提取了预训练ViTs中所有具有可剪枝权重的层,然后根据方程12获得经验曲线-与-稀疏性。作者进一步根据各层对功耗的贡献计算特定于层的目标斜率,并在目标斜率与曲线相切时选择逐层剪枝比例。最后,作者根据它们的剪枝比例以块结构化稀疏度剪枝层权重,并对剪枝后的ViTs进行微调。图中右侧是当两个维度的块大小相同时的块稀疏模式示例,但它们在实验部分不必相同。

因此,作者的学习目标如下:

这共同最小化了剪枝引起的输出失真(第一项)以及估计的功耗,在一定的FLOPs减少目标下。

Second-order Approximation of Output Distortion

为了解决剪枝目标,作者将与输出失真相关的第一项分解。首先,作者使用二阶泰勒展开来展开输出失真 :(从现在起为了视觉清晰,省略上标)

其中 是第 层权重的海森矩阵。

然后考虑目标方程 2 中 L2 范数的平方的期望,它可以被重写为向量的内积形式:

当作者进一步展开内积项时,每一对不同层次 的交叉项是:

当作者讨论随机变量 的影响时,一阶和二阶导数 和 可以被视为常数,因此可以移出期望之外。同时,在期望内向量转置是无关紧要的。因此方程式 5 变为:

在上述等式中,四个交叉项可以使用假设1发现它们也都等于零。因此,方程式4的期望值仅包含层内项:

其中,公式部分保持原始输出,文本内容按照要求翻译成了简体中文。

Power consumption under Block-structured Pruning

由于网络推理的大部分功耗归因于矩阵乘法操作,可以通过累加每个线性层的块稀疏矩阵乘法的单个功耗来估计网络功耗。考虑一个矩阵 (通常是输入张量),与具有块结构和剪枝掉-百分比的块稀疏权重矩阵 相乘。当使用在维上配置了 Kernel 网格大小的块稀疏GEMM时,块稀疏矩阵乘法的功耗可以估计为

其中 是单个块内矩阵乘法的功耗。因此,可以通过将所有层的网络功耗相加来获得方程2中的第二项:

其中 和 可以被吸收到权重系数 中,因为它们仅取决于硬件参数和GEMM配置,这些配置在所有层中是统一的。

最终目标。 结合方程7和方程9,最终目标可以重新表述为:

度加剪辑 度加剪辑

度加剪辑(原度咔剪辑),百度旗下AI创作工具

度加剪辑 63 查看详情 度加剪辑

约束条件:操作的浮点运算次数比例 。

Finding Solution to Pruning Objective

在这一点上,作者可以通过应用拉格朗日公式[48, 50]进一步解决方程10在逐层剪枝比例集上的优化问题

在实际中,作者可以去掉方程11中的天花板函数,因此:

在 之上成立。

这将给出一个连续的 与原始有天花板函数的解相比,但在实践中,由于权重张量内的块数是有限的,剪枝比例 无论如何都要取整到离散值。求解方程12需要收集所有层的经验曲线(剪枝比例 对 Taylor 二阶项 )。通过设置特定的 ,作者可以为每个层单独求解方程12,通过寻找一个让等式成立的 。通过遍历 ,可以得到剪枝比例的最终解,使得剪枝网络最接近约束 。

从优化解方程12中,作者可以得到一个关键见解:通过控制权重 ,功耗以改变曲线 的目标斜率的形式明确地包含在优化过程中,这表示剪枝一个层对最终模型精度(输出失真)的影响程度。这样,作者实现了模型精度和功耗之间的直接权衡。

Empirical Complexity

Hessian近似。 对于经验网络,作者使用经验Fischer信息矩阵[29]来近似Hessian矩阵 :

其中,表示单位矩阵,表示第个样本的损失函数对权重的梯度。

为了在校准集上获得经验曲线 ,可以遍历不同的剪枝比例(例如实践中 alpha_{k}=frac{k+1}{K},0

以下是不包含公式部分的文本翻译:

… (此处保留原始公式)

将子向量 的维度表示为 ,等于(从 变化到 的值数量,等式14中的乘法计算可以在低维度上进行,其中 是从原始向量和中索引出的子向量和子矩阵。在 时, —— 即没有任何剪枝,这保证了 。由于 线性增加,,因此,复杂度大约为 。因此,计算所有 层的 的总计算复杂度大约为 ,这远低于原始复杂度。

就此,作者提出了一种明确考虑块结构稀疏模型推理中功耗的硬件感知剪枝准则。块结构剪枝方案使得获得的稀疏网络在实际硬件上实现加速的同时,最优地保持了网络精度。该算法极其高效地获得稀疏的ViT模型。

4 ExperimentsDatasets and Benchmarks

作者广泛评估了作者的ViTs剪枝方法在图像分类任务以及下游图像分割任务上的表现。对于分类任务,作者主要在ImageNet数据集[28]上对Deit [45]模型以及Swin Transformers [35]进行实验。作者在ViTs的微调中采用了与UVC [54]相同的训练设置。对于图像分割,作者在Cityscapes数据集[10]上测试了SETR [57]模型中DeiT-Base Backbone 网的迁移性能。更多的实现细节可以在附录材料中找到。

基准方法。在以下实验中,作者遵循UVC [54]的比较设置,并将自己与前期的ViTs压缩方法进行比较,这些方法至少涉及模型权重剪枝,以及混合方法,包括SCOP [43]、VTP [60]、SViTE [6]、X-Pruner [52]和UVC [54]本身。作者还包括了一个针对Deit-Base的均匀剪枝结果,其中为所有层固定一个均匀的剪枝比例。

Main results

正如表1所示,作者首先注意到,在Deit-Small上的结果表明,作者的方法在不损失性能的情况下,甚至比密集模型高出0.89%,而FLOPs大致相同,大幅超过了现有 Baseline 。在更大的架构DeiT-Base上,作者的方法虽然提升不太明显,但在Top-1准确率上仍然保持了一致,在剩余50% FLOPs时达到80.81%,在大约45% FLOPs时达到80.55%。这是一个直观的观察,因为像结构剪枝这样的更粗糙的剪枝模式会对较小模型性能造成更大的伤害,而对于具有更多冗余权重的大型模型则影响较小,这也是像作者提出的块稀疏性这样的小结构能够在确保比无结构剪枝更快加速的同时保留更多性能的原因。在DeiT-Small上,作者超越了所有现有的混合方法,这些方法利用了 Patch 瘦身或标记选择。在更大的模型DeiT-Base上,作者仍然具有竞争力,同时作者注意到SViTE不能实现与作者相等的FLOPs减少。对于非全局注意力 Transformer ,如Swin Transformer,LPViT与其他ViT剪枝方法相比仍然具有竞争力,在FLOPs 71.7%时,Swin-Tiny上的性能仅下降1.96%。作者在Swin-Base上也仅报告了1.77%的下降。尽管DeiT-B上的参数比DeiT-S多,但作者在这上面的提升较少。尽管这可能看起来违反直觉,但原因可能是在微调阶段,较大的模型更容易过拟合,因此无法完全恢复准确性。这也可能是由于剪枝的正则化效果,有利于OOB数据性能,这在许多先前论文中已被发现[34]。同时,LPViT是一个通用框架,也支持与其他稀疏性集成。当与注意力和标记剪枝结合使用时,LPViT进一步提高了DeiT-Base和Swin-Tiny的准确性,甚至使用更少的FLOPs。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

Hardware Performance Benchmarks

作者在三种类型的硬件平台上评估了剪枝模型的推理效率,包括速度提升和功耗降低,并在表2中总结了结果。首先,作者在支持各种块大小的GEMM的RISC-V平台ViTA [4]上模拟了ViTs的统计数据,这使得作者能够实现块稀疏模型的的理论速度提升。通过作者的方法,DeiT-Base和DeiT-Small分别获得了高达和的速度提升。然后,作者在高带宽平台Google TPU-V3 [25]上进行模拟。由于TPU V3只提供了一种固定为块大小的MAC,作者预计其速度提升不如RISC-V。尽管如此,对于DeiT-Base,作者仍然看到了正的速度提升。最后,作者在NVIDIA A100 40GB GPU上部署了模型,并使用CUDA 11.8评估了端到端推理时间和运行时功耗,观察到DeiT-Base的功耗降低了多达71.8%。功耗是通过在足够的时间段内平均nvidia-smi的功率计并减去空闲功耗来测量的。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

图3显示了将模型剪枝到不同大小时的结果,即不同剪枝水平下的推理时间和准确度。具体来说,每个点代表特定剪枝配置的一个结果。在图3中,作者观察到在VITA上,DeiT-B比DeiT-S获得了更好的权衡,而在TPU和GPU上,DeiT-S表现更好。这表明不同的硬件平台上,模型的表现可能会有所不同。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

Ablation Study and Discussions

除了主要结果之外,作者还试图发现作者提出的剪枝方案中每个创造性部分如何对最终结果做出贡献,例如基本的-objective约束调节功率消耗和块稀疏结构,并回答诸如功率约束为何有利于性能等重要问题。作者在表3和表4中展示了详细的消融研究。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !
从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

功率约束。作者将带有与不带有方程10中第二项功率消耗的剪枝目标的行为进行了比较。如表3所示,作者注意到在相同的FLOPs降低率50%下,作者最终的剪枝方案(带有功率约束)在不同的块形状下始终给出显著更高的结果。这是一个鼓舞人心的现象,因为功率约束并非旨在首先提高模型准确度。通过检查模型稀疏性,作者了解到提出的功率约束寻找具有更大matmul维度的层,以分配更多的剪枝配额以实现最大程度的计算减少,而且通常更大的层具有更多的参数冗余。因此,这种剪枝比例分配实际上与主要目标协同工作,以最小化输出失真。

块结构配置。作者的优化方案如何适应不同的块大小配置对于在不同的硬件平台上,具有不同并行度的一般化至关重要。因此,作者进行了消融研究,变化不同的块形状组合,如表4所列。首先,作者观察到较小的块大小保留了更多的模型准确度。其次,作者注意到较小的网络对于块形状的变化更为敏感,不同的块大小导致网络中剩余参数数量的剧烈变化。

逐层稀疏性分配。作者如下展示了每个单独设置的优化结果。作者注意到一些有趣的观察。首先,LPViT在DeiT-B和DeiT-S的不同剪枝比例下,在最后的 Transformer 块中保留了更多的连接,包括分类头,并且分类头在所有情况下几乎都未被剪枝。其次,在DeiT-B和DeiT-S上,作者注意到特别是在MHA之后的投影层总是得到高剪枝比例,表明ViTs中的投影层具有更多的冗余,对模型性能的影响最小。上述模式都是自动从作者的二阶剪枝逐层稀疏性分配算法中学习的,显示出作者方法的有效性。

4.2.2 Self-attention Maps.

图4:使用文献[8]中提供的可视化工具,展示了DeiT-Base、SViTE-Base结构化/非结构化剪枝模型以及作者的LSP-DeiT-Base模型(12层和12个注意力头)的注意力概率。

从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !
从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !

如图4所示,作者遵循文献[6, 8]中采用的相同的自注意力图可视化过程,以展示剪枝对 Transformer 多注意力头中注意力行为潜在影响的。作者观察到,作者的LSP块稀疏剪枝方案在许多 Transformer 块的注意力头中显示出粗糙和离散化的模式,伴随着一些完全不活跃的注意力头,这使得作者可以通过直接跳过这些注意力头来进一步加速推理。与结构化剪枝方案相比,作者的半结构化方案允许在空白注意力和密集模型中的精细模式之间的中间状态,保留了更多对模型精度至关重要的注意力信息。在LSP-DeiT-Base(FLOPs 45%)上,最后两个注意力层没有活跃的注意力头。因此,在计算中可以完全丢弃这些块,这可能会使报告的FLOPs减少更多。

迁移学习到底层任务。 为了评估LPViT在下游任务上的泛化能力,作者进一步评估了作者的方法在下游Cityscapes [10] 分割任务上的迁移学习性能。作者首先在ImageNet上对DeiT-B/384模型进行了50% FLOPS的剪枝预处理,训练了27个周期,然后将其作为最近分割模型SETR [57] 的主干,并在Cityscapes数据集上进行训练。表5比较了剪枝主干和原始性能的验证mIoU。作者只观察到性能降低了1.27 mIoU。

5 Conclusions

在这项工作中,作者提出了一种新的视觉 Transformer (ViTs)权重剪枝算法,旨在降低推理过程中的能源消耗。

利用ViT架构以线性层为中心的结构,作者引入了一种半结构化的剪枝方案,以平衡微调稳定性和硬件效率。尽管采用了基于海森的剪枝准则,但作者的算法仍然非常高效。

在ImageNet上对各种ViTs进行的实验结果表明,该方法能够找到最优的剪枝解决方案,最大限度地提高块稀疏模型的准确性。

此外,作者还展示了作者提出的考虑功率意识的剪枝目标的双重好处,即提高了软件准确性和硬件加速。

参考

[1].LPViT: Low-Power Semi-structured Pruning for Vision Transformers.

以上就是从 DeiT-B 到 DeiT-S,块结构化剪枝在深度 ViTs上 的应用 !的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/462890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 04:12:51
抖音极速版如何发作品上传视频
下一篇 2025年11月8日 04:12:59

相关推荐

  • 将 double 类型窄化为 float 类型时出现不兼容的返回类型

    本文旨在解决在 Java 中将父类的 double 类型返回值在子类中覆盖为 float 类型时遇到的类型不兼容问题。我们将深入探讨问题的原因,并提供使用泛型来解决此问题的有效方法,帮助开发者避免类似错误,并编写更健壮和灵活的代码。 问题分析:返回类型不兼容的原因 在面向对象编程中,子类可以覆盖(O…

    2026年9月24日
    500
  • Hackone 环境搭建

    Hackone 环境搭建Hackone 环境搭建Hackone 环境搭建Hackone 环境搭建

    在hackone环境搭建过程中,网络环境的设置至关重要。我们将通过vmware和一系列工具和配置来实现这一目标。以下是详细的步骤和说明: 首先,我们从Vmware开始,创建一个新的虚拟机,并选择适当的操作系统镜像。在这个案例中,我们选择了openwrt-x86-64-generic-squashfs…

    2026年9月23日 用户投稿
    000
  • 前端危!Gemini 3 内测结果获网友一致好评,“有史以来最强前端开发模型”

    前端危!Gemini 3 内测结果获网友一致好评,“有史以来最强前端开发模型”前端危!Gemini 3 内测结果获网友一致好评,“有史以来最强前端开发模型”前端危!Gemini 3 内测结果获网友一致好评,“有史以来最强前端开发模型”前端危!Gemini 3 内测结果获网友一致好评,“有史以来最强前端开发模型”

    谷歌下一代旗舰模型gemini 3未发布便已悄然走红! 原因很简单:强,实在是太强了。 在国外社交媒体平台上,一大波网友激动地分享了 Gemini 3 的内测结果—— 从曝光的这些案例来看,Gemini 3尤为擅长前端、SVG 矢量图生成,而且多模态能力变得更强。 立即学习“前端免费学习笔记(深入)…

    2026年9月23日 用户投稿
    100
  • 在Laravel中向视图传递多个变量的几种方法

    本文旨在探讨在laravel框架中,如何高效且正确地从控制器向视图传递多个变量。我们将详细介绍使用单个关联数组、`compact()`辅助函数以及链式调用`with()`方法这三种核心策略,并提供实用的代码示例和最佳实践,确保开发者能够灵活地管理视图数据,提升应用的可维护性与可读性。 Laravel…

    2026年9月23日
    000
  • VSCode如何通过AI优化内存使用 VSCode智能内存分析调试插件

    ai并不能直接优化vscode的内存占用,而是通过赋能智能化的内存分析调试插件,间接提升vscode的运行效率和开发体验;2. 这类插件通过采集堆快照、cpu性能数据、gc日志和扩展资源消耗等运行时信息,结合ai的模式识别与异常检测能力,精准识别内存泄漏、未清理的事件监听器、循环引用等问题;3. a…

    2026年9月23日
    300
  • 【Linux】初识线程

    【Linux】初识线程【Linux】初识线程【Linux】初识线程【Linux】初识线程

    一、线程的概念 线程是操作系统能够进行运算调度的基本单位,它被包含在进程之中,是进程中的实际运作单位。 定义与基本特征 轻量级实体:线程是比进程更小的可独立运行的基本单位,也被称为轻量级进程。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等,但每个线程都有自己独立的程序计数…

    2026年9月23日 用户投稿
    000
  • 苹果M4 Max芯片对决英特尔i9-14900K:跨架构巅峰对决,专业创作效率谁主沉浮?实测见分晓!

    M4 Max单核领先、多核微超i9-14900K,GPU与能效优势显著,尤其在Final Cut Pro等专业场景表现突出,而i9-14900K依赖强大扩展性与全平台兼容性,二者代表不同技术路线的巅峰对决。 苹果M4 Max和英特尔i9-14900K代表了两种不同的技术路线,一个专为能效与集成度优化…

    2026年9月23日
    300
  • 如何使用AutoKeras训练AI大模型?自动构建神经网络的指南

    AutoKeras在AI大模型训练中扮演“智能建筑师”角色,通过自动化神经架构搜索与超参数优化,加速模型开发迭代。它基于Keras/TensorFlow,支持图像、文本、结构化数据任务,提供ImageClassifier、TextClassifier等接口,用户只需设定max_trials和epoc…

    2026年9月23日
    400
  • 如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    TensorFlow Lite通过模型转换、量化、剪枝等优化手段,将训练好的大模型压缩并加速,使其能在移动端高效推理。首先在服务器端训练模型,随后用TFLiteConverter转为.tflite格式,结合量化(如Float16或全整数量化)、量化感知训练、剪枝和聚类等技术减小模型体积、提升运行速度…

    2026年9月23日 用户投稿
    100
  • 悟空浏览器提示“喔唷,崩溃了”怎么修复_悟空浏览器页面崩溃问题解决方案

    答案:清理缓存、关闭多余标签页与插件、更新或重装应用、关闭硬件加速可解决悟空浏览器崩溃问题。具体操作包括在设置中清理缓存和数据,通过多窗口管理关闭无用页面,禁用或卸载可疑扩展,前往App Store更新或重新安装应用,以及在高级设置中关闭硬件加速功能以提升稳定性。 如果您在使用悟空浏览器时遇到“喔唷…

    2026年9月23日
    700
  • 谷歌浏览器视频全屏模式声音延迟如何修复

    谷歌浏览器视频全屏模式声音延迟如何修复谷歌浏览器视频全屏模式声音延迟如何修复谷歌浏览器视频全屏模式声音延迟如何修复谷歌浏览器视频全屏模式声音延迟如何修复

    关闭硬件加速可解决谷歌浏览器全屏视频声音延迟问题。依次尝试:1. 关闭硬件加速并重启浏览器;2. 重置chrome://flags实验性功能;3. 清除全部缓存数据;4. 更新Chrome版本及显卡音频驱动。若仍存在延迟,需对比不同网站或设备以判断故障源。 谷歌浏览器在视频全屏模式下出现声音延迟,通…

    2026年9月23日 用户投稿
    300
  • 谷歌浏览器窗口透明边框显示异常如何修复

    首先尝试修改快捷方式添加–disable-gpu –disable-software-rasterize参数,若可正常运行则关闭硬件加速,并重置chrome://flags实验功能及清除ShaderCache缓存文件。 谷歌浏览器出现窗口透明边框显示异常,通常和硬件加速或GP…

    2026年9月22日
    100
  • 如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    Dask在处理超大规模数据集时的独特优势在于其Python原生的分布式计算能力,能无缝扩展Pandas和NumPy的工作流,突破单机内存限制,实现高效的数据预处理与模型训练。它通过惰性计算、分块处理和内存溢写机制,支持TB级数据的并行操作,相比Spark提供了更贴近Python数据科学生态的API和…

    2026年9月22日 用户投稿
    200
  • 如何扫描Linux本地网络 nmap基础扫描技巧

    如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧如何扫描Linux本地网络 nmap基础扫描技巧

    快速扫描整个子网可使用 sudo nmap -sn 192.168.1.0/24,用于发现活跃主机;若防火墙屏蔽icmp请求,可加 -pe 参数提高准确性。2. 扫描单台设备开放端口用 sudo nmap 192.168.1.100,默认扫描1000个常见端口,或加 -p- 扫描全部端口,并可用 -…

    2026年9月22日 用户投稿
    300
  • VS Code启动优化:扩展延迟加载与缓存策略

    合理管理扩展加载与缓存可显著提升VS Code启动速度。通过配置activationEvents实现按需激活、利用Extension Storage和CachedDataDir优化数据读取,并禁用非核心扩展,结合“Developer: Show Running Extensions”分析耗时,有效缩…

    2026年9月22日
    100
  • 如何在PyTorchGeometric训练AI大模型?图神经网络的训练方法

    如何在PyTorchGeometric训练AI大模型?图神经网络的训练方法如何在PyTorchGeometric训练AI大模型?图神经网络的训练方法如何在PyTorchGeometric训练AI大模型?图神经网络的训练方法如何在PyTorchGeometric训练AI大模型?图神经网络的训练方法

    PyTorch Geometric中训练大型GNN模型的核心挑战在于内存管理与计算效率,需通过邻居采样、子图采样等技术实现高效数据加载;采用GraphSAGE、PinSAGE等可扩展模型架构;结合梯度累积与混合精度训练优化资源利用;利用稀疏张量存储、特征降维、ClusterLoader等策略进行内存…

    2026年9月22日 用户投稿
    100
  • VSCode 怎样自定义代码运行的动画效果 VSCode 代码运行动画效果的自定义方法​

    vscode本身不支持电影特效式的自定义代码运行动画,其核心设计注重功能与效率;2. 实现更生动的视觉反馈主要依赖内置机制和扩展:状态栏指示器、输出面板滚动、调试高亮等是默认反馈方式;3. 可通过安装测试运行器扩展(如jest runner、python test explorer)实现测试进度条、…

    2026年9月22日
    200
  • PHP数组如何定义和使用_PHP数组定义与使用详细教程

    PHP数组是存储和管理多个值的核心工具,支持索引、关联、混合及多维结构;通过方括号定义,可灵活访问、修改、添加或删除元素,并利用foreach高效遍历。 PHP数组是存储一系列值的强大工具,无论这些值是简单的数据项,还是更复杂的结构。它的核心思想就是把一堆相关的数据“打包”在一起,通过一个统一的名字…

    2026年9月22日
    000
  • VSCode搭建FPGA与ROS通信环境(机器人控制,硬件加速指南)

    VSCode可高效集成FPGA与ROS开发,通过远程SSH连接实现跨环境代码编辑、任务自动化与调试,结合FPGA通信接口设计与ROS节点开发,统一硬件与软件工作流,提升开发效率。 将VSCode作为FPGA与ROS通信的集成开发环境是完全可行的,甚至可以说,它是一个非常高效且灵活的选择。核心在于利用…

    2026年9月22日
    200
  • UC浏览器占用内存太高怎么办_UC浏览器内存占用高优化方案

    UC浏览器内存占用过高可通过清理缓存、关闭多余标签页、禁用插件和开启省电模式解决。首先清除浏览数据释放资源,其次减少同时开启的标签页数量以降低内存压力,接着管理扩展程序避免后台消耗,最后启用性能优化功能减少资源使用,提升整体运行效率。 如果您在使用UC浏览器时发现设备运行缓慢或应用响应迟缓,这很可能…

    2026年9月22日
    100

发表回复

登录后才能评论
关注微信