双空间知识蒸馏用于大语言模型

Dual-Space Knowledge Distillation for Large Language Models

发表:EMNLP 2024

机构:Beijing Key Lab of Traffic Data Analysis and Mining

连接:https://aclanthology.org/2024.emnlp-main.1010.pdf

代码:GitHub - songmzhang/DSKD: Repo for the EMNLP'24 Paper "Dual-Space Knowledge Distillation for Large Language Models". A general white-box KD framework for both same-tokenizer and cross-tokenizer LLM distillation.

Abstract

知识蒸馏(Knowledge Distillation, KD)被认为是一种有前景的方案,可以通过将大型语言模型(LLMs)中的知识迁移到较小的模型中,从而实现模型压缩。在这个过程中,白盒知识蒸馏方法通常通过最小化两个模型输出分布之间的距离,以传递尽可能多的知识。然而,在当前的白盒KD框架中,这些输出分布来自各自模型独立的输出空间,即它们使用各自的预测头。我们认为,这种空间差异会导致教师模型与学生模型在表示层面和分布层面上的相似性较低。此外,这种差异也阻碍了使用不同词汇表的模型之间的知识蒸馏,而这在当前的LLMs中是很常见的现象。为了解决这些问题,我们提出了一种双空间知识蒸馏(Dual-Space Knowledge Distillation, DSKD)框架,该框架统一了两个模型的输出空间以实现知识蒸馏。在DSKD的基础上,我们进一步开发了一种跨模型注意力机制(cross-model attention mechanism),该机制可以在词汇表不同的情况下自动对齐两个模型的表示。因此,我们的框架不仅兼容现有框架中常用的各种距离函数(例如KL散度),还支持任何两个LLMs之间的知识蒸馏,无论它们是否使用相同的词汇表。在任务无关的指令跟随基准测试中,实验结果表明:与当前白盒KD框架(无论使用哪种距离函数)相比,DSKD取得了显著更好的性能,同时也优于现有用于不同词汇表LLMs之间蒸馏的方法。

1 Introduction

现有的大型语言模型(LLMs)由于其庞大的模型容量,在各种任务中展现出了强大的泛化能力(Chowdhery 等,2023;Touvron 等,2023;OpenAI,2023)。基于对“扩展法则”(scaling law,Kaplan 等,2020)的信念,当前LLMs的参数规模不断扩展,以追求更高的智能水平。然而,参数规模的不断增长也带来了现实场景中部署成本高昂的问题。为了解决这一问题,知识蒸馏(Knowledge Distillation,KD;Hinton 等,2015)被认为是一种前景广阔的解决方案,能够在可接受的性能损失下压缩大型模型。

在KD过程中,大模型通常作为教师模型,向一个较小的模型(即学生模型)提供监督信号,从而将其知识和能力传递给轻量级的学生模型。

目前,用于LLMs的KD算法主要有两种框架:黑盒KD和白盒KD。黑盒KD使用教师模型生成的解码序列作为学生模型的训练数据,并直接在one-hot标签上优化交叉熵损失(Kim 和 Rush,2016;Fu 等,2023;Li 等,2023)。相比之下,白盒KD方法通常通过最小化教师与学生的输出分布之间的距离(例如KL散度),在理论上能够传递更多信息,且通常比黑盒KD表现更优(Wen 等,2023;Gu 等,2023;Ko 等,2024)。尽管白盒KD框架展现出了其优势,但该框架下的教师和学生的输出分布来自不同的输出空间,因为它们是由各自不同的预测头生成的。

在本研究的开始阶段,我们首先揭示了该框架中由于输出空间不一致所导致的两个固有局限:

  • 教师-学生相似性低:当前框架通常在表示层面和分布层面都导致教师与学生之间的相似性较低(见第2.2.1节);

  • 需要相同词汇表:当前白盒KD框架的一个关键前提是教师模型与学生模型应使用相同的词汇表,而在当今各种LLMs中,这一点却很难满足(见第2.2.2节)。

针对这些限制,我们提出了一个新的白盒KD框架,称为双空间知识蒸馏(Dual-Space Knowledge Distillation,DSKD)。该框架与现有的白盒KD框架同样简单,但可以解决由空间差异所带来的问题。具体来说,DSKD通过将教师模型/学生模型的输出隐藏状态投影到对方的表示空间,实现了输出空间的统一。在此统一空间中,可以使用共享的预测头生成两个模型的输出分布,从而使它们位于相同的输出空间。

特别地,对于使用不同词汇表的模型,我们进一步提出了一种跨模型注意力机制(Cross-Model Attention,CMA),可自动对齐两个采用不同分词方式的序列中的token。与当前框架一样,DSKD也兼容现有的各种分布距离函数,包括KL散度、JS散度等。同时,借助CMA机制,我们可以将两个LLMs的输出分布转换成相同的形状,从而使我们的框架具有更强的通用性,能够应用于任何两个使用不同词汇表的LLMs之间的蒸馏任务。

我们在指令跟随类基准任务上对该框架进行了评估,涵盖了教师模型与学生模型使用相同和不同词汇表的两种设置。实验结果表明,对于使用相同词汇表的LLMs,我们的DSKD框架在多种距离函数下显著优于当前白盒KD框架;而对于使用不同词汇表的LLMs,DSKD结合CMA机制后,超过了所有现有的蒸馏方法。

总结来说,我们的主要贡献如下:

  • 我们从实证角度揭示了当前白盒KD框架由于输出空间不一致而限制了教师与学生之间的相似性;

  • 为解决该问题,我们提出了一个新的白盒KD框架——双空间知识蒸馏(DSKD),通过统一教师与学生输出分布的输出空间,提升了蒸馏效果;

  • 在DSKD基础上,我们进一步开发了跨模型注意力机制,以支持不同词汇表的LLMs之间的知识蒸馏;

  • 实验结果表明,我们的DSKD框架在多种距离函数下显著优于当前白盒KD框架,并超越了所有现有的用于不同词汇表LLMs之间的蒸馏方法。

2 Background and Preliminary Study

2.1 Current Framework for White-Box KD

2.2 Limitations of the Current Framework

2.2.1 Low Teacher-Student Similarity

在当前的白盒知识蒸馏(KD)框架中,公式 (2) 中的两个输出分布是通过两个模型各自的预测头,从各自的输出空间中计算得出的。接着,通过最小化两者的距离来优化学生模型的分布,使其逼近教师模型的分布。然而,我们认为这一做法从两个方面限制了教师与学生模型之间最终的相似性:

  • 表征层面(representation):分布是通过输出隐藏状态经过预测头计算得到的,如果两个模型的预测头不同,即使分布非常接近,其对应的隐藏状态也未必相似;

  • 分布层面(distribution):如果教师和学生的输出隐藏状态不相似,那么它们之间的分布距离在优化过程中也难以达到理论上的最小值。

我们通过一个模拟实验验证了上述猜想。在该实验中,我们随机初始化两组二维向量(其中一组可训练,另一组冻结),它们具有不同的均值和方差,分别表示学生和教师模型的输出隐藏状态(如图1(a)所示)。此外,我们设置了两个预测头,分别将这两组向量转化为概率分布。接着,我们选择KL散度作为距离函数 D(⋅∥⋅)\mathcal{D}(\cdot \| \cdot)D(⋅∥⋅),使用公式 (2) 中的损失函数 LkdL_{kd}Lkd​ 模拟蒸馏过程,共进行1000次迭代。之后我们重新绘制两组向量,并在整个过程中记录损失变化曲线,见图1。

首先,我们模拟当前白盒KD框架的过程,即使用由不同预测头产生、来自不同输出空间的分布。图1(b)的结果表明,在这种设置下,学生的隐藏状态在结构上与教师的隐藏状态有明显差异,说明二者相似性较低。

作为对比,我们将两者的输出空间统一,即让学生和教师共享同一个预测头,并重复上述蒸馏过程。如图1(c)所示,在这种设置下,学生的隐藏状态与教师的隐藏状态更为接近,二者相似性显著提升。这一结果表明,当前KD框架在表征层面上可能导致子最优的教师-学生相似性,而更优的替代方案是统一教师和学生的分布输出空间。

随后,我们将上述两种设置的模拟实验各重复100次,并绘制它们的平均损失曲线,如图1(d)所示。正如我们所预期的,使用不同预测头时,KL散度在收敛后仍然明显高于理论最小值(即0);而共享预测头时,KL散度收敛更快,最终也更接近于最小值。这充分说明了当前KD框架在分布层面上也限制了两个模型之间的相似性。

除了KL散度外,我们还用其他距离函数(例如反向KL散度、JS散度等)重复了该模拟实验。结果详见附录A.1,支持上述结论。此外,我们在附录A.2中提供了该模拟实验的伪代码以展示更多细节。

2.2.2 Dependency on the Same Vocabulary

3 Methodology

本节介绍我们为解决当前白盒知识蒸馏(white-box KD)框架所存在问题而提出的解决方案。我们首先在第 §3.1 中介绍我们提出的新蒸馏框架。然后在 §3.2 中提出一种跨模型注意力机制(cross-model attention mechanism),用于扩展我们的框架以支持词表不同的大语言模型(LLMs)。

3.1 Dual-Space Knowledge Distillation Framework

受到 §2.2.1 中观察结果的启发,我们设计了双空间知识蒸馏(DSKD)框架。其核心思想是统一公式(2)中两个分布的输出空间。为此,我们将教师/学生模型的输出隐藏状态投影到对方的表示空间中,使得两个模型可以通过同一个预测头输出分布,并实现在统一输出空间下的蒸馏。

下面我们将详细介绍如何在学生空间和教师空间中进行投影和知识蒸馏。

在学生空间中的蒸馏

在教师空间中的蒸馏

3.2 Cross-Model Attention Mechanism

4 Experiments

4.1 Experimental Setup

数据集:我们在多个指令跟随类数据集上评估了所提出的 DSKD 框架,数据集设置遵循 Gu 等人(2023)的方案。具体而言,我们使用由 Gu 等人处理过的 databricks-dolly-15k 数据集进行知识蒸馏实验,该数据集包含约 11k 条训练样本,1k 条验证样本,和 500 条测试样本。此外,为了更全面的评估,我们还选取了以下额外测试集:Self-Instruct(SelfInst)、Vicuna-Evaluation(VicunaEval)、Super Natural Instructions(S-NI)和 Unnatural Instructions(UnNI)。

模型选择:学生模型包括 GPT2-120M(Radford 等, 2019)和 TinyLLaMA-1.1B(Zhang 等, 2024)。对于 GPT2-120M,我们分别使用与学生模型词表相同或不同的教师模型 GPT2-1.5B 和 Qwen1.5-1.8B(Bai 等, 2023)。对于 TinyLLaMA-1.1B,我们选择词表相同或不同的教师模型 LLaMA2-7B(Touvron 等, 2023)和 Mistral-7B(Jiang 等, 2023)。

训练与评估:在 GPT2 上进行蒸馏时,我们对教师和学生模型进行全参数微调。在 TinyLLaMA 上,我们采用 LoRA 微调方式训练教师和学生模型。温度系数 τ\tauτ 被设为 2.0,基于验证集上的性能调优。我们方法中所有投影器均为线性层,因此仅引入极少量额外参数(例如,在 GPT2 上应用 DSKD 仅增加约 2M 参数)。在评估阶段,我们从模型中采样响应,重复 5 次并设不同随机种子。最终性能通过 Rouge-L(Lin, 2004)指标评估生成响应与人工标注响应之间的相似度。更多细节参见附录 B。

4.2 Baselines

我们在两种设置下,将我们的框架与现有方法进行对比:

词表相同下的知识蒸馏:在该设置中,我们将 DSKD 与当前的白盒知识蒸馏方法在以下距离函数下进行对比:

  • KL:由 Hinton 等人(2015)提出的标准 KL 散度。

  • RKL:反向 KL 散度,即交换 KL 中的两个分布。

  • JS:Jensen-Shannon 散度,KL 的对称变体。

  • SKL:Ko 等人(2024)提出的偏置 KL,调整学生分布为 λp+(1−λ)qθ\lambda p + (1 - \lambda) q_\thetaλp+(1−λ)qθ​。

  • SRKL:Ko 等人(2024)提出的偏置 RKL,调整教师分布为 λqθ+(1−λ)p\lambda q_\theta + (1 - \lambda) pλqθ​+(1−λ)p。

  • AKL:Wu 等人(2024)提出的 KL 与 RKL 的自适应融合。

词表不同下的知识蒸馏:我们还将带有跨模型注意力机制(CMA)的 DSKD 与支持词表不同的蒸馏方法进行比较:

  • MinCE:Wan 等人(2024)提出的方法,通过动态规划对齐不同模型的 logit,最小化 token 序列的编辑距离。

  • ULD:Boizard 等人(2024)提出的方法,用 Wasserstein 距离的闭式解替代 KL 散度,以克服对相同分词器的依赖。

此外,我们还在两种设置下将 DSKD 与黑盒知识蒸馏方法(序列级蒸馏,SeqKD;Kim 和 Rush, 2016)进行了比较。但我们未对比基于 on-policy 的方法,如 ImitKD(Lin 等, 2020)、GKD(Agarwal 等, 2024)、MiniLLM(Gu 等, 2023)和 DistiLLM(Ko 等, 2024),因为本工作专注于更通用的 off-policy 场景。

4.3 Results

词表相同下的蒸馏:相关结果见表 1 和表 2 的上半部分。首先,所有白盒蒸馏方法的性能均优于黑盒蒸馏方法 SeqKD,表明 token 级别的分布能比单一目标 token 传递更多知识。进一步地,我们的 DSKD 框架在多种距离函数下显著优于现有白盒蒸馏方法(无论是 GPT2 还是 TinyLLaMA)。这表明:

  • 一方面,我们提出的在统一输出空间下进行蒸馏的 DSKD 框架是有效的;

  • 另一方面,该框架对各种蒸馏距离函数表现出良好的兼容性。

词表不同下的蒸馏:见表 1 和表 2 的下半部分。正如 §2.2.2 所述,此设置的关键挑战在于处理由于词表大小和分词策略不同所导致的分布不匹配问题。面对该挑战,现有方法通常预设粗略的对齐机制,因此性能受限,落后于词表相同时的蒸馏方法。相比之下,我们提出的 CMA 机制可以自动学习对齐方式,使得 DSKD 的性能优于现有方法。特别是,在该设置下的教师模型通常更强,因此 DSKD-CMA 有时甚至能超越词表相同时的性能(例如表 2 中的 DSKD-CMA-AKL)。这表明我们的框架在面对更强教师模型时,即使词表不同,也有潜力训练出更优秀的学生模型。

5 Analysis

5.1 KD in Different Spaces vs. Unified Space

5.2 Evaluation via GPT-4

我们还使用 GPT-4 对比评估了 DSKD 和当前的白盒 KD 框架。具体来说,我们从 Dolly 测试集中随机抽取了 100 个指令,分别用通过 DSKD 和当前 KD 框架训练得到的 TinyLLaMA 模型生成响应。随后,我们利用 GPT-4 判断哪一个响应更优,并将胜率绘制在图 2 中。

结果显示,在大多数情况下,无论使用 KL 散度还是反向 KL 散度(RKL),我们的 DSKD 方法都优于当前的蒸馏框架。其他距离函数的完整结果可参考附录 D。

5.3 Representation Similarity between the Teacher and the Student

在仿真实验中,我们发现当前的 KD 框架会导致教师与学生之间的表示相似性有限(如图 1(b) 所示)。因此,我们评估了这一现象在真实 KD 场景中是否也成立。由于教师与学生模型的隐藏状态维度通常不同,我们比较的是两者的表示结构相似性,而非具体的隐藏状态。

具体来说,我们使用输出隐藏状态之间的余弦相似度(cosine similarity)和标准化内积(normalized inner product)来表示一个模型的表示结构(见附录 E 的公式 (16) 和 (17))。随后,我们计算两种表示结构之间的 L1 距离来衡量它们的相似性,距离越小代表结构越相似(详细计算过程见附录 E 的公式 (18) 和 (19))。我们在 1000 条训练样本上统计了教师与学生之间的结构平均距离,并将其绘制在图 3 中。

结果表明,在两种表示结构下,相比于不使用蒸馏的微调方法(SFT),当前的 KD 框架(Vanilla KD)仅能稍微减少教师与学生之间的结构距离。而我们的 DSKD 方法显著缩小了这一距离,表明 DSKD 能够有效提升学生与教师之间的表示结构相似性。

6 Related Work

语言模型的白盒知识蒸馏(White-Box KD for Language Models)
语言模型的白盒知识蒸馏(KD)框架起源于 Hinton 等人(2015)提出的标准知识蒸馏方法。随着预训练语言模型(PLMs)在各类自然语言处理任务中的广泛应用,许多知识蒸馏方法在这一框架下被提出,用以压缩 PLMs 的庞大参数规模(Sun 等, 2019;Sanh 等, 2019;Sun 等, 2020;Jiao 等, 2020)。除了最小化分布之间的距离外,还有基于特征的蒸馏方法,旨在从教师模型的中间隐藏状态和注意力图中提取知识(Jiao 等, 2020;Wang 等, 2020;2021b)。此外,白盒 KD 也广泛应用于文本生成任务,如神经机器翻译(Tan 等, 2019;Wang 等, 2021a;Zhang 等, 2023)和文本摘要(Chen 等, 2020;Liu 等, 2021)。
随着大语言模型(LLMs)在各类任务中占据主导地位,已有若干针对 LLM 的 KD 技术被提出(Gu 等, 2023;Ko 等, 2024;Wu 等, 2024;Xu 等, 2024)。与这些遵循当前白盒 KD 框架的工作不同,我们的研究对该框架固有的局限性提出质疑,并提出了一个更为简单、高效且通用的知识蒸馏框架作为替代方案

共享预测头的知识蒸馏(KD with the Shared Prediction Head)

在已有的 KD 研究中,SimKD(Chen 等, 2022)也提出了通过共享教师模型的预测头进行知识蒸馏,这一方式与我们 DSKD 中在教师空间进行 KD 的过程较为相似。然而,SimKD 的目标是将教师模型的预测头直接赋予学生模型,这会导致学生模型在蒸馏之后变得更大,推理成本也随之上升。相比之下,我们的 DSKD 仅利用这一过程来传递教师的表示信息,对学生模型的原始规模没有任何影响。

7 Conclusion

在本研究中,我们首先揭示了当前白盒大语言模型(LLM)知识蒸馏(KD)框架存在的两个局限性:一是导致学生模型与教师模型之间的表示相似性较低,二是要求教师与学生模型使用相同的词表。为了解决这两个问题,我们提出了一种新颖的白盒知识蒸馏框架,称为双空间知识蒸馏(Dual-Space Knowledge Distillation,DSKD),该框架在蒸馏过程中统一了教师与学生的输出空间。

在此基础上,我们进一步设计了一种跨模型注意力机制(Cross-Model Attention),以解决不同 LLM 之间的词表不匹配问题,从而使我们的 DSKD 框架能够支持任意两个 LLM 之间的知识蒸馏,无论它们的词表是否一致。

在多个指令跟随类基准数据集上的实验结果表明,我们的 DSKD 框架在多种距离函数下都显著优于当前的白盒 KD 框架。同时,在词表不同的模型间蒸馏场景下,DSKD 也优于所有现有的 KD 方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法应用:多重背包启发式问题详解

贪心算法应用:多重背包启发式问题详解 多重背包问题是经典的组合优化问题,也是贪心算法的重要应用场景。本文将全面深入地探讨Java中如何利用贪心算法解决多重背包问题。 多重背包问题定义 **多重背包问题(Multiple Knapsack Problem)**是背包问题的变…

ES6 Promise 状态机

状态机:抽象的计算模型,根据特定的条件或者信号切换不同的状态 一、Promise 是什么? 简单来说,Promise 就是一个“承诺对象”。在ES6 里,有些代码执行起来需要点时间,比如加载文件、等待网络请求或者设置…

【Docker管理工具】部署Docker可视化管理面板Dpanel

【Docker管理工具】部署Docker可视化管理面板Dpanel 一、Dpanel介绍1.1 DPanel 简介1.2 主要特点 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Dpanel镜像五、部署Dpanel…

最新研究揭示云端大语言模型防护机制的成效与缺陷

一项全面新研究揭露了主流云端大语言模型(LLM)平台安全机制存在重大漏洞与不一致性,对当前人工智能安全基础设施现状敲响警钟。该研究评估了三大领先生成式AI平台的内容过滤和提示注入防御效果,揭示了安全措施在阻止有害内容生成与…

docker中,容器时间和宿机主机时间不一致问题

win11下的docker中有个mysql。今天发现插入数据的时间不正确。后来发现原来是docker容器中的时间不正确。于是尝试了各种修改,什么run -e TZ"${tzutil /g}",TZ"Asia/Shanghai",还有初始化时带--mysqld一类的,…

uniapp实现的简约美观的星级评分组件

采用 uniapp 实现的一款简约美观的星级评分模板,提供丝滑动画效果,用户可根据自身需求进行自定义修改、扩展,纯CSS、HTML实现,支持web、H5、微信小程序(其他小程序请自行测试) 可到插件市场下载尝试&#x…

go语言的锁

本篇文章主要讲锁,主要会涉及go的sync.Mutex和sync.RWMutex。 一.锁的概念和发展 1.1 锁的概念 所谓的加锁和解锁其实就是指一个数据是否被占用了,通过Mutex内的一个状态来表示。 例如,取 0 表示未加锁,1 表示已加锁&#xff…

Ubuntu 服务器软件更新,以及常用软件安装 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 3

前言 前面,我们已经 安装好了 Ubuntu 服务器系统,并且 配置好了 ssh 免密登录服务器 ,现在,我们要来进一步的设置服务器。 那么,本文,就是进行服务器的系统更新,以及常用软件的安装 调整 Ubu…

如何从零开始建设一个网站?

当你没有建站的基础和建站的知识,那么应该如何开展网站建设和网站管理。而今天的教程是不管你是为自己建站还是为他人建站都适合的。本教程会指导你如何进入建站,将建站的步骤给大家分解: 首先我们了解一下,建站需要那些步骤和流程…

网络可靠性的定义与核心要素

网络可靠性(Network Reliability)是指网络系统在特定时间范围内持续提供稳定、无中断、符合预期性能的服务能力。其核心目标是确保数据能够准确、完整、及时地传输,即使在部分故障或异常情况下仍能维持基本功能。 1. 网络可靠性的核心指标 衡…

GpuGeek如何成为AI基础设施市场的中坚力量

AI时代,算力基础设施已成为支撑技术创新和产业升级的关键要素。作为国内专注服务算法工程师群体的智算平台,GpuGeek通过持续创新的服务模式、精准的市场定位和系统化的生态建设,正快速成长为AI基础设施领域的中坚力量。本文将深入分析GpuGeek…

【Qt】Bug:findChildren找不到控件

使用正确的父对象调用 findChildren:不要在布局对象上调用 findChildren,而应该在布局所在的窗口或控件上调用。

【Linux网络编程】传输层协议TCP,UDP

目录 一,UDP协议 1,UDP协议的格式 2,UDP的特点 3,面向数据报 4,UDP的缓冲区 5,UDP使用注意事项 6,基于UDP的应用层协议 二,对于报文的理解 三,TCP协议 1&…

Neo4j 数据可视化与洞察获取:原理、技术与实践指南

在关系密集型数据的分析领域,Neo4j 凭借其强大的图数据模型脱颖而出。然而,将复杂的连接关系转化为直观见解,需要专业的数据可视化技术和分析方法。本文将深入探讨 Neo4j 数据可视化的核心原理、关键技术、实用技巧以及结合图数据科学库(GDS)获取深度洞察的最佳实践。 Ne…

树莓派超全系列教程文档--(55)如何使用网络文件系统NFS

如何使用网络文件系统NFS 网络文件系统 (NFS)设置基本 NFS 服务器Portmap 锁定(可选) 配置 NFS 客户端端口映射锁定(可选) 配置复杂的 NFS 服务器组权限DNS(可选,仅在使用 DNS 时)NIS&#xff0…

无法运用pytorch环境、改环境路径、隔离环境

一.未建虚拟环境时 1.创建新项目后,直接运行是这样的。 2.设置中Virtualenv找不到pytorch环境?因为此时没有创建新虚拟环境。 3.选择conda环境(全局环境)时,是可以下载环境的。 运行结果如下: 是全局环境…

HTML5+CSS3+JS小实例:具有粘性重力的磨砂玻璃导航栏

实例:具有粘性重力的磨砂玻璃导航栏 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width…

NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)

&#x1f4e6; 8.1 请描述你做过的 Web3 项目&#xff0c;具体技术栈和你负责的模块&#xff1f; 我主导开发过一个基于 NFT 的数字纪念平台&#xff0c;用户可以上传照片并生成独特的纪念 NFT&#xff0c;结合 IPFS 和 ERC-721 实现永存上链。 &#x1f527; 技术栈&#xf…

3-10单元格行、列号获取(实例:表格选与维度转换)学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…

AI问答-vue3+ts+vite:http://www.abc.com:3022/m-abc-pc/#/snow 这样的项目 在服务器怎么部署

为什么记录有子路径项目的部署&#xff0c;因为&#xff0c;通过子路径可以区分项目&#xff0c;那么也就可以实现微前端架构&#xff0c;并且具有独特优势&#xff0c;每个项目都是绝对隔离的。 要将 Vue3 项目&#xff08;如路径为 http://www.abc.com:3022/m-saas-pc/#/sno…