大模型的研究新方向:混合专家模型(MoE)

大模型的发展已经到了一个瓶颈期,包括被业内所诟病的罔顾事实而产生的“幻觉”问题、深层次的逻辑理解能力、数学推理能力等,想要解决这些问题就不得不继续增加模型的复杂度。随着不同应用场景的实际需求,大模型的参数会变得越来越大,复杂性和规模不断的增加,尤其是在多模态大模型的开发中,每个数据集可能完全不同,有来自文本的数据、图像的数据、语音的数据等,包含不同的模式,特征和标注之间的关系可能也大有不同,这不但增加了训练的难度,也提高了推理的成本,如何将大模型的训练难度和推理成本降低已经是各大研究机构和大厂都在攻克的任务

图片

为了实现大模型的高效训练和推理,有的是从模型底层下手,比如直接改变底层模型架构,将原来的Transformer架构改成近期新出的基于状态空间模型(SSM)的mamba架构;有的是在预训练微调方法上下手,比如我们在上一篇文章《【论文解读】:大模型免微调的上下文对齐方法》中提到的利用上下文学习(ICL),通过采用少量精心策划的风格示例和精心设计的系统提示,对基础LLMs进行有效对齐的URIAL方法;还有一种方法就是对模型大而化之的处理方法,也就是本文要介绍的基于门控网络的混合专家模型(Mixture of Experts:MoE)。

MoE提出的前提是如果有一个包括了多个领域知识的复杂问题,我们该使用什么样的方法来解决呢?最简单的办法就是把各个领域的专家集合到一起来攻克这个任务,当然我们事先要把不同的任务先分离出来,这样才便于分发给不同领域的专家,让他们来帮忙处理,最后再汇总结论。没错,混合专家模型(Mixture of Experts:MoE)正是基于这样的理念,它由多个专业化的子模型(即“专家”)组合而成,每一个“专家”都在其擅长的领域内做出贡献。而决定哪个“专家”参与解答特定问题的,是一个称为“门控网络”的机制。

图片



 

一、混合专家模型的前世今生:老树新芽

混合专家模型(MixtureofExperts:MoE)的思想可以追溯到集成学习,集成学习是通过训练多个模型(基学习器)来解决同一问题,并且将它们的预测结果简单组合(例如投票或平均)。集成学习的主要目标是通过减少过拟合,提高泛化能力,以提高预测性能。常见的集成学习方法包括Bagging,Boosting和Stacking。

集成学习在训练过程中,利用训练数据集训练基学习器,基学习器的算法可以是决策树、SVM、线性回归、KNN等,在推理过程中对于输入的X,在每个基学习器得到相应的答案后将所有结果有机统一起来,例如通过求均值的方法解决数值类问题,通过投票方式解决分类问题。

MoE和集成学习的思想异曲同工,都是集成了多个模型的方法,但它们的实现方式有很大不同。与MoE的最大不同的地方是集成学习不需要将任务分解为子任务,而是将多个基础学习器组合起来。这些基础学习器可以使用相同或不同的算法,并且可以使用相同或不同的训练数据。

图片

MoE模型本身也并不是一个全新的概念,它的理论基础可以追溯到1991年由MichaelJordan和GeoffreyHinton等人提出的论文,距今已经有30多年的历史,但至今依然在被广泛应用的技术。这一理念在被提出来后经常被应用到各类模型的实际场景中,在2017年得到了更进一步的发展,当时,一个由QuocLe,GeoffreyHinton和JeffDean领衔的团队提出了一种新型的MoE层,它通过引入稀疏性来大幅提高模型的规模和效率。

大模型结合混合专家模型的方法属于老树发新芽,随着应用场景的复杂化和细分化,大模型越来越大,垂直领域应用更加碎片化,想要一个模型既能回答通识问题,又能解决专业领域问题,似乎MoE是一种性价比更高的选择。在多模态大模型的发展浪潮之下,MoE大有可能成为2024年大模型研究的新方向之一,而大模型也会带着MoE,让其再次伟大。

下面是近些年一部分MoE的应用发展事件,可以看出早期MoE的应用和Transformer的发展时间节点差不多,都是在2017年左右。

2017年,谷歌首次将MoE引入自然语言处理领域,通过在LSTM层之间增加MoE实现了机器翻译方面的性能提升;

图片

2020年,Gshard首次将MoE技术引入Transformer架构中,并提供了高效的分布式并行计算架构,而后谷歌的Swtich Transformer和GLaM则进一步挖掘MoE技术在自然语言处理领域中的应用潜力,实现了优秀的性能表现;

图片

2021年的V-MoE将MoE架构应用在计算机视觉领域的Transformer架构模型中,同时通过路由算法的改进在相关任务中实现了更高的训练效率和更优秀的性能表现;

2022年的LIMoE是首个应用了稀疏混合专家模型技术的多模态模型,模型性能相较于CLIP 也有所提升。

图片

近期Mistral AI发布的Mistral 8x7B模型是由70亿参数的小模型组合起来的MoE模型,直接在多个跑分上超过了多达700亿参数的Llama 2。

将混合专家模型(Mixture of Experts:MoE)应用于大模型中似乎是不一个不错的想法,Mistral AI发布的Mistral 8x7B模型在各项性能和参数上证明了这一点,使用了更少的参数却获得了远超于Llama 2的效果,这为大模型的发展提供了一种新的思路。

图片


——文章结尾会附上近些年关于混合专家模型(Mixture of Experts:MoE)主要的论文


二、混合专家模型的核心思想:术有专攻

“学有所长,术有专攻”,古人早已将告诉过我们如何将复杂的事物简单化处理。大模型从早期只处理文本数据,到后来需要同时处理图像数据和语音数据的发展过程中,其参数量和模型结构设计也越来复杂和庞大。如果说单模态大模型是一个“特长生”,那么多模态大模型就是一个“全能天才”,想要让这个“全能天才”学习的更好,那么就需要对其学习任务分类,安排不同科目的老师进行学习任务的辅导,这样才能让其高效快速的学习到各科的知识,在考试的时候才有可能在各科成绩上有优异的表现。

图片

混合专家模型(MixtureofExperts:MoE)正是这样一个培养“全能天才”的方法,其核心思想就是先把任务分门别类,然后分给各个“专家模型”进行解决。混合专家模型(MoE)是一种稀疏门控制的深度学习模型,它主要由一组专家模型和一个门控模型组成。MoE的基本理念是将输入数据根据任务类型分割成多个区域,并将每个区域的数据分配一个或多个专家模型。每个专家模型可以专注于处理输入这部分数据,从而提高模型的整体性能。

MoE架构的基本原理非常简单明了,它主要包括两个核心组件:GateNet和Experts。GateNet的作用在于判定输入样本应该由哪个专家模型接管处理。而Experts则构成了一组相对独立的专家模型,每个专家负责处理特定的输入子空间。

门控模型(GateNet):混合专家模型中“门”是一种稀疏门网络,它接收单个数据元素作为输入,然后输出一个权重,这些权重表示每个专家模型对处理输入数据的贡献。一般是通过softmax门控函数通过专家或token对概率分布进行建模,并选择前K个。例如,如果模型有三个专家,输出的概率可能为0.5和0.4、0.1,这意味着第一个专家对处理此数据的贡献为50%,第二个专家为40%,第二个专家为10%,这个时候的K就可以选择为2,我们认为前两个专家模型的建议会更好,可以用于更加精确的回答中,而第三个专家模型的建议可以用于更加富有创意性的答案中。

图片

专家模型(Experts):在训练的过程中,输入的数据被门控模型分配到不同的专家模型中进行处理;在推理的过程中,被门控选择的专家会针对输入的数据,产生相应的输出。这些输出最后会和每个专家模型处理该特征的能力分配的权重进行加权组合,形成最终的预测结果。

图片

混合专家模型在训练过程中通过门控模型实现“因材施教”,进而在推理过程中实现专家模型之间的“博采众长”。MoE的专家模型可以是小型的MLP或者复杂的LLM。

在传统的密集模型中,每个输入都必须经历完整的计算流程,这导致了在处理大规模数据时的显著计算成本。然而,在现代深度学习中,稀疏混合专家(MoE)模型的引入为解决这一问题提供了一种新的方法。在这种模型中,输入数据只激活或利用了少数专家模型,而其他专家模型保持不活跃状态,形成了“稀疏”结构。这种稀疏性被认为是混合专家模型的重要优点,不仅在减少计算负担的同时,还能提高模型的效率和性能。

图片

为了有效控制稀疏性,主要依赖于门控网络的设计和参数调整。门控网络负责决定哪些专家模型参与处理当前的输入数据。然而,在进行参数选择时需要注意一个权衡:如果门控网络在单次选择中激活了较多的专家模型,虽然这可能提升了模型的表现能力,但却会导致稀疏性的降低。因为更多的专家模型参与计算,这会带来额外的计算复杂性和耗时。

因此,MoE模型的稀疏性存在一种平衡挑战,需要根据具体的应用需求和计算资源限制来调整门控网络的设计和参数。在实际应用中,可以根据不同的场景,灵活地选择专家模型的数量,以在效率和性能之间找到最佳的平衡点。这种个性化的调整能够确保混合专家模型在各种应用中发挥出最佳的优势,为深度学习领域的发展提供更大的灵活性和可塑性。

图片

说到这里的“门”概念,与LSTM网络的“门”概念有所不同,MoE的“门”概念主要是用于匹配数据和专家模型之间的连接,就好比不同班级的学生要进不同的教室上课一样,而LSTM的“门”概念主要是一种控制信息流动的装置,它可以保留或通过一定比例的数据,更像是在控制流量,而MoE的“门”概念可以看作是选择要通过的对象。

MoE的稀疏性与dropout的原理类似,MoE是根据任务的具体情况选择激活一定数量的专家模型来完成这个任务,而dropout则是对神经网络中的神经元进行随机性失活,每次训练的时候只保留一定的参数,这不但让网络具备了稀疏性特征,减轻了整个网络的参数压力,还会降低模型发生过拟合的概率,提高模型的泛化能力。

图片



 

三、混合专家模型的实现步骤:分而治之

在混合专家(MoE)架构中,初始阶段涉及输入样本通过GateNet进行多分类的鉴别过程,目的是确定最适合处理输入的专家模型。这个步骤被称为“expertsselection”,也是整个MoE模型的核心理念,学术界通常将其描述为稀疏性激活。随后,被选中(激活)的专家模型负责处理输入样本,进而生成最终的预测结果。

在语言模型的应用中,当输入数据通过MoE层时,每个输入token都由GateNet分配给最适合处理它的专家模型。通过使每个专家专注于执行特定任务,这一方法实现了计算的高效性,并在结果上取得更为优越的表现。这种方式允许模型对不同类型的输入数据进行个性化处理,提高了整体效率和性能。

图片

按照数据输入流动的过程,MoE的各个子结构会根据自身的任务对数据进行处理。

1.前向传播:输入数据进入混合专家模型,首先进行前向传播。数据同时传递到门控网络,准备进行后续的计算。这一步是信息流的起点,让模型感知输入的特征并为后续步骤做好准备。

2.门控计算:门控网络接收输入数据并执行一系列学习的非线性变换。这一过程产生了一组权重,这些权重表示了每个专家对当前输入的贡献程度。通常,这些权重经过softmax等函数的处理,以确保它们相加为1,形成了一个概率分布。这样的分布表示了在给定输入情境下每个专家被激活的概率。

图片

3.专家模型:数据经过门控网络选择后进入每个专家模型,每个专家根据其设计和参数对输入进行处理。专家模型可以视为是对输入数据的不同方面或特征进行建模的子模型。每个专家产生的输出是对输入数据的一种表示,这些表示将在后续的步骤中进行加权聚合。

4.加权聚合:专家模型的输出由门控网络计算的权重进行加权聚合。每个专家的输出乘以其相应的权重,并将这些加权的输出求和,形成最终的模型输出。这种加权的组合机制使得模型能够在不同输入下自适应地选择哪个专家模型的输出对当前任务更具有利。

图片

5.反向传播和更新:模型的训练在这一阶段通过反向传播算法进行。损失函数的梯度用于调整门控网络和专家模型的参数,以最小化预测值与实际标签之间的误差。这一过程是训练模型权重的关键步骤,确保模型能够更好地适应训练数据。

6.稀疏性调整:通过引入适当的正则化项,可以调整模型的稀疏性。正则化项在门控网络的损失函数中起到作用,控制专家模型的激活状态,从而影响模型的整体稀疏性。这是一个需要仔细平衡的参数,以满足对模型效率和性能之间的不同需求。

7.动态适应性:由于门控网络的存在,混合专家模型能够实现动态适应性。根据输入数据的不同,模型可以自动调整专家模型的使用,从而更灵活地适应不同的输入分布和任务场景。

图片

混合专家模型的实现涉及对专家模型和门控网络的联合训练,在整个数据输入处理的过程中,门控网络起到了动态调配专家模型资源的关键作用,使混合专家模型能够灵活地适应不同的输入数据分布和任务要求。以及在模型结构和参数上的细致调整,以满足具体应用的需求。这种结构允许模型在处理各种输入数据时自适应地选择合适的专家,从而提高模型的表现和效率。



 

四、混合专家模型的问题思考:通信权衡

混合专家模型的优势显而易见,通过MoE的方式,可以极大的促进大模型的研究和发展,但也不能忽视其各方面的问题,在实际应用中应该结合具体的需求对各方面的性能和参数进行一个权衡。

混合专家模型(Mixture of Experts,MoE)的优势:

混合专家模型(Mixture of Experts,MoE)具有多方面的优势,使其在深度学习领域得到广泛应用。以下是一些混合专家模型的优势:

1.任务特异性:采用混合专家方法可以有效地充分利用多个专家模型的优势,每个专家都可以专门处理不同的任务或数据的不同部分,在处理复杂任务时取得更卓越的性能。各个专家模型能够针对不同的数据分布和模式进行建模,从而显著提升模型的准确性和泛化能力,因此模型可以更好地适应任务的复杂性。这种任务特异性使得混合专家模型在处理多模态数据和复杂任务时表现出色。

图片

2.灵活性:混合专家方法展现出卓越的灵活性,能够根据任务的需求灵活选择并组合适宜的专家模型。模型的结构允许根据任务的需要动态选择激活的专家模型,实现对输入数据的灵活处理。这使得模型能够适应不同的输入分布和任务场景,提高了模型的灵活性。

3.高效性:由于只有少数专家模型被激活,大部分模型处于未激活状态,混合专家模型具有很高的稀疏性。这种稀疏性带来了计算效率的提升,因为只有特定的专家模型对当前输入进行处理,减少了计算的开销。

4.表现能力:每个专家模型可以被设计为更加专业化,能够更好地捕捉输入数据中的模式和关系。整体模型通过组合这些专家的输出,提高了对复杂数据结构的建模能力,从而增强了模型的性能。

图片

5.可解释性:由于每个专家模型相对独立,因此模型的决策过程更易于解释和理解,为用户提供更高的可解释性,这对于一些对模型决策过程有强解释要求的应用场景非常重要。

MoE构架还能向LLM添加可学习参数,而不增加推理成本。

6.适应大规模数据:混合专家方法是处理大规模数据集的理想选择,能够有效地应对数据量巨大和特征复杂的挑战,可以利用稀疏矩阵的高效计算,利用GPU的并行能力计算所有专家层,能够有效地应对海量数据和复杂特征的挑战。其并行处理不同子任务的特性,充分发挥计算资源,帮助有效地扩展模型并减少训练时间,提高模型在训练和推理阶段的效率,使其在大规模数据下具有较强的可扩展性,以更低的计算成本获得更好的结果。这种优势使得混合专家方法成为在大数据环境下进行深度学习的强有力工具。

图片

混合专家模型通过充分利用多个专家模型的优势,实现了在任务处理、灵活性、计算效率和可解释性等方面的平衡,使其成为处理复杂任务和大规模数据的有效工具。

混合专家模型(Mixture of Experts,MoE)的问题:

尽管混合专家模型在许多方面具有优势,但也存在一些问题和挑战,这些需要在实际应用中谨慎考虑。以下是一些混合专家模型可能面临的问题:

1. 训练复杂性:混合专家模型的训练相对复杂,尤其是涉及到门控网络的参数调整。为了正确地学习专家的权重和整体模型的参数,可能需要更多的训练时间。

2. 超参数调整:选择适当的超参数,特别是与门控网络相关的参数,以达到最佳性能,是一个复杂的任务。这可能需要通过交叉验证等技术进行仔细调整。

3. 专家模型设计:专家模型的设计对模型的性能影响显著。选择适当的专家模型结构,确保其在特定任务上有足够的表现力,是一个挑战。

4. 稀疏性失真:在某些情况下,为了实现稀疏性,门控网络可能会过度地激活或不激活某些专家,导致模型性能下降。需要谨慎设计稀疏性调整策略,以平衡效率和性能。

5. 动态性问题:在处理动态或快速变化的数据分布时,门控网络可能需要更加灵活的调整,以适应输入数据的变化。这需要额外的处理和设计。

6.对数据噪声的敏感性:混合专家模型对于数据中的噪声相对敏感,可能在一些情况下表现不如其他更简单的模型。

此外,还有重要的一点是混合专家模型在分布式计算环境下可能面临通信宽带瓶颈的问题。这主要涉及到混合专家模型的分布式部署,其中不同的专家模型或门控网络可能分布在不同的计算节点上。在这种情况下,模型参数的传输和同步可能导致通信开销过大,成为性能的一个瓶颈。

图片

以下是一些可能导致通信宽带瓶颈问题的因素:

1. 参数同步:在分布式环境中,不同计算节点上的专家模型或门控网络的参数需要定期同步,以确保模型的一致性。这涉及到大量的参数传输,特别是在模型规模较大时,通信带宽可能成为一个限制因素。

2. 频繁的通信:如果混合专家模型的设计需要频繁的参数交互和同步,那么通信开销可能会明显增加。频繁的通信可能导致节点之间的延迟,降低整个系统的效率。

3. 数据流量:在一些应用中,模型在处理输入数据时可能会产生大量的中间结果,需要在不同节点之间进行传输。这也会增加通信的数据流量,对通信带宽提出更高的要求。

为了缓解通信宽带瓶颈,可以考虑以下策略:

- 模型剪枝和量化:减小模型的大小,包括专家模型和门控网络的参数数量,以降低通信开销。

- 异步更新:考虑采用异步更新策略,而不是同步地更新所有节点的参数。这可以减少通信开销,但可能导致模型的一致性稍有降低。

- 本地计算:尽可能在本地计算节点上完成任务,减少节点之间的通信需求。这可以通过在节点上部署更多的计算资源来实现。

- 压缩技术:使用参数压缩技术,如模型压缩或渐进压缩算法,以减小传输的数据量。

通信宽带瓶颈问题在混合专家模型的分布式部署中可能存在,但通过合理的模型设计和优化策略,可以缓解这一问题。

在实际应用中,需要根据具体任务和数据的特性仔细权衡这些问题,选择或调整混合专家模型的结构和参数,以充分发挥其优势并降低可能存在的问题。

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

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

相关文章

npm安装,idea中启动vue失败

node 设置配置之后,要查询时,会从.npmrc中读取路径 .npmrc自己创建的(默认情况下.npmrc会创建在C盘中) 我创建的在D:\studay-and-working\node16.14\node_modules\npm中 指定.npmrc文件,因为默认会访问C盘的.npmrc文件…

Docker 安装Apache Superset 并实现汉化和快速入门

什么是Apache Superset Apache Superset是一个现代化的企业级商业智能Web应用程序。Apache Superset 支持用户的各种数据类型可视化和数据分析,支持简单图饼图到复杂的地理空间图表。Apache Superset 是一个轻量级、简单化、直观化、可配置的BI 框架。 Docker 安…

【报错栏】(vue)Module not found: Error: Can‘t resolve ‘element-ui‘ in xxx

Module not found: Error: Cant resolve element-ui in xxx 报错原因是: 未安装 element-ui 依赖 解决: npm install element-ui 运行

C语言 二叉树详解(自我理解版)!!!二叉树的实现

目录 1.树的概念和结构(了解) 1.1树的概念 1.2关于树的每个组成结构的叫法 1.3树的结构体表示 1.4树在实际中的运用 2.二叉树的概念和结构和实现(本期偏重点之一) 二叉树的概念 ​编辑 特殊的二叉树 1.完全二叉树 2.满二…

Unity 实现单例模式

目录 基本概念 饿汉模式(推荐) 懒汉模式: 基本概念 单例模式:类只有一个实例,一般使用static来实现单例模式; 比如:有一个Test类,实现了单例,假设这个唯一的实例名为SingTonle,实例在类内被实现并被stat…

MAX/MSP SDK学习09:重要示例1

本示例涉及到单个MSP对象同时使用Signal类型、Message类型的入口;代理入口的使用。 注意:MSP对象的入口默认为代理入口,因此Signal类型、Message类型的数据都可接收; #include "ext.h" #include "ext_obex.h&…

【FPGA图像处理实战】- 图像行缓存设计实现方式一(FIFO)

图像处理中稍复杂点的算法,就需要行缓存,以实现3*3窗口、6*6窗口的数据计算。 本文将介绍使用FIFO来实现图像行缓存的设计,包括关键逻辑分析,源代码实现分享。 一、行缓存功能的设计框架 图像数据一般都是按照从左到右,从上到下,一行行数据的方式发送传输的。 这里以…

机器学习三个基本要素:优化算法

在确定了训练集 D、假设空间 ℱ 以及学习准则后,如何找到最优的模型𝑓(x,θ∗) 就成了一个最优化(Optimization)问题。机器学习的训练过程其实就是最优化问题的求解过程。 参数与超参数 在机器学习中,优化又可以分为参…

mybatis查询结果resultMap映射vo源码分析

概述 mybatis是一个常用的持久层框架;通常搭配mysql使用; 在将查询结果映射成一个复杂vo的时候,通常会用到resultMap,在其中嵌套association和collection等操作;将一个复杂查询拆分成简单查询; 在vo中的变…

WSL 配置 Docker 内存和 CPU 资源限制

我用的电脑一共有40G内存,最近发现电脑重启后,VmmemWSL 进程很快就会占用一多半的内存(20G),电脑中有多个停止运行的容器,正常启动状态的只有一个 MySQL 服务,通过 docker stats 查看占用内存也…

PyCharm安装教程

1.1 为什么要安装python开发环境 上一篇文章我们安装了python,准确来说是python解释器,它没有自带的可视化开发工具,只能通过命令行窗口来执行python代码,这里我们就来下载一个用于python开发的可视化工具——PyCharm。 1.2 PyC…

boost1.55 安装使用教程 windows

第一步 :首先在boost官网上下载库压缩包 添加链接描述 选择自己需要的版本进行下载 解压后执行booststrap.bat 用来生成创建b2.exe 和bjam.exe 拓展:.\b2 --help 了解一下有哪些参数可以配置 默认b2.exe编译后,链接到项目如果出现如下错误…

人工智能基本常识:让深度学习技术更加人性化

近年来,人工智能技术日臻成熟。现在,许多产品和服务都依靠人工智能技术实现自动化和智能化,因此它与我们的日常生活息息相关。无论是为我们带来各种便利的家用设备,还是我们一直在使用的产品制造方式,人工智能的影响无…

低代码开发与传统软件开发:未来趋势与竞争格局

近年来,低代码开发平台的快速发展引起了各行各业的广泛关注。低代码开发平台简化了软件开发的复杂性,提供了更快速、更灵活的开发方式。于是,许多人开始产生一个疑问:未来低代码开发是否会取代传统软件开发?今天这篇文…

nodejs微信小程序+python+PHP沧州地区空气质量数据分析系统-计算机毕业设计推荐 django

本系统不仅主要实现了注册登录,系统首页,个人中心,用户管理,城市区域管理,空气状况管理,空气质量管理,系统管理,数据爬取,大屏分析等功能,通过这些功能基本可…

CompressAI benchmark经典/传统图像编码器的使用

文章目录 使用简介安装依赖编译安装BPG 使用简介 CompressAI的github仓库中Usage-Evaluation给出了传统编解码器的使用帮助,但是并未给出详细的使用方法。本文旨在进行总结使用方法。下图是传统编解码器相关代码的存放地点,其中codecs为各种编解码器类的…

Java版企业电子招标采购系统源码—鸿鹄电子招投标系统-企业战略布局下的采购寻源

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记,仅代表我个人对代码的理解,个人水平有限,文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解,欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

L1-040:最佳情侣身高差

题目描述 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)1.09 (男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。 下面就…

如何建立一套完善的销售管理体系?

如何建立一套完善的销售管理体系? 该提问下已有许多专业的回答,从多个角度为题主出谋划策:销售主管如何提升个人能力、销售团队如何管理、PDCA管理方法论、销售闭环……似乎都与硬性的个人能力挂钩,销售能力、管理能力等等。 或…