EdgeShard:通过协作边缘计算实现高效的 LLM 推理
(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理)
作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui; |
期刊: (发表日期: 2024-05-23) |
期刊分区: |
本地链接: Zhang 等 - 2024 - EdgeShard Efficient LLM Inference via Collaborative Edge Computing.pdf |
DOI: 10.48550/arXiv.2405.14371 |
摘要: Large language models (LLMs) have shown great potential in natural language processing and content generation. However, current LLMs heavily rely on cloud computing, leading to prolonged latency, high bandwidth cost, and privacy concerns. Edge computing is promising to address such concerns by deploying LLMs on edge devices, closer to data sources. Some works try to leverage model quantization to reduce the model size to fit the resource-constraint edge devices, but they lead to accuracy loss. Other works use cloud-edge collaboration, suffering from unstable network connections. In this work, we leverage collaborative edge computing to facilitate the collaboration among edge devices and cloud servers for jointly performing efficient LLM inference. We propose a general framework to partition the LLM model into shards and deploy on distributed devices. To achieve efficient LLM inference, we formulate an adaptive joint device selection and model partition problem and design an efficient dynamic programming algorithm to optimize the inference latency and throughput, respectively. Experiments of Llama2 serial models on a heterogeneous physical prototype demonstrate that EdgeShard achieves up to 50% latency reduction and 2x throughput improvement over baseline methods. |
此文为机器辅助翻译,仅供个人学习使用,如有翻译不当之处欢迎指正
Abstract
大语言模型(LLMs)在自然语言处理和内容生成方面展现出了巨大潜力。然而,当前的大语言模型严重依赖云计算,这导致了延迟延长、带宽成本高昂以及隐私方面的问题。边缘计算有望通过在更靠近数据源的边缘设备上部署大语言模型来解决这些问题。一些研究尝试利用模型量化来减小模型大小,以适配资源受限的边缘设备,但这会导致精度损失。还有一些研究采用云边协作的方式,却受到网络连接不稳定的困扰。在本研究中,我们利用协同边缘计算来促进边缘设备和云服务器之间的协作,从而共同高效地执行大语言模型推理。我们提出了一个通用框架,将大语言模型划分为多个分片,并部署在分布式设备上。为了实现高效的大语言模型推理,我们构建了一个自适应的联合设备选择和模型分区问题,并设计了一种高效的动态规划算法,分别对推理延迟和吞吐量进行优化。在异构物理原型上对 Llama2 系列模型进行的实验表明,与基线方法相比,EdgeShard 的推理延迟最多可降低 50%,吞吐量最多可提高 2 倍。
引言
近年来,大语言模型(LLMs)的出现引起了公众、行业和学术界的广泛关注,它代表了人工智能(AI)领域的一项重大突破。许多参与者带着他们的先进模型进入这一领域,比如 OpenAI 的 GPT-4 [1]、Meta 的 Llama [2] 以及谷歌的 PALM [3]。大语言模型基于 Transformer 架构 [4] 构建,其特点是参数数量庞大,并且训练数据量巨大。大语言模型的参数规模通常高达数千亿,这使得模型能够捕捉语言和上下文的复杂模式,从而在生成连贯且符合上下文的回复方面表现出色。这种现象也被称为 “智能涌现” 。大语言模型的卓越能力使其在广泛的应用领域中具有很高的价值和出色的表现,从聊天机器人、内容生成(例如文本摘要和代码生成)到教育和研究辅助工具等。
然而,当前的大语言模型严重依赖云计算,面临响应时间长、带宽成本高以及隐私问题 [5]。首先,对云计算的依赖限制了模型在实时应用(如机器人控制、导航或勘探)中进行快速推理的能力,在这些应用场景中,即时响应至关重要。其次,大量数据(包括文本、视频、图像、音频和物联网传感数据)传输到云数据中心,这会导致大量的带宽消耗,给网络架构带来巨大压力。第三,基于云的大语言模型引发了严重的隐私问题,尤其是在处理医院和银行的敏感数据,以及手机上的文本输入和照片等个人数据时。
边缘计算有望通过在更靠近数据源的网络边缘设备(如边缘服务器、边缘网关和手机)上部署大语言模型(LLMs)来解决上述挑战[6]。然而,大语言模型计算量极大且资源需求高。例如,全精度的Llama2 - 7B模型推理至少需要28GB内存,这可能超出了大多数边缘设备的容量。一些研究利用模型量化技术[7]-[12]来减小模型大小,以适配资源受限的边缘设备。但这往往会导致精度损失。其他研究倾向于采用云边协作的方式[13]、[14],即将大语言模型划分为两个子模型,并将部分计算工作负载卸载到配备高端GPU的强大云服务器上。然而,边缘设备与云服务器之间的延迟通常较高且不稳定。
另外,近年来我们见证了边缘计算能力的持续增长,大量边缘服务器和边缘云被部署在网络边缘,还有大量资源有待利用。因此,最近提出了协同边缘计算(CEC)[15,16],旨在整合地理上分散的边缘设备和云服务器的计算资源,以实现高效的资源利用和性能优化。如图1所示,无处不在的分布式边缘设备和云服务器相互连接,形成一个共享资源池,共同提供即时数据处理和人工智能服务。协同边缘计算(CEC)与现有的边缘计算研究有所不同。现有的边缘计算研究侧重于云、边缘和终端设备之间的垂直协作,却忽视了边缘设备之间的水平协作,存在资源利用未优化、服务覆盖范围受限以及性能不均衡等问题。
受协同边缘计算(CEC)愿景的启发,我们提出了一种通用的大语言模型推理框架EdgeShard,以支持在分布式边缘设备和云服务器上进行高效的大语言模型协同推理。为简便起见,以下我们用计算设备指代边缘设备和云服务器。在一个由异构计算设备组成的网络中,EdgeShard将大语言模型划分为多个分片,并根据异构的计算和网络资源以及设备的内存预算,将它们分配给合适的设备。为了优化性能,我们构建了一个联合设备选择和模型分区问题,并设计了一种高效的动态规划算法,分别用于最小化推理延迟和最大化推理吞吐量。在实际测试平台上进行的大量实验表明,与设备本地推理和垂直云边协同推理方法相比,EdgeShard的推理延迟最多可降低50%,吞吐量最多可提高2倍。
我们的工作与那些在云数据中心将大语言模型进行划分并分配到多个GPU上的研究有所不同,比如Gpipe[17]和PipeDream[18]。在边缘计算环境中部署大语言模型与在云端部署有很大差异。其一,云服务器通常配备同质化的GPU,而边缘设备本质上具有异构的计算能力。其二,用于大语言模型的现代云GPU通常通过高带宽网络连接,如InfiniBand和Nvlinks,而边缘设备则通过异构的低带宽网络连接。例如,Nvlinks的带宽可达600GB/s,而边缘设备之间的带宽范围仅从几十Kbps到1000Mbps。为云数据中心设计的大语言模型部署方案忽略了异构且资源受限的边缘计算环境。
我们的贡献主要体现在三个方面。
- 首先,我们提出了一个通用的大语言模型推理框架,用于在边缘计算环境中部署大语言模型,该框架支持异构边缘设备和云服务器之间进行协同推理。
- 此外,我们定量研究了如何选择计算设备以及如何对大语言模型进行分区以优化性能。我们从数学角度构建了联合设备选择和模型分区问题,并分别提出了动态规划算法来优化推理延迟和吞吐量。
- 我们还在物理测试平台上,使用最先进的Llama2系列模型对EdgeShard的性能进行了评估。实验结果表明,EdgeShard的性能显著优于各种基线方法。
预备知识与研究动机
生成式大语言模型推理。 大语言模型通常是指基于解码器的拥有数十亿参数的Transformer模型。与基于编码器架构的BERT[19]不同,BERT的推理过程是单阶段的,而大语言模型的推理过程是迭代的,通常包括两个阶段:提示处理阶段和自回归生成阶段。提示处理阶段也被称为预填充阶段。
在提示处理阶段,模型将用户输入的初始词元 ( x 1 , . . . , x n ) (x_{1}, ..., x_{n}) (x1,...,xn)作为输入,并通过计算概率 P ( x n + 1 ∣ x 1 , . . . , x n ) P(x_{n+1} | x_{1}, ..., x_{n}) P(xn+1∣x1,...,xn)生成第一个新的词元 x n + 1 x_{n+1} xn+1。
在自回归生成阶段,模型基于初始输入和目前已生成的词元,每次生成一个词元。这一阶段会通过多次迭代按顺序生成词元,直到满足停止条件,即生成序列结束(EOS)词元,或者达到用户指定的最大词元数量,又或者达到大语言模型所限制的最大词元数量。
如图 2 所示,假设大语言模型有 N 层,它会接收一系列输入词元,并运行所有层,逐个生成词元。在预填充阶段,模型一次性接收输入 “Today is a”,生成的第一个词元是 “good”。在自回归生成阶段,模型首先将 “Today is a good” 作为输入,生成下一个词元 “day”。然后,它将 “Today is a good day” 作为输入,生成下一个词元 “EOS”,这表明生成结束。由于生成的每个词元都由序列中它前面的所有词元决定,大语言模型利用键值缓存(KV 缓存)来避免重复计算,存储之前的计算结果以加快响应速度,从而减少计算工作量并缩短响应时间。预填充阶段生成一个词元的时间比自回归阶段要长得多(通常是10倍),因为预填充阶段需要计算所有输入词元的键值缓存(KV缓存)进行初始化。
大语言模型非常消耗内存。单个边缘设备可能没有足够的内存来容纳一个大语言模型。以最受欢迎的大语言模型之一——Llama2为例。如表1所示,Llama2有三种不同的版本,即70亿参数(7B)、130亿参数(13B)和700亿参数(70B)。从表中我们可以看到,Llama2-7B的全精度推理至少需要28GB的内存,而智能手机通常只有6到12GB的内存,英伟达Jetson Orin NX设备也只有8到16GB的内存。这些设备无法承担在本地进行大语言模型推理的任务。一些研究尝试使用低精度量化,例如8比特和4比特量化。然而,这仍然可能超过边缘设备的内存容量。例如,Llama2-70B的4比特推理至少需要35GB的内存,这是大多数边缘设备无法容纳的。此外,低精度推理会导致性能下降。
在这项工作中,我们利用了协同边缘计算,这是一种计算范式,在这种范式下,地理上分布的边缘设备和云服务器协同执行计算任务。基于这一理念,我们提出了EdgeShard,这是一个通用的大语言模型推理框架。该框架允许在分布式计算设备上进行自适应的设备选择和大语言模型分区,以解决高内存需求的问题,并利用异构资源来优化大语言模型的推理。
面向大语言模型的协同边缘计算
该框架包含三个阶段,分别是性能分析、任务调度优化以及协同推理。其工作流程如图3所示。
性能分析是一个离线步骤,它为优化步骤分析必要的运行时跟踪信息,并且只需要进行一次。这些跟踪信息包括:1)不同设备上每一层的执行时间;2)大语言模型每一层的激活数据大小和内存消耗;3)每个设备的可用内存以及设备之间的带宽。对于每一层的执行时间,我们分别分析预填充阶段和自回归阶段生成一个词元的时间,然后取平均值。对于那些可能没有足够内存来完整加载模型以进行性能分析的设备,我们采用了动态模型加载技术。在该技术中,模型的各层会被依次加载,以适配受限的内存。然后,这些性能分析信息将被用于支持智能的任务调度策略。
调度优化。在任务调度优化阶段,调度器通过确定让哪些设备参与、如何按层划分大语言模型以及应将模型分片分配给哪些设备,来生成一个部署策略。该策略全面考虑了异构资源、设备的内存预算以及隐私限制,随后会应用到选定的设备上,以实现高效的大语言模型推理。更多细节将在第四节中阐述。
协同推理。在获得大语言模型的分区和分配策略后,选定的设备将进行协同推理。我们会在每个参与的设备上预先为键值缓存分配内存空间。对于协同推理,我们考虑两种情况,即顺序推理和流水线并行推理。
在顺序推理中,设备轮流使用分配的模型分片来执行计算。如图 4(a)所示,假设大语言模型被划分为 3 个分片,并分别分配给设备 1、设备 2 和设备 3。设备 1 将首先处理输入数据,然后将激活数据 / 输出发送给设备 2,设备 2 处理数据后再传输给设备 3。顺序推理适用于为单个用户服务的场景,例如智能家居场景,在这种场景中,用户的个人设备(如平板电脑、手机和智能音箱)协同执行大语言模型推理。在这样的场景中,用户输入一个提示并得到回复,然后再输入另一个提示。我们的目标是将顺序推理的延迟降至最低。
然而,从系统的角度来看,顺序推理的资源利用效率并不高。当设备1在执行计算时,设备2和设备3处于闲置状态。因此,我们采用流水线并行的方式来提高资源利用率。对于像之前在云服务器上的Gpipe[17]和PipeDream[18]等工作中所采用的流水线并行推理,输入数据首先会被分割成微批次,然后输入到系统中。如图4(b)所示,设备1首先处理数据B1,然后将中间数据传输给设备2。在处理完数据B1后,设备1会立即开始处理数据B2。以这样的流水线方式运行,每个设备都处于忙碌状态,系统资源利用率很高。
优化大语言模型推理
我们考虑一个由异构设备和异构带宽连接组成的通用协同边缘网络。更具体地说,对于一组通过异构带宽连接的异构设备,EdgeShard旨在选择设备的一个子集,并将大语言模型划分为多个分片,然后将这些分片分配给选定的设备,以最小化推理延迟或最大化吞吐量。
系统模型。大语言模型通常具有分层架构,该架构由一个嵌入层、多个解码器层和一个输出层组成。各层的参数规模和激活值(即某一层的输出)大小各不相同。我们假设该模型有 N N N层。 O i O_{i} Oi表示第 i i i层( 0 ≤ i ≤ N − 1 0 \leq i \leq N - 1 0≤i≤N−1)激活值的规模。第 i i i层的内存消耗用 R e q Req Req表示。
我们考虑一个由 M M M个边缘设备和云服务器组成的网络。这些设备具有异构的计算能力和内存能力,并且云服务器在计算能力方面比边缘设备强大得多。设备 3 3 3的内存预算为 M e m j Mem _{j} Memj 。这些计算设备是相互连接的。设备 k k k与设备 j j j之间的带宽为 B k , j B_{k, j} Bk,j ,其中 0 ≤ k ≤ M − 1 0 \leq k \leq M - 1 0≤k≤M−1 , 0 ≤ j ≤ M − 1 0 \leq j \leq M - 1 0≤j≤M−1 。存在一个源节点,输入词元存储在该源节点中。在不失一般性的情况下,我们将源节点设为节点 0 0 0。本文中使用的主要符号如表二所示。
A. 优化大语言模型(LLM)的推理延迟
问题表述。我们使用一个二元变量 X i , j X_{i,j} Xi,j来表示大语言模型(LLM)的分配策略。如果第 i i i层被分配到节点 j j j,则 X i , j X_{i,j} Xi,j等于 1 1 1,否则 X i , j X_{i,j} Xi,j等于 0 0 0。某一层将且仅会被分配到一个节点。因此,对于所有的 i i i,有 ∑ j = 0 M − 1 X i , j = 1 \sum_{j = 0}^{M - 1}X_{i,j} = 1 ∑j=0M−1Xi,j=1 。设 t i , j comp t_{i,j}^{\text{comp}} ti,jcomp表示第 i i i层在节点 j j j上的计算时间。假设第 i − 1 i - 1 i−1层和第 i i i层分别被分配到节点 k k k和节点 j j j。我们用 t i − 1 , k , j comm t_{i - 1,k,j}^{\text{comm}} ti−1,k,jcomm表示将第 i − 1 i - 1 i−1层的激活值从节点 k k k传输到节点 j j j的通信时间。数据传输时间由某一层的输出规模以及两个节点之间的带宽决定。如果第 i − 1 i - 1 i−1层和第 i i i层在同一个节点上,我们假设传输时间为 0 0 0。因此,我们有:
t i − 1 , k
相关文章:
EdgeShard:通过协作边缘计算实现高效的 LLM 推理
(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...
π0: A Vision-Language-Action Flow Model for General Robot Control
TL;DR 2024 年 Physical Intelligence 发布的 VLA 模型 π0,基于 transformer 流匹配(flow matching)架构,当前开源领域最强的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…...
RabbitMQ高级篇-MQ的可靠性
目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化: 消息持久化: 3.非消息持久化 非持久化队列: 非持久化消息: 4.消息的存储机制 4.1持久化消息&…...
4、前后端联调文生文、文生图事件
4、前后端联调文生文、文生图事件 原文地址 1、底部【发送按钮】事件触发调用后端AI程序逻辑 <!-- 前端模板如下: --> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>小薛博客LLM大模型实战</title><me…...
深度学习中的提示词优化:梯度下降全解析
深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...
Midjourney 最佳创作思路与实战技巧深度解析【附提示词与学习资料包下载】
引言 在人工智能图像生成领域,Midjourney 凭借其强大的艺术表现力和灵活的创作模式,已成为设计师、艺术家和创意工作者的核心工具。作为 CSDN 博主 “小正太浩二”,我将结合多年实战经验,系统分享 Midjourney 的创作方法论&#x…...
【数字图像处理】半开卷复习提纲
1:要求 2张A4纸以内,正反面均可写 (不过博主由于墨水浸到背面了,采用了把2张单面通过双面胶粘起来的方法,结果考前半个小时都在用这个难用的双面胶。。。) 2:提纲内容 3:提示 考的…...
交通运输与能源融合发展——光储充在交通上的应用完整解决方案
在全球积极应对气候变化、推动可持续发展的大背景下,交通运输与能源领域的融合发展成为关键趋势。近日,交通运输部等十部门联合发布的《关于推动交通运输与能源融合发展的指导意见》,为这两个重要行业的协同前行指明了清晰的方向,…...
API 接口开放平台 Crabc 3.2 发布
2025 年 5 月 15 日,API 接口开放平台 Crabc 3.2 发布。 Crabc 是一款 API 接口开发平台、企业级接口管理和 SQL2API 平台。它支持动态数据源、动态 SQL 和标签,能接入多种 SQL 或 NoSQL 数据源,包括 MySQL、Oracle、达梦、TiDB、Hive、ES 和…...
基于智能推荐的就业平台的设计与实现(招聘系统)(SpringBoot Thymeleaf)+文档
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
【web应用】配置Java JDK与maven3的环境变量
文章目录 一、控制面板 - 系统 - 高级系统设置-环境变量二、用户变量和系统变量的配置方法一样:三、查看是否配置成功 maven有两种安装方式: 1、IDEA捆绑安装,一般是maven3【这里配置的环境变量是捆绑安装这种方式】 2、手动下载安装插件 一、…...
编程日志5.7
二叉树的功能代码 #include<iostream> using namespace std; //二叉树结点定义 template<typename T> struct TreeNode { T val;//定义了一个类型为T的成员变量val,用于存储树节点的值 TreeNode* left;//定义了一个指向TreeNode类型的指针成员变量left,…...
室内定位:热门研究方向与未解难题深度解析
I. 引言:对普适性室内定位的持续探索 A. 室内定位在现代应用中的重要性 室内定位系统(IPS)正迅速成为众多应用领域的基石技术,其重要性源于现代社会人们约70%至90%的时间在室内度过的事实 1。这些应用横跨多个行业,包括应急响应 1、智能建筑与智慧城市 6、医疗健康(如病…...
图片通过滑块小图切换大图放大镜效果显示
图片通过滑块小图切换大图放大镜效果显示 实现目标: 显示一组图片列表,鼠标进入小图记录当下小图下标,通过小图下标在数组中对应图片显示到大图位置; 鼠标进入大图位置时,带动滑块移动,并将放大两倍的大图…...
[250515] 腾讯推出 AI 编程助手 CodeBuddy,对标 Cursor
目录 腾讯推出 AI 编程助手 CodeBuddy 腾讯推出 AI 编程助手 CodeBuddy 腾讯发布 CodeBuddy,一款 AI 编程助手,旨在提升开发者效率。 主要亮点: CodeBuddy: 全新英文品牌,面向全球开发者。Craft 模式: A…...
OpenCV光流估计:原理、实现与应用
一、什么是光流? 光流(Optical Flow)是计算机视觉中描述图像序列中像素运动模式的重要概念。它表示图像中物体在连续帧之间的表观运动,是由物体或相机的运动引起的。 光流的基本假设 亮度恒常性:同一物体点在连续帧中的亮度保持不变时间持…...
使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)
使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据 目录 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据📌 简介🛠 插件安装方法🌍 下载 DEM 数据步骤🔑 注册 OpenTopography 账号(如使用 Cope…...
PHP基础知识
【学习资料】 视频: https://www.bilibili.com/video/BV1Xh411S7G1?spm_id_from333.788.videopod.episodes&vd_sourcebe26b82da70367069ab00d6db4f4ffc0 文档:https://www.runoob.com/php/php-tutorial.html 目录 1,PHP是什么2ÿ…...
Kotlin 和 Java 混合开发时需要注意哪些问题
1 空安全(Null Safety) Kotlin 有严格的空安全机制(如非空类型的 String 和可空类型 String?),但是 Java 没有: Kotlin 代码调用 Java 代码:Java 中的所有引用类型默认都是可空的,…...
乘法口诀练习神器
请你利用python语言开发一个“乘法口诀练习神器”,主要辅助小学生练习乘法口诀,主要功能如下: 1. 能够随机循环出10道题,可以是乘法或者是除法。如果是乘法,确保两个因数都是1-9之间的整数;如果是除法&…...
How to configure Linux mint desktop
Backgrounds apt install mint-backgrounds-*Theme...
【golang】DNS 资源记录(RR)接口
Go 中 miekg/dns 包对 DNS 资源记录(RR)接口 的定义: type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }这个接…...
Vue中的自定义指令适用于哪些场景
自定义指令在 Vue 中非常灵活且功能强大,它们可以在多种场景中使用,以实现特定的 DOM 操作或行为 自定义样式和类 自定义指令可以用来动态地添加或修改元素的样式和类。这在需要根据数据动态调整样式时非常有用。 <div id"app"><d…...
边缘计算平台
本文来源 : 腾讯元宝 边缘计算平台是一种在靠近数据源头的网络边缘侧部署的分布式计算架构,通过融合网络、计算、存储和应用核心能力,就近提供实时、低延迟的智能服务。以下是其核心要点: 1. 定义与特点 定义&a…...
2025年5月H12-831新增题库带解析
组播基础 以下关于PIM-SM(SSM)的描述,错误的是哪一项? PIM-SM(SSM)无需维护RPPIM-SM(SSM)模型形成的组播分发树会一直存在,不会因为没有组播流量而消失PIM-SM(SSM)可以在成员端DR上基于组播源地址直接反向建立SPT在PIM-SM(SSM)中依日需要注册组播源 答…...
JavaScript - 运算符之逗号操作符与逗号分隔符(逗号操作符概述、逗号操作符用法、逗号分隔符、逗号分隔符用法)
一、逗号操作符概述 【表达式 1】, 【表达式 2】, 【表达式 3】, ..., 【表达式 N】逗号操作符(,)允许在一个语句中从左到右执行多个表达式,并返回最后一个表达式的值 二、逗号操作符用法 for 循环中的多变量控制 for (let i 0, j 10; i…...
AM1.5G太阳光模拟器参数
AM1.5G太阳光模拟器的参数通常包括光谱匹配度、空间均匀性、时间稳定性等关键指标,这些参数对于太阳能电池的测试和校准至关重要。以下是AM1.5G太阳光模拟器的主要参数: 光谱匹配度 AM1.5G光谱是指大气质量为1.5时,太阳光在地球表面的光谱分…...
YOLO11解决方案之距离计算探索
概述 Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算,YOLO11使用两个边界框的中心…...
OkHttp用法-Java调用http服务
特点:高性能,支持异步请求,连接池优化 官方文档:提供快速入门指南和高级功能(如拦截器、连接池)的详细说明,GitHub仓库包含丰富示例。 社区资源:中文教程丰富,GitHub高…...
c/c++中程序内存区域的划分
c/c程序内存分配的几个区域: 1.栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高但是分配的内存容量有…...
JMeter聚合报告中的任务数和并发数区别
JMeter聚合报告中的任务数和并发数有本质的区别。 任务数(样本数) 任务数或样本数是指在性能测试中发出的请求数量。例如,如果模拟20个用户,每个用户发送100次请求,那么总的任务数或样本数就是2000次请求 并发…...
70、微服务保姆教程(十三)Docker容器详细讲义
一、关于Docker 1.1为什么要用docker? 随着开发的项目越来越复杂,软件越来越多,服务器越来越多,我们在开发和部署的时候会遇到很多问题,比如: 1.不同的应用程序可能会有不同的应用环境,比如Java开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都…...
2025年5月-信息系统项目管理师高级-软考高项-成本计算题
成本计算题挣值分析、成本计算题如何学?1、PV,EV,AC需要理解,根据题目给出的一些个条件需要求得这些值;2、CV,SV,CPI,SPI公式必须记住,需要根据求得的值判断项目的进度和成本的执行情况&#x…...
【BotSharp详细介绍——一步步实现MCP+LLM的聊天问答实例】
BotSharp详细介绍——一步步实现MCPLLM的聊天问答实例 一、MCP原理介绍二、创建BotSharp的项目,实现LLM推理机器人1、新建一个 解决方案,结构如下:2、先看下 MyWeatherPlugin3、创建MyWeatherMcpAPI 三、创建 MCP Server1、添加引用2、添加工…...
[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化
文章目录 [Linux性能优化] 线程卡顿优化。一、问题定位:CPU 资源分析二、线程卡顿现场复现线程优化前图片线程优化后图片 [Linux性能优化] 线程卡顿优化。 一、问题定位:CPU 资源分析 线程卡顿通常与 CPU 资源竞争、线程调度异常相关,第一步…...
鸿蒙OSUniApp 开发的文件上传与下载功能#三方框架 #Uniapp
使用 UniApp 开发的文件上传与下载功能 前言 在移动应用开发中,文件上传与下载是非常常见且重要的功能需求。无论是上传用户头像、提交表单附件,还是下载资源文件、缓存图片,这些需求几乎存在于每一个成熟的应用中。UniApp 作为一个跨平台开…...
【MySQL】基础知识
MySQL(一)基础知识 MySQL 一、结构 1.客户端 2.服务器 分布式系统 二、存储 1.空间 1.1内存 1.1.1速度 1.1.2稳定性 1.1.3大小 1.1.4使用 1.2硬盘 1.2.1速度 1.2.2稳定性 1.2.3大小 1.2.4【Java学习】反射-CSDN博客 2.体系 表-数据库-服务器 3.特点 3.1…...
产品销量数据爬虫通用模板
最近遇到各行各业的需要爬取销售数据,每次写一个教程相对麻烦,所以思前考后我还是觉得写一个通用模板更适合。所以模板需要足够的灵活性,让用户能够自定义选择器。比如,产品标题、价格、销量的CSS选择器可能因网站而异,…...
一文讲透 Vue3 + Three.js 材质属性之皮革篇【扫盲篇】
文章目录 前言一、Three.js材质系统基础1.1 为什么选择PBR材质?1.2 关键参数解析 二、不同类型皮革的材质配置2.1 牛皮材质实现2.2 羊皮材质实现2.3 仿皮材质实现 三、高级贴图技术3.1 贴图制作流程3.2 组合贴图实战 四、性能优化策略4.1 贴图压缩技术4.2 材质共享4…...
mysql读写分离
一、读写分离原理 客户端连接代理层,代理层(中间件)来实现读操作给从服务器,写操作给主服务器。 二、示例 mycat实现读写分离 读写分离在主从复制的基础上 1客户机1代理1主2从1、网络主 192.168.10.101从1 192.168.10.102从2 …...
Java集合框架
集合 概念:对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置:java.util.* Collection体…...
salesforce如何导出所有字段
在 Salesforce 中,导出所有字段信息(包括字段名、API 名、字段类型、是否可报表、是否可搜索等)通常不是一个“一键完成”的操作,但可以通过几种方法实现。以下是常用的几种方法: ✅ 方法一:使用 Salesforc…...
一招解决Tailwindcss4.x与其他库样式冲突问题
当项目中引入tailwindcss,并与其他UI库混用时,可能会出现样式冲突问题,因为tailwindcss重置了一些基础样式,例如:引入tailwindcss后,原生button按钮没有了默认的样式。 在老版本中解决这个问题,…...
[Harmony]封装一个可视化的数据持久化工具
1.添加权限 在module.json5文件中添加权限 // 声明应用需要请求的权限列表 "requestPermissions": [{"name": "ohos.permission.DISTRIBUTED_DATASYNC", // 权限名称:分布式数据同步权限"reason": "$string:distrib…...
关于AI人工智能的知识图谱简介
人工智能是计算机科学的一个重要领域,旨在理解和构建智能行为。人工智能可以被划分为多个子领域或分支,包括机器学习、深度学习、自然语言处理(Natural Language Processing,NLP)、计算机视觉(Computer Vis…...
uniapp,小程序中实现文本“展开/收起“功能的最佳实践
文章目录 示例需求分析实现思路代码实现1. HTML结构2. 数据管理3. 展开/收起逻辑4. CSS样式 优化技巧1. 性能优化2. 防止事件冒泡3. 列表更新处理 实际效果总结 在移动端应用开发中,文本内容的"展开/收起"功能是提升用户体验的常见设计。当列表项中包含大…...
RabbitMQ 消息模式实战:从简单队列到复杂路由(一)
RabbitMQ 初相识 在当今分布式系统大行其道的技术领域中,消息队列作为实现系统间异步通信、解耦以及流量削峰的关键组件,发挥着不可或缺的作用。而 RabbitMQ,无疑是消息队列领域中一颗耀眼的明星。自 2007 年诞生以来,RabbitMQ 凭…...
阿里云ECS部署Dify
一:在ECS上面安装Docker 关防火墙 sudo systemctl stop firewalld 检查防火墙状态 systemctl status firewalld sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置阿里镜像源,安装并启动docker [base] nameCentOS-$releas…...
Missashe考研日记—Day37-Day43
Missashe考研日记—Day37-Day43 写在面前 本系列博客用于记录博主一周的学习进度,具体知识总结在目前已有的笔记中: 1.高数强化学习笔记2.计网复习笔记 本周五到周日有其他安排,所以今天就把这一周的先更新了。 专业课408 这周学了计网的…...
DB-GPT扩展自定义app配置说明
简介 文章主要介绍了如何扩展一个自定义app插件,这里先看下生成效果,生成的内容其实还是有问题的,后续博主会调整提示词看看能不能优化生成效果 修改代码 代码详情 # chat_di是从chat_normal复制过来的,这里只改了提示词 from d…...