DeepSeek开源周 Day02:从DeepEP开源趋势重新审视大模型Infra

DeepEP

今天DeepSeek开源周第二天,开放了DeepEP仓库,属实看了下源码,和昨天FlashMLA一样,C++权重(包括CUDA)还是占据了绝对部分,作为调包侠的我,看到之后望而却步,想看原理或者实现也是完全看不懂了!

在这里插入图片描述

DeepEP 是一个为混合专家 (MoE) 和专家并行 (EP) 量身定制的通信库。它提供高吞吐量和低延迟的全到全 GPU 内核,也称为 MoE 调度和组合。该库还支持低精度操作,包括 FP8。

Github地址:https://github.com/deepseek-ai/DeepEP

为了与DeepSeek-V3论文中提出的组限制门控算法保持一致,DeepEP 提供了一组针对非对称域带宽转发(例如将数据从 NVLink 域转发到 RDMA 域)进行优化的内核。这些内核提供高吞吐量,使其适合训练和推理预填充任务。此外,它们还支持 SM(流式多处理器)数量控制。

对于延迟敏感的推理解码,DeepEP 包含一组具有纯 RDMA 的低延迟内核,以最大限度地减少延迟。该库还引入了一种基于钩子的通信计算重叠方法,该方法不占用任何 SM 资源。

陌生词汇很多,感觉很陌生,下面咱们借英伟达博客稍微复习下FP8吧!

FP8介绍

浮点数值表示

如下图为 NVIDIA GPU 常见的浮点数表示方式,其中 sign 表示符号位,exponent 表示指数位(决定了动态范围),mantissa 表示尾数位(决定了表示精度)。

相比 FP32:

  • FP16的指数位和尾数位都更小。因此,通常 FP32 转 BF16 时会带来较大的精度损失。

  • BF16的指数位和 FP32 相同,尾数位更少。因此,通常 FP32 转 BF16 只需要做尾数位的截断,损失相对较小。现在的 LLM 预训练中通常都会使用 BF16。

相比 FP16:

  • FP8 E4M3 的指数位和尾数位都更小。因此,通常 FP16 转 FP8 E4M3 时会带来较大的精度损失。
  • FP8 E5M2 的指数位和 FP16 相同,尾数位更少。因此,通常 FP16 转 FP8 E5M2 只需要做尾数位的截断,损失相对较小。 ​

需要说明的是,虽然都是 E5M2 或者 E4M3,不同公司的硬件可能采用不同的格式。比如 NVIDIA GPU 上的 E5M2 符合 IEEE 754 Style,而 E4M3 却不符合 IEEE 754 Style,本文中没有特殊说明都以 ARM-Intel-Nvidia Style 为例。如下图所示,IEEE 754 Style 的 E4M3 的范围为 [-240, 240],而 ARM-Intel-Nvidia Style 的 E4M3 的范围是 [-448, 448]:

什么是FP8

来源:https://developer.nvidia.com/zh-cn/blog/fp8-challenges-best-practices/

在介绍 FP8 格式之前,我们需要回答一个问题:**为什么需要讨论 FP8?**从图中可以看出,近年来大模型所需的算力急剧增长,从 GPT-1 到 GPT-3,再到类似 GPT-4 的 GPT MOE 1.8T,算力需求增长了数万倍。这种增长速度的背后是硬件算力的提升。训练过程中的一个重要指标是训练时间。如果训练一个模型需要半年甚至一年,这在实际操作中是不可行的,因为实际训练时间可能是理论值的两到三倍。因此,算力基础设施的提升是大模型迅速发展的基础。

从算力角度来看,近年来 GPU 的单卡算力提升了大约一千倍,这包括工艺制程的改进、硬件结构的优化以及更低的训练精度。随着 FP8 的引入,其 Tensor Core 算力是 FP16 的两倍,为探索更大规模的模型提供了算力支持。

具体来说,FP8 的优势包括:

  • 对于计算密集型算子,FP8 的 Tensor Core 相对于 BF16/FP16 能提供两倍的算力,从而大大缩短计算时间;
  • 对于 Memory Bound 的算子,FP8 格式所需的数据量更少,可以节省缓存量,加快计算;
  • 如果将通信算子中的数据类型也替换成 FP8,也可以获得一定的加速。
  • 最后,FP8 训练的模型可以更好地与推理相结合,因为如果模型在训练时的精度是 FP8,那么可以更快地部署到推理侧,而不需要额外的 PTQ 量化过程。


FP8 数据格式包含两种:E5M2 和 E4M3。E 代表指数位,M 代表尾数位。E5M2 包含五个指数位和两个尾数位,而 E4M3 包含四个指数位和三个尾数位。E5M2 由于有更多的指数位,动态范围更大;E4M3 有更多的尾数位,数值精度更好。这两种数据格式在训练时都有各自的应用场景。

在大模型训练中使用FP8

FP8 带来了更快的训练速度,但也对训练精度提出了挑战。接下来将介绍在大模型训练中如何兼顾模型精度和训练速度。


在介绍 FP8 之前,我们先回顾一下 16 位精度训练中如何通过混合精度训练来维持精度。这里列出了四种混合精度训练的方法。

  • 第一种和最后一种严格来说不算混合精度,因为第一种是纯 FP32 训练,精度最好;
  • 最后一种是纯 16 位精度训练,速度最快。

为了兼顾速度和精度,我们列出了额外的两种模式:AMP-O1 和 AMP-O2。

  • AMP-O1 相对于 O0 的不同点在于它会维护一份白名单,白名单中的 OP 会以低精度进行计算,如矩阵乘法和卷积算法,其他算子仍用高精度计算和存储。
  • AMP-O2 方案与 AMP-O3 更接近,不同点在于它会保留一些 unsafe 的 OP,这些 OP 会以 FP32 精度进行存储和计算,如 LayerNorm 和 Softmax 等。

此外,还会保留一份 FP32 类型的 Master Weight,因为在模型训练后期,参数更新通常较慢,梯度值较小,容易出现大数加小数的问题,小数被吃掉,所以需要保留一份 FP32 的 Master Weight。目前 16 位精度训练基本上都是采用 AMP-O2 的混合精度方法来训练的。


FP8 训练可以认为是一种 O1+O2 的混合模式。上边这幅图包含了前向和反向计算过程中的一些算子。**红色连接线表示高精度数据,绿色连接线表示低精度数据。无论是前向还是反向,整体训练流程的精度仍然是 BF16 的,但会维护一份白名单,白名单中的 OP 以 FP8 精度计算,如 Linear Layer 中的矩阵乘法和 GELU。FP8 的 FMHA 目前在功能上是支持的,但在实际训练过程中通常还是用高精度的 FMHA,以保证更好的收敛性。**对于 FP8,我们看到它是以 O1 的模式嵌入 BF16 训练的,BF16 训练本身又是一个 O2 的混合精度方法,所以我们称它为一种 O1+O2 的混合精度模式。

在训练过程中,前向和反向采用了不同的数据精度。前向用 E4M3,因为前向时数值的动态范围变化不大,用 E4M3 提供更好的精度;反向的梯度需要更大的动态范围,所以反向用 E5M2 数据格式。这个流程图中,蓝色框表示从 BF16 到 FP8 的 Cast 过程。这个过程不像 FP32 到 BF16 那样简单直接。

要将 FP8 应用于 LLM 的训练和推理,其中的一个关键问题是如何克服表示范围和精度下降相关的挑战。其中的一个关键技术就是张量缩放(Tensor Scaling),如下图 Figure 9 所示(图片来自 [2310.18313] FP8-LM: Training FP8 Large Language Models),其核心是将不在 FP8 表示范围内的数据缩放到 FP8 的表示范围内。

早期在 V100 和 A100 GPU 上的 FP16 混合精度训练会广泛采用全局损失缩放技术(Global Loss Scaling),很适合一些中小模型的训练。然而,在处理一些超大模型或复杂任务时(例如 DALL-E 等模型),Global Loss Scaling 仍然会遇到严重的下溢问题(Underflow)。因此,越来越多采用 Block-wise 和 Layer-wise 的 Gradient 缩放。在 FP8 的 Per Tensor Scaling 技术中,有两种常见方案:Just-in-time Scaling 和 Delayed Scaling(NVIDIA 在 Transformer Engine 中也有实现 Using FP8 with Transformer Engine)。

  • Just-in-time Scaling(即时 Scaling):要做 Tensor 的 Scaling,首先需要计算 Tensor 绝对值的最大值(amax),然后得到 Scaling 值,再对 Tensor 进行 Scaling。中间的临时存储都是高精度的,可能要多次读写,计算和访存开销很大;此外,如果是分布式场景,比如梯度的 AllReduce,还要涉及分布式通信开销。整体来说,额外引入的开销会大幅降低 FP8 带来的收益。
  • Delayed Scaling(延迟 Scaling):其核心思路是使用额外的 Tensor 来存储之前的 amax 历史,然后根据历史最大值决定当前的最大值。

如下图为 NVIDIA Transformer Engine 中的 Delayed Scaling 实现方案,其 amax history 最多可以存储 1024 个 history。在进行当前 Tensor 的 Scaling 操作时,会使用当前 Tensor 之前的 amax history 来预测当前的 amax(比如之前 history 的最大值),然后进行 Scaling 操作;Scaling 操作的同时会计算当前的 amax,并更新 amax history(PS:不确定这里是分成了两个 Kernel 同时 Scaling 和计算 amax,还是融合为一个 Kernel)。

到这里已经看不懂了,更多想了解以及接触Infra的同学可以看看这篇文章:

FP8 训练的挑战及最佳实践,https://developer.nvidia.com/zh-cn/blog/fp8-challenges-best-practices/

关于大模型Infra思考

LLM Infra 简介

LLM Infra(大语言模型基础设施,LLM Infrastructure)是 LLM 实践和应用的底座。通过优化硬件、软件和网络架构,它能够提高大语言模型的训练和推理效率,推动自然语言处理技术的创新,并在搜索引擎、智能助手和自动化客户服务等领域广泛应用,为 AI 发展提供了强大的支持。


LLM AI Infra广义上包含了基础模型和基础软件栈两层,本篇报告核心关注其中和工作流相关的基础软件工具栈。工作流的视角下,LLM的开发应用主要涉及数据准备、模型训练、模型部署、产品整合四个主要环节,每个环节都有对应的点工具,亦有集大成的LLMOps平台型产品。

行业的 AI 工作流在传统 ML 模型阶段就已逐渐成型,这一领域由于整体的非标属性,很难出现统一的 MLOps 平台。而是主要分为从 0 到 1(离线数据准备+模型搭建)和从 1 到 100(模型上线和部署)两部分。随着 LLM 趋势的确定,从 1 到 100 的部分将成为之后重头的发展模块。LLMOps 的发展将为未来大模型的部署和推理提供重大的助推作用。

LLM Infra从业建议


在知乎看到一篇非常有意思的文章,分享给大家:

大模型Infra这些年,从黑铁时代到黄金时代再到白银时代

https://zhuanlan.zhihu.com/p/708594043

我们直接看建议,下面画了一些重点:


大家常说七年一个周期,2016年Alpha-Go用深度学习开启了一个周期,到2022年ChatGPT用大模型开启了一个新周期。

很多人现在抱着有超额回报期望来入行大模型Infra,在白银时代这个预期需要降低。能过踩中周期的注定是少数人,因为有分歧才有风险,有风险才有超额收益。 现在大模型的共识早就凝聚了,这个领域也注定会供需平衡,变成用市场规律说话。就好比你看买菜大妈就开始买某股票时候,这支股票已经挣不到钱了。

大模型注定会深刻改变我们的世界,但资源和信息向头部集中的趋势非常可怕。一方面,大模型核心技术被一小撮人掌握,比如OpenAI。另一方面,面对巨大信息差和算力差,普通人无法参与到大模型的开发体系中。就像萝卜快跑正在代替网约车司机,AI总有一天会也代替程序员。如何在生产力进步后的世界里找到自己的位置,不要沦为AGI世界的二等公民,是我们每个人焦虑的根源。

让社会不恐惧AI,让社会理性规划和AI融洽相处的未来,一方面要有对巨头有监管,另一方面,让更多人有平等了解大模型技术的机会。这个世界还是很有人在为后者努力,通过代码开源和公开论文,扩散大模型的技术。作为想入行的同学,可以借助开源力量,来让自己和也业界保持同步。这里也有大量还没有解决的技术挑战等待你来解决。另外,像Agent等,多模态,具身智能等技术方向方兴未艾,也可以提前布局下一个时代潮流。

作为大模型Infra从业者,白银时代需要的是苦练基本功。 在2023年,有很多人是在用信息差体现自己价值,某件事我知你不知,你试还得花时间,很多人在极度激烈竞争中也原意为信息差知识付费。今年这种机会会大幅减少,大家比拼的就是真本领了,是否能快速follow新技术,是否能独立搞定一个复杂大系统,是否有更大的技术视野和其他合作方对话的能力,这要求不仅了解Infra还解一些算法、云计算的知识,总体来说传统工程师素养变得尤为重要。

LLM Infra技术栈

从业相关人员来回答感觉这些领域还是比较有机会的,比如下面的技术栈:

  • 使用 smaller LLM 进行应用构建

    • 面向垂类领域或者特定 task 的 SFT + RLHF
    • 使用 smaller LLM 进行 plugin 和 function call 的功能构建
    • 洗数据
    • 搜索增强
  • inference

    • 通用模型
      • 硬件 op 适配
      • op 融合加速
      • 量化
      • 蒸馏(非策略蒸馏)
      • 其他加速方法
    • 向量数据库
  • train

    • 做分布式训练框架的
    • 云计算服务的
    • op 运维
  • hardware

    • 销售、采购、囤积显卡(别把眼光只局限在技术)
    • hardware design?这部分不太了解
  • backend

    • MLOps
    • pipeline
    • codeless 平台建设
    • QA 等

  1. 应用层面
    在各个场景 LLM+ 落地的工程化开发,包括:构建/管理知识库、tools 接入集成到被 LLM Agent 识别、串场景化流程、形成场景化自定义能力集市等等。而这里各个实现场景的厮杀下来的赛道王者会提供持续的岗位需求。

  2. infra 层面
    (类似 Spring 的快速开发体系) 形成自然语言编程体系以及 IDE 能力,实现底层的 prompt 框架/lib (以及 mutic-agent、RAG、React 的框架),配套的 DevOps 体系,模型本身的推理/训练加速。这里为大公司的基础模型提供上层的快速接入开发包及基础设施保障,应该一直会有岗位需求,就像现在的云计算的上层配套能力一样。

  3. 数据工程层面
    模型的数据准备、自动化标注、提炼训练测试验证集、做 ETL 流程,以及配套工具/模型的开发等。大数据平台及数据开发人员可以往这里靠。

以上是工程化的能切入的点。其实本身如果在做算法,也有门槛低一点的切入点:

  • 过拟合形成的领域模型/小模型
  • 开源模型部署和魔改,在一定期间内肯定会持续有需求(由于大家长期彼此不互信,一模统一不太可能)
  • 向量化的算法也有点小空间,直到形成标准化解决方案

下面是LLMs推理技术栈

图片来自:https://zhuanlan.zhihu.com/p/14062776627

影响LLM推理性能的因素有很多,包括但是不限于:模型配置、硬件类型、数据分布、优化算法、推理策略等。

算法

  • LLM
  • 参数建模
  • 大模型计算建模

LLMs 位置编码

Transformer

  • FlashAttention 系列优化

MoEs 算法 & 部署概述

量化

  • LLMs 量化算法概述

框架
开源的 LLM 推理框架有 TensorRT-LLM、FasterTransformer、TGI、vLLM、NanoFlow、SGLANG 等,以 vLLM 为例简单介绍下推理框架:

vLLM 框架

  • Serving 策略
  • Orca-Continuous Batching 策略
  • SGLang-Prefix Prompt Cache 设计
  • LoRA & Multi-LoRA
  • Prefill Decode 分离部署

RLHF 算法以及部署概述

Engine 部署

  • PP & TP LLMs 部署
  • CPP (TODO)
  • LLMs 图编译概述

高性能算子

  • 软件栈
    • 算子编程模型
  • 算子优化
    • GEMM 算子优化
    • FlashAttention 系列优化

中间件 (TODO)

硬件系统

  • 计算
    • AI 模型部署硬件综述
  • LLMs 存储
  • 集群通信

场景优化

  • LLM 长文本优化策略

LLM Infra学习资料

  • [1] Attention is All you Need: https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html
  • [2] ELMo: https://arxiv.org/abs/1802.05365
  • [3] MoE: https://arxiv.org/abs/1701.06538
  • [4] GShard: https://arxiv.org/abs/2006.16668
  • [5] MeshTensor: https://proceedings.neurips.cc/paper/2018/hash/3a37abdeefe1dab1b30f7c5c7e581b93-Abstract.html
  • [6] Gopher: https://arxiv.org/abs/2112.11446
  • [7] Chinchilla: https://arxiv.org/abs/2203.15556
  • [8] FlexFlow: https://proceedings.mlsys.org/paper_files/paper/2019/hash/b422680f3db0986ddd7f8f126baaf0fa-Abstract.htm
  • [9] GPipe: https://proceedings.neurips.cc/paper_files/paper/2019/hash/093f65e080a295f8076b1c5722a46aa2-Abstract.htm
  • [10] Parameter Server: https://proceedings.neurips.cc/paper/2014/hash/1ff1de774005f8da13f42943881c655f-Abstract.html
  • [11] Oneflow: https://arxiv.org/abs/2110.15032
  • [12] M6: https://arxiv.org/abs/2103.00823
  • [13] GLM: https://arxiv.org/abs/2210.02414
  • [14] Pangu-alpha: https://arxiv.org/abs/2104.12369
  • [15] PatrickStar: https://arxiv.org/abs/2108.05818
  • [16] FasterTransformers(FT): https://github.com/NVIDIA/FasterTransformer
  • [17] TurboTransformers: https://github.com/Tencent/TurboTransformers
  • [18] ORCA: https://www.usenix.org/conference/osdi22/presentation/yu
  • [19] Paged Attention: https://dl.acm.org/doi/abs/10.1145/3600006.3613165
  • [20] text-generation-inference: https://github.com/huggingface/text-generation-inference
  • [21] LMDelopyer: https://github.com/InternLM/lmdeploy
  • [22] vLLM: https://github.com/vllm-project/vllm

参考资料

  • 堆栈AI Infra——AI大模型时代的“卖铲人”
  • 万字综述:全面梳理 FP8 训练和推理技术
  • 大模型Infra这些年,从黑铁时代到黄金时代再到白银时代
  • AI投资图谱:展望Infra百亿美金公司机遇(多图)
  • LLMs推理技术栈

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

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

相关文章

【Ambari】Ranger KMS

目录 一、Ranger KMS介绍 二、KMS基于Ranger插件安装 一、Ranger KMS介绍 Ranger KMS是把数据存储入后台数据库中。通过Ranger Admin可以集中化管理KMS服务。 Ranger KMS有三个优点 l Key management Ranger admin 提供了创建,更新,删除密钥的Web UI…

055 SpringCache

文章目录 缓存一致性Spring Cachepom.xmlapplication.ymlCubemallProductApplication.javaSpringCache改造三级分类MyCacheConfig.java缓存一致性 缓存一致性 锁 设置过期时间 读写锁 设置过期时间 Spring Cache 1.读模式 缓存穿透:查询一个null数据,…

神卓 S500 组网设备连接交换机的详细步骤

神卓 S500 组网设备连接交换机的详细步骤 神卓 S500 组网设备以其高效、灵活的解决方案,在异地监控组网中发挥着重要作用。本文将详细介绍神卓 S500 组网设备连接交换机的步骤,帮助您轻松实现网络的互联互通。 一、前期准备 确认设备型号与规格&#x…

图像处理案例06 OCR应用

OCR应用 1 OCR读取账单1.1 背景及思路1.2 代码 1 OCR读取账单 1.1 背景及思路 思路 目标是读取图片中账单的信息。首先要截取图片上的账单,考虑到账单并非都是整齐摆放,为了保持算法的通用性,通过透视变换对扣取的账单摆正,然后调…

2024最新版鸿蒙纯血原生应用开发教程文档丨学习ArkTS语言-基本语法

ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践,以便高效地构建高性能移动应用…

【AIGC】使用Python实现科大讯飞语音服务ASR转录功能:完整指南

文章目录 讯飞ASR转写API完整指南1. 引言2. 讯飞ASR API介绍3. API参数说明3.1 认证参数3.2 上传参数3.3 查询结果参数3.4 orderResult 字段3.5 Lattice 字段3.6 json_1best 字段3.7 st 字段 4. Python代码实现4.1 生成签名4.2 上传音频文件4.3 获取转写结果4.4 解析转写结果 5…

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本:python 3.11.5,这里不再介绍,有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本:conda 23.7.4,这里也不再介绍,有需要的可以在网上找教程。 …

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows(工作流)与 Crews(协作组)一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库(crewai、litellm) 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…

Linux——高级IO

一、前言概念 IO拷贝等待 1. 同步(Synchronous) vs 异步(Asynchronous) 核心区别:关注的是消息通知的机制。 同步:调用方主动等待结果,需持续检查任务是否完成。 异步:调用方发起…

Linux:基础IO

文章目录 一、理解"文件"1、狭义上的理解2、广义上的理解3、文件操作的认知4、系统角度 二、C语言文件接口1、ls /proc/[进程id] -l 命令查看当前正在运⾏进程的信息2、stdin 和 stdout 和 stderr 三、系统文件 I/O1、标志位传递的一种方法2、系统调用 open 三、文件…

zabbix数据采集以及自定义监控

目录 1.数据采集 2.自定义监控 2.1客户端 2.2服务端 ​​​​​​​1.数据采集 点击最新数据页面如下图 往下滑查看具体数据 并点击查看图像就可以看到图像了 就可以看到如下图内容 2.自定义监控 我们通过zabbix客户端任何模板就可以监控我们想要的任何资源 如果…

02.25 继承和多态

编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 (可视化的方式,后续会写一些) 3. Display 功能(显示方面的设置) bars 柱状图方式显示 lines(不选不会出功能) line width 线条的粗细 staircase 会让折…

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 文件列表生成器 - 吾爱破解 - 52pojie.cn ,和我去年写的一个软件很像,当时我也是有需求,要把一个文件夹里及其子文件夹里所有的文件列出来,就临时弄了个小…

深度学习-6.用于计算机视觉的深度学习

Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…

【Linux】初始操作系统和进程(一)

目录 前言: 一、冯诺依曼体系结构: 二、操作系统: 1.操作系统是什么? 2.为什么要有操作系统? 3.操作系统是如何管理下层的? 4.操作系统是如何对上层提供服务的? 三、进程: …

【链 表】

【链表】 一级目录1. 基本概念2. 算法分析2.1 时间复杂度2.2 空间复杂度2.3 时空复杂度互换 线性表的概念线性表的举例顺序表的基本概念顺序表的基本操作1. 初始化2. 插入操作3. 删除操作4. 查找操作5. 遍历操作 顺序表的优缺点总结优点缺点 树形结构图形结构单链表基本概念链表…

python-leetcode-字符串解码

394. 字符串解码 - 力扣(LeetCode) class Solution:def decodeString(self, s: str) -> str:stack []num 0curr_str ""for char in s:if char.isdigit():num num * 10 int(char)elif char [:stack.append((curr_str, num))curr_str, …