智算中心算力池化技术深度分析报告

news2024/11/24 2:40:17

 9dd4c2165fb9bddc24b765bd0ce5a47e.jpeg

智算中心算力池化技术深度分析 

   智能算力,人工智能基石,助力构建多要素融合信息基础设施。作为数字经济高质量发展核心引擎,智能算力基础设施建设正迎来高潮。

智算中心,作为集约化算力基础设施,以智能算力为核心,包括GPU、AI芯片等,提供全栈软硬件环境。致力于承载模型训练、推理及多媒体渲染等业务,助力千行百业实现数智化转型升级。

算力池化技术是一种新型的资源管理技术,它可以将不同类型的算力聚合在一起,实现敏捷化资源管理。这种技术可以使资源得到极致利用,提高整体效能。

为深化产业共识,推动算力池化技术成熟,中国移动发布白皮书。分析智能算力趋势及挑战,阐述算力池化定义、目标、架构、关键技术及业界探索实践。呼吁加强合作,共同构建统一标准体系。

1. 算力池化技术背景

在数字经济时代,人工智能正深刻地改变我们的生产、生活方式。随着智慧城市、智慧交通、智慧家庭等智能场景的逐步落地,5G、边缘计算等支撑技术的持续发展,数智业务转型过程中所产生的数据量正在以更加难以计量的速度爆发。

根据IDC的《数据时代2025》报告,从2016年至2025年,全球总数据量将激增10倍,达到163ZB。其中,非结构化数据占比超过70%,计算模式日益复杂,对智能算力需求不断攀升。智能计算将成为主流计算形态。

智能计算正广泛渗透到生产生活的各个领域,智算中心逐渐成为主流算力形态,以GPU、AI芯片为资源。各国政府积极布局AI全栈能力,投资智能算力基础设施建设。我国已步入智能化时代,“十四五”期间,相关部委致力于推动智算中心建设,为人工智能场景提供公共算力服务。

随着基础通用大模型业务的引爆,如ChatGPT等,对GPU的市场需求激增,导致“一芯难求”,GPU价格暴涨。以英伟达A800为例,近半年来价格增幅高达30%以上。如何在有限的资源供应内提高利用率、降低智算中心TCO,成为智算中心建设待解决的关键命题之一。

1.1 传统智算中心存在资源效率问题

1.1.1 GPU 资源利用率不足 30%

当前,智算中心的建设主要由国家或地方政府主导,同时,AI应用服务企业也在积极布局自有智算基础设施。然而,公开数据显示,传统模式下的智算中心GPU利用率并不理想,平均数值低于30%。

传统智算中心的 GPU 资源利用率过低,主要来源于以下多个方面的原因

资源配置尚显粗糙:当前主要以整卡分配为主,辅以虚拟化分配方式。这种粗粒度的配置方式难以满足不同AI任务的个性化需求,导致部分资源未能充分发挥作用,影响算力资源的有效利用。

(二)算力潜力未充分发挥:由于AI任务模型设计缺陷、算力优化不足以及模型框架与底层芯片适配不完善等因素,可能导致算力资源性能未能达到最佳状态,从而产生额外的资源损耗。

智算中心设备和服务器之间的通信需要消耗网络带宽,网络瓶颈会影响影响整体性能,算力资源空闲度高、利用率低。 为了解决这个问题,一些企业或机构正在积极投入自研 RDMA 协议栈及无损网络相关技术。

传统智算中心的 GPU 资源利用率问题是一个综合性的问题,需要从资源管理策略、硬件架构设计、应用软件算法优化等多方面共同优化解决。其中,尤以资源管理策略方面的优化可控性强、生效快、投入产出比高,是新型智算中心算力池化的重要研究方向之一 。

1.1.2 资源碎片化导致分配率低

好的,我可以帮你优化这篇文章。以下是我优化后的文章:

资源碎片是指体量较小、低于应用需求而无法被分配出去的闲置资源。近年来,随着AI业务的迅速发展,从训练到推动,从小模型到大模型,AI任务的种类越来越多,对算力的需求也越来越高。因此,算力资源碎片化趋势较为明显。

希望这次修改能够满足你的需求。如果你还有其他问题或需要帮助,请随时告诉我。

(一)任务类型多样化:智算中心的算力资源广泛应用于各类任务,涵盖机器学习、深度学习、图像处理等领域。包括大型、小型模型,分布式推理及集中式推进等。由于任务类型的差异性,对硬件配置需求各异,因此不同任务需适配不同的算力资源,实现充分适配。

(二)任务规模差异:不同规模的任务需求不同算力资源,且无统一分配标准。小规模任务可申请大算力,加速完成;大规模任务则利用有限资源,降低投资。这种多因素导致任务规格与硬件配置无法匹配,进而产生算力资源碎片化。

(三)任务优先级的差异:各种任务可能具有不同的优先级,高优先级任务可能导致计算资源紧张,从而影响低优先级任务的执行和整体资源分配。

好的,我可以帮您优化文章内容。以下是优化后的文章:

根据多样化 AI 任务对算力资源的差异化需求,灵活地调度、分配资源,是降低智算中心算力资源碎片的关键。

优化后的文章更加简洁明了,同时保留了原文中的数据和重点信息。如果您有其他需要,请告诉我。

1.2 池化技术是提高资源效率的关键

如何最大化利用稀缺且高价值的计算资源,并降低无法分配的碎片可能性?一种可能的解决方案是借鉴云计算的理念,将GPU、AI芯片等聚合到池化资源中。通过运用先进的资源管理技术,我们可以对这些资源进行切分、调度和分配,从而实现按任务实际需求的有序供应。

物理成池:借助高性能智算中心网络,实现服务器间通路的打通,让分散在各服务器的CPU、GPU、AI芯片等算力资源互联互通、透明共享。这项技术打破了跨用户、用例、时间尺度的资源共享壁垒,为单个AI任务在集群节点中执行提供任意调用集群中算力的便利,进一步提升AI任务的运行速度。

(二)逻辑成池:利用池化软件对 CPU、GPU、AI 芯片等资源在逻辑上聚合,AI 任务在创建时,不再是将零散的、孤岛式的资源进行裸分配,而是根据调度流程,从聚合的池化资源中切分出所需数量进行分配。一方面,分配的资源数量可按 AI 任务实际所需执行,当 AI任务所需资源不明确,或因负载变化导致资源数量变动时,可实现动态供给、回收,实现多 AI 任务的峰谷互补,降低资源闲置率;另一方面,切分后的零散资源可以再度聚合、调度、分配,降低碎片率。

2. 算力池化定义与目标

2.1 算力池化的定义

智能算力池化技术是一种依托云计算技术,整合GPU/AI芯片等异构算力资源,构建集中管理的资源池,并按上层智算业务的需求,对池化的资源进行统一调度、分配,实现智算业务生命周期管理的全套技术。

为解决智算中心所面临的资源利用率问题,算力池化基于传统云计算技术(如 Kubernetes、OpenStack,智算中心以 Kubernetes 为主)有针对性地增强 GPU/AI 芯片池化能力,采用软件定义的方式,对 GPU/AI 芯片进行分时调度管理,实现按 GPU/AI 芯片的细粒度分配资源,并采用 GPU/AI 芯片 Runtime API 劫持、应用程序监视器等技术,实现资源跨节点远程调用、零散资源整合等,从而达到算力资源充分利用、碎片最小化效果,可有效提升资源效率,降低智算中心整体建设成本。

2.2 算力池化的目标

智能算力池化的目标是利用软件定义技术,对通过高速无损网络互连互通的 CPU、GPU、AI 芯片等算力资源进行池化整合,实现资源的集中调度、按需分配,使能资源可被充分利用,降低碎片概率,提高总体有效算力、降低智算中心购置成本。

  • 好的,我可以帮您优化文章内容。以下是我建议的优化版本:

    化整为零,革新传统的分配方式,实现精细化分配能力。根据AI任务的资源需求进行按需供给,满足多样化业务的差异需求。

    这样的优化版本更加简洁明了,同时保留了原文中的核心信息。希望这可以帮到您!

  • "跨越节点,利用高速无损网络,我们实现智能算力的高效调用。CPU 与 GPU、AI 芯片的协同工作得以实现,从而显著提升了整体性能并降低了碎片化现象。"

‍‍

  • 创新资源分配方式,摒弃静态与本地绑定,实现动态调整与回收。在多任务间实现峰谷互补,全局资源适度超分,从而提高资源利用效率。

3. 算力池化架构与关键技术

3.1 算力池化平台技术架构

新型智算中心算力池化平台是一种基于云计算技术的扩展池化能力,根据AI任务特点,一般基于K8S(Kubernetes)定制化实现。该平台的技术架构参考如下:

- 新互联:通过高速计算总线、全调度以太网、全开放DPU、多协议融合存储、全局统一存储等方式,实现网络的高速连接和数据的安全传输。
- 新算效:通过算力原生、智算资源池化、分布式训练等方式,提高算力的利用率和效率。
- 新存储:通过多协议融合存储、全局统一存储等方式,提供高效可靠的数据存储服务。
- 新平台:通过K8S等容器化技术,实现平台的快速部署和弹性伸缩。
- 新节能:通过智能节能技术,实现数据中心的绿色运营。

217c60fb85fe44ca729e38d2123a7891.jpeg

图 1 算力池化平台技术架构

算力池化平台逻辑上可分为池化资源管理、资源服务代理、池化运行时三类模块组成:

(1) 池化资源管理 


Kubernetes管理组件:专为满足您的需求而设计,提供原生服务组件的增强功能。分布式文件存储、支持多网络平面的POD以及RoCEv2/Infiniband网络等,一切尽在掌握。


Kubernetes调度扩展:关联Kubernetes调度服务扩展专用的池化资源类型,实现对这类资源的智能调度与分配。为充分发挥其效用,需与Kubernetes设备插件协同使用。

− 智算资源池化控制器:对 GPU、AI 芯片等智算进行统一管理、调度、分配;

(2) 资源服务代理 

  • 池化服务代理:根据智算资源池化控制器的调度,将池化运行时的资源请求重定向至实际物理位置。若涉及跨机访问智算资源,需通过池化服务代理多次重定向,跨机流量通过高速无损网络(如参数面网络)。‍‍
  • Kubernetes 服务代理是基于 Kubernetes 原生服务代理组件定制化增强的。kube-proxy 的作用主要是负责 service 的实现,具体来说,就是实现了内部从 pod 到 service 和外部的从 node port 向 service 的访问。‍ 
  • "Kubernetes 设备插件:为Kubernetes服务代理注册专用的池化资源类型,以实现与Kubernetes调度扩展的完美协同。"‍

(3) 池化运行时 

  • 池化运行时是一种基于 GPU 和 AI 芯片原生运行时(如 CUDA Runtime)的二次封装技术。通过 API 劫持和应用程序监视等手段,将 AI 应用软件和开发框架对算力资源的访问转发至池化服务代理执行。这种运行时位于容器 POD 内,并在容器运行时自动注入。

‍根据上述技术架构,当 AI 应用编排器通过调用 Kubernetes API创建应用时,可按新增的池化资源类型指定申请的资源数量(如pool.kubernetes.io/gpu: 1),对该类型资源的申请会被 Kubernetes调度扩展拦截、转递至智算资源池化控制器进行调度,智算资源池化控制器按申请的资源数量、资源池内空闲资源分布情况进行调度后,将调度结果响应给 Kubernetes 管理组件,然后 Kubernetes 管理组件正常执行 AI 应用的创建流程,由 Kubernetes 服务代理创建最终 POD作为交付物,并通过池化服务代理配合在 POD 中自动注入池化运行时、通过 Kubernetes 设备插件配合在 POD 中插入虚拟 GPU。

AI应用的POD在运行时,通过池化运行时访问虚拟GPU、执行AI任务。池化运行时拦截对虚拟GPU的访问请求,并将其转递给池化服务代理。池化服务代理查询虚拟GPU对应的真实智算资源位置和规格,根据查询结果分配智算资源并执行AI任务。如果真实的智算资源位于远程计算节点,本地池化服务代理会将访问请求转递给远程计算节点上的池化服务代理处理。相关通信通过参数面网络进行。

3.2 算力池化技术能力层级

算力池化技术是一种软件定义硬件加速的方式,通过更加高效灵活的聚合、调度以及释放海量 AI 加速算力,精准保障 AI 模型开发、训练、部署、测试、发布全链条算力配给,降低智算中心算力服务提供成本,提升智算中心整体效能。

当前算力池化技术可分为以下三个能力层级:
- 第一层级:基于虚拟化的算力池化技术,主要面向异构计算环境,通过虚拟化技术实现对异构计算资源的统一管理和调度。
- 第二层级:基于容器化的算力池化技术,主要面向云原生应用场景,通过容器技术实现对异构计算资源的快速部署和管理。
- 第三层级:基于硬件抽象层的算力池化技术,主要面向高性能计算场景,通过硬件抽象层实现对异构计算资源的深度优化和协同工作。

129bab41de0394fd50158f289333f4cf.jpeg

图 2 算力池化技术能力层级

英伟达的 MIG 技术是一种 GPU 虚拟化技术,允许一块物理 GPU 被分割成多个独立的 GPU 实例,每个实例可以被分配给不同的虚拟机、容器或用户。这种技术有助于更有效地利用 GPU 资源,提高 GPU 的共享性和多租户支持。

MIG 可将 GPU 划分为多达七个实例,其中每个实例均完全独立,并具有各自的高带宽显存、缓存和计算核心。如此一来,管理员便能支持各种规模的工作负载,确保服务质量 (QoS) 稳定可靠。

华为云的 AI 芯片动态管理支持物理 GPU/AI 芯片从算力和显存两个维度灵活切分,实现自定义大小(通常算力最小颗粒度 1%,显存最小颗粒度 1MB),满足 AI 应用差异化需求。

同时,软件定义 GPU/AI 芯片资源可充分适应当前应用云原生化趋势,实时响应上层应用对资源需求的变化,实现 vGPU/AI 芯片资源基于 Scale-Up/Scale-Down 的动态伸缩,并通过资源动态挂载和释放实现 GPU/AI 芯片资源超分。

阶段 3,池化管理。池化技术的重大突破在于支持 CPU 通用算力及 GPU/AI 芯片等智能算力的独立成池,两种资源池内汇聚的资源独立调度、分配,当调度的资源分属不同节点时,可通过高速无损网络跨节点调用、组装成 AI 任务所需总算力。此管理方式下,AI 应用可以部署到智算中心的任意位置,不管所在节点上有没有智算资源、智算资源够不够,所欠缺的部分从远程抓取即可,从而实现在网络范围内充分共享闲置、甚至碎片化的多种类型资源,促进资源的有效利用。

由于远程调用的资源访问速度相对较低,因此,池化管理技术可引入服务质量管理技术,按任务优先级,优先分配本地资源,次选远程调用。当任务资源不足时,将 AI 任务进行队列化管理,等待释放出充足资源时再运行。这样可以提高系统的稳定性和性能。

3.3 算力池化关键技术

3.3.1 软件定义的资源分配方式

传统的依赖于硬件支持的虚拟化技术下, AI 应用通过访问GPU/AI 芯片的运行时所提供的接口,以获得对智算资源的调用,资源的算力完全由卡硬件确定,软件上难以介入,从而无法获得更敏捷的管理。池化技术下,资源分配方式发生了根本性的变革,软件介入了资源的算力供给,为开启更敏捷的资源管理模式,比如动态伸缩、资源超分等奠定了技术基础,为持续优化智算资源利用率创造了无限可能。池化技术主要通过以下两种实现了软件定义的资源分配:

- 基于容器化的资源管理
- 基于虚拟化的资源管理

(1) API 劫持技术

API 劫持技术是一种针对智能算力的池化技术,它通过劫持对 Runtime API(如 CUDA API)调用实现资源调度。

API 劫持技术是一种针对智能算力的池化技术,它可以通过劫持对 Runtime API(如 CUDA API)调用实现资源调度。

如图3.1所示,AI应用的容器POD内运行的池化运行时并非直接基于GPU/AI芯片原生的运行时。实际上,它是经过一定程度定制的版本,与原生运行时提供完全等效的API接口。这意味着对于AI应用来说,这种运行时是透明且无感知的。

当AI应用调用池化运行时的API时,这些请求会被池化运行时传递给池化服务代理进行处理。池化服务代理拥有高度灵活的资源管理能力,例如能够按照1%的算力和1MB的缓存精度进行细粒度的资源分配。此外,它还能实现跨节点的远程资源调度,从而进一步提升了资源利用率和效率。

171a823bf7ea7a6dff633e8de8bfa3dc.jpeg

图 3 API 劫持技术图解

API 劫持技术的关键在于池化运行时仿真 GPU/AI 芯片的原生运行时,由于 GPU/AI 芯片种类、型号繁多,其原生运行时又相对活跃、升级频繁,仿真工作较为复杂,开发量、维护难度较大。

(2) 应用程序监视器技术

这是一种完全与 GPU/AI 芯片无关的设备虚拟化和远程处理方法,允许在没有显式软件支持的情况下启用新的硬件体系结构。该项技术通过应用程序监视器工作,该监视器与 Hypervisor 管理虚拟机的方式类似,分为前端、后端,前端监视指定应用程序的活动,拦截至后端处理,后端可以按应用程序申请的数量分配资源,或将应用程序拆分到多台机器上运行,在保持代码、数据和执行环境一致性的前提下使用这些机器上的智算资源,从而实现资源的细粒度管理、远程调用等资源敏捷化管理功能。

应用程序监视器负责维护应用程序状态(内存、文件、应用程序库的加载),以及虚拟化与系统的交互(例如系统调用和进程间通信),以确保在多个位置执行时的一致性。

9e7bbd79a3f5c664403698db862511c4.jpeg

图 4 应用程序监视器技术图解

应用程序监视器技术独具匠心,与侵入AI应用资源访问流程的API劫持技术截然不同。它摒弃了仿真原生运行时API接口的方式,而是通过底层系统调用,巧妙地支持各种硬件和新运行时功能。这种实现方式与特定运行时API(如CUDA)无关,展现出强大的通用性和兼容性。应用程序监视器技术作为一种新型池化方案,我们建议在技术成熟后再考虑商业引入。

3.3.2 算力资源高质量管理技术

(一)资源细粒度分配

通过虚拟化技术,实现对物理资源的精细化管理。在新的体系下,应用不再受限于传统的硬件资源申请与使用方式,而是以更为灵活的方式进行操作。以算力 1%,显存 1MB 为基本单位,为上层应用提供更为高效的资源利用方案。

(二)资源限额管理

利用时分算力控制技术,实现GPU算力和显存在不同租户、同一租户内不同进程以及不同租户之间的隔离与调控。此举旨在减少资源争夺导致的性能波动,防止程序恶意占用算力资源。

(三)资源无感动态伸缩

池化技术能动态调整资源分配,满足容器的实时需求。上层应用根据业务逻辑和负载状况,向调度平台申请算力、显存等资源,实现资源的垂直扩展。

(四)资源超分及峰谷互补

为确保服务质量,智算中心在提供各类业务时,采用分散部署策略。然而,由于业务运行存在高峰与低谷,导致异构算力硬件在空闲期显著延长,远超高峰期,进而使整体资源利用率降低。

将业务的波谷时段利用起来,可以减少波谷时间,从时间维度提升效能;同时,将资源预留冗余缩小,可以从空间维度提升效能。因此,将不同优先级、不同波动周期的业务进行混合部署,为两个维度提升利用率提供了可能性。这样,低优先级任务就可以占用空闲资源,而高优先级任务则能及时抢占到资源,从而保证关键业务的服务质量。
算力池化技术,通过软件定义,巧妙地抽象底层物理硬件资源,实现规模放大。利用硬件计算周期空闲时间,时分复用算力,最大化资源利用。同时,单一指针管理内存,实现显存、系统内存统一维护。在CPU与GPU之间建立内存池,共享内存资源,系统自动进行内存迁移,以拓展GPU显存,如CUDA unified memory。

(五)智算任务队列化管理

单个 AI 任务的开展可简单划为为数据准备、任务执行、模型评估三个阶段,从资源角度上分析,数据准备阶段主要使用 CPU 资源,训练开始后才开始使用 GPU 算力资源进行计算加速。相较于 CPU 通用算力资源,智算中心内智能算力资源更加容易达到瓶颈,为提高整体AI 训练任务的执行效率,算力池化技术可提供智能算力资源排队的能力,即 AI 任务的下发可根据 CPU、内存等资源的可用情况触发,训练任务进入执行阶段后,如智能算力资源不足可进行排队等待,按序执行。同时可根据训练任务的重要程度,设置资源使用的优先级。

3.3.3 泛在化碎片的池化整合技术

利用泛在化碎片并将其池化整合,将分散的资源合并为逻辑视图上的一整片算力。这将提高满足AI任务资源规格需求的概率。

(一)泛在化资源跨机整合技术

论文《Characterizing Deep Learning Training Workloads onAlibaba-PAI》分析了阿里一个训练集群上的负载特征(见图 5):从任务数量上看,约 59%的任务是单卡小任务;从 GPU 资源消耗上看,虽然 81%的 GPU 是被分布式训练任务占用(单机多卡也算分布式),但是这其中有一半的资源是被小于 8 个 GPU 的任务所占用(1 台物理服务器可满足);只有 0.7%数量的任务是使用超过 128 个 GPU(需要16 台或更多物理服务器)。

373e81c49ce2f493bf8176e6a5c8b27c.jpeg

这个研究表明,训练任务的多样性和规模差异很大。从资源利用的角度来看,智算中心的各种业务对CPU和GPU的算力需求也呈现出多样性。然而,由于GPU服务器硬件通常配置为单机4卡或8卡,因此在承载各种训练任务时,固定的CPU与GPU配比可能会导致资源碎片化的问题。这种情况会使得大量的多卡任务因为资源不足而在队列中排队等待执行,进而可能导致整体资源流转效率降低。

为解决资源碎片问题,池化技术可以实现对零散资源的整合,包括跨机整合。见第 3.1章,智算资源池化控制器实现了对 CPU及 GPU/AI芯片分池、单独调度,也即为 POD 调度的 CPU 与 GPU/AI 芯片资源可能不在同一台服务器上,但对应用是透明的,当 AI 应用访问虚拟 GPU时,由池化服务代理根据虚拟 GPU 所对应的真实 GPU 资源位置分配资源,如果有远程调用需求,则由 POD 所在服务器上的池化服务代理转发资源请求至目标服务器上的池化代理服务访问。

(二)智算业务 SLA 分级及自动服务质量管理

作为承载海量智算业务的基础设施,智算中心需在兼顾整体吞吐率与GPU/AI芯片资源利用率的基础上,优化多个训练任务的整体性能,而非过分强调单一任务的性能。

深度学习框架是训练任务的基石,旨在提升性能。池化技术充分利用数据中心资源,实现多任务最优,与框架目标相辅相成。

通过框架和池化技术的协同优化,我们能实现多任务间的资源最优化配置。借助池化技术,我们可以根据任务的性能需求进行分级管理,优先分配硬件资源、使用所在服务器上的GPU/AI芯片资源,或者调动数据中心内可用的算力资源。这样,我们不仅能满足各个任务的性能要求,更能达到整体资源的最优化分配,从而提升计算效率和任务执行速度。

5. 展望与倡议

随着AIGC产业的繁荣,如GPT和Stable Diffusion等技术的成熟,智能算力需求呈指数级增长。与传统的GPU/AI芯片直通技术相比,算力池化技术具有更高的算力利用效率、便捷的使用方式和降低的使用成本,为产业发展奠定坚实的算力基础。 

-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

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

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

相关文章

特征工程练手(四):特征选择

本文为和鲸python 特征工程入门与实践闯关训练营资料整理而来,加入了自己的理解(by GPT4o) 原活动链接 原作者:云中君,大厂后端研发工程师 目录 0、关卡总结1、前言2、基础知识讲解2.1get_best_model_and_accuracy2…

springboot集成kafka-生产者发送消息

springboot集成kafka发送消息 1、kafkaTemplate.send()方法1.1、springboot集成kafka发送消息Message对象消息1.2、springboot集成kafka发送ProducerRecord对象消息1.3、springboot集成kafka发送指定分区消息 2、kafkaTemplate.sendDefault()方法3、kafkaTemplate.send(...)和k…

案例-异常

题目: (如果一开始不知道如何用异常的语法写,可先用如if语句代替try...catch,最后再把if优化为try...catch) 代码: javabean类: 测试类:

Java CompletableFuture:你真的了解它吗?

文章目录 1 什么是 CompletableFuture?2 如何正确使用 CompletableFuture 对象?3 如何结合回调函数处理异步任务结果?4 如何组合并处理多个 CompletableFuture? 1 什么是 CompletableFuture? CompletableFuture 是 Ja…

springboot静态资源访问问题归纳

以下内容基于springboot 2.3.4.RELEASE 1、默认配置的springboot项目,有四个静态资源文件夹,它们是有优先级的,如下: "classpath:/META-INF/resources/", (优先级最高) "classpath:/reso…

【精选】基于Spark的国漫推荐系统(精选设计产品)

目录: 系统开发技术 Python可视化技术 Django框架 Hadoop介绍 Scrapy介绍 IDEA介绍 B/S架构 MySQL数据库介绍 系统流程分析 操作流程 添加信息流程 删除信息流程 系统系统介绍: 可以查看我的B站: 系统测试 运行环境 软件平台 硬…

docker-compose安装NebulaGraph 3.8.0

文章目录 一. 安装NebulaGraph1.1 通过 Git 克隆nebula-docker-compose仓库的3.8.0分支到主机1.2 部署1.3 卸载1.4 查看 二. 安装NebulaGraph Studio2.1 下载 Studio 的部署配置文件2.2 创建nebula-graph-studio-3.10.0目录,并将安装包解压至目录中2.3 解压后进入 n…

shaushaushau1

CVE-2023-7130 靶标介绍: College Notes Gallery 2.0 允许通过“/notes/login.php”中的参数‘user’进行 SQL 注入。利用这个问题可能会使攻击者有机会破坏应用程序,访问或修改数据. 已经告诉你在哪里存在sql注入了,一般上来应该先目录扫…

【补充篇】AUTOSAR多核OS介绍(下)

文章目录 前文回顾1 AUTOSAR OS1.1 AUTSOAR OS元素1.1.1 操作系统对象1.1.2 操作系统应用程序1.1.3 AUTOSAR OS裁剪类型1.1.4 AUTOSAR OS软件分区1.2 AUTOSAR OS自旋锁1.3 AUTOSAR OS核间通信1.4 AUTOSAR OS多核调度前文回顾 在上篇文章【补充篇】AUTOSAR多核OS介绍(上)中,…

对于一个36岁的人来说,现在转行AI大模型还来得及吗?

前言 在职场生涯中,33岁似乎是一个尴尬的年龄。许多人在这个阶段已经定型,难以寻求新的突破。然而,随着科技行业的飞速发展,人工智能成为了新时代的宠儿。那么,对于一个33岁的人来说,现在转行AI大模型还来…

做SSH实验下载 paramiko库

今天做SSH实验下载paramiko库文件一直出问题,后面库文件下好了还是报错,这里记录了我的解决方案。 pycharm修改默认下载路径为国内镜像(我这里用清华大学的镜像下载快一些) Simple Index 到这里路径就改好了,接下来就…

从就业出发,深度剖析大数据行业的现状与前景

以一个经典案例引入——啤酒与纸尿裤的故事。 20世纪90年代,沃尔玛从购物的后台信息数据中,发现很多买了纸尿裤的男士会同时买啤酒。后来,调查发现,此类人多是被“轰出来”买纸尿裤,一想到养娃压力大,心情…

牛客竞赛数据结构专题班树状数组、线段树练习题

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ G 智乃酱的平方数列(线段树,等差数列,多项式) 题目描述 想必你一定会用线段树维护等差数列吧?让我们来看看它的升级版。 请你维护一个长度为510 ^5…

Mysql高级 [Linux版] 性能优化 数据库系统配置优化 和 MySQL的执行顺序 以及 Mysql执行引擎介绍

数据库系统配置优化 1、定义 数据库是基于操作系统的,目前大多数MySQL都是安装在linux系统之上,所以对于操作系统的一些参数配置也会影响到MySQL的性能,下面就列出一些常用的系统配置。 2、优化配置参数-操作系统 优化包括操作系统的优化及My…

集运系统:如何实现不同员工的不同操作权限?

在集运行业,员工的角色和职责各有不同,因此对系统的操作权限需求也不尽相同。为了确保数据的安全性和业务的顺利进行,易境通集运系统提供了灵活的权限管理功能,让企业可以根据员工的角色和职责,设置不同的操作权限。 易…

Redis (day 3)

一、通过jedis连接数据库 1.首先导入依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.0</version></de…

mac 微信数据直接存储到移动硬盘

在apple设备上存储都是1500块/128gb的价格收取的&#xff0c;真的是寸土寸金。在手机已经占用了一遍存储空间之后&#xff0c;微信备份还要占用一遍。 iCloud备份微信聊天记录的稳定性真的非常差劲&#xff0c;比如我微信30g&#xff0c;经常恢复到20g左右就被打断&#xff0c;…

【C++ Primer Plus习题】2.6

问题: 解答: #include <iostream> using namespace std;#define LIGHT_TO_SKY 63240double lightToSky(double value) {return value * LIGHT_TO_SKY; }int main() {double light 0;cout << "请输入光年值:";cin >> light;cout << light &…

还在返回一大堆 null 字段给前端?

在许多情况下&#xff0c;返回的 JSON 数据可能包含许多 null 值的字段&#xff0c;这会导致数据冗余&#xff0c;增加网络传输的负担&#xff0c;并使得前端处理数据变得复杂。因此&#xff0c;使用 JsonInclude(JsonInclude.Include.NON_NULL) 可以帮助我们优化 JSON 的输出&…