- 博客(187)
- 收藏
- 关注
原创 【AI系统】昇思MindSpore并行
本文将会介绍昇思MindSpore的并行训练技术,以及如何通过张量重排布和自动微分简化并行策略搜索,实现高效大模型训练。
2024-12-09 22:16:40
720
原创 【AI系统】混合并行
混合并行(HybridParallel)是一种用于分布式计算的高级策略,它结合了数据并行和模型并行的优势,以更高效地利用计算资源,解决深度学习中的大模型训练问题。混合并行不仅能提高计算效率,还能在有限的硬件资源下处理更大的模型和数据集。在深度学习中,数据并行和模型并行各自有其适用的场景和局限性。数据并行适用于训练样本较多而模型较小的情况,通过将数据集分割成多个子集并在不同的设备上同时训练来提高训练速度。
2024-12-09 22:14:04
1519
原创 【AI系统】流水并行
在大模型的训练中,单个设备往往无法满足计算和存储需求,因此需要借助分布式训练技术。其中,模型并行(Model Parallelism, MP)是一种重要的方法。模型并行的基本思想是将模型的计算任务拆分到不同的设备上执行,以提高训练效率和处理更大规模的模型。模型并行主要分为朴素的模型并行、张量并行和流水线并行。下面将详细介绍模型并行中的流水并行。
2024-12-09 22:12:16
1190
原创 【AI系统】张量并行
在大模型的训练中,单个设备往往无法满足计算和存储需求,因此需要借助分布式训练技术。其中,模型并行(Model Parallelism, MP)是一种重要的方法。模型并行的基本思想是将模型的计算任务拆分到不同的设备上执行,以提高训练效率和处理更大规模的模型。下面将重点介绍模型并行中的张量并行。
2024-12-09 22:05:52
1001
原创 【AI系统】完全分片数据并行 FSDP
上一篇文章内容介绍了通用的数据并行和分布式数据并行,主要是对神经网络模型的输入数据 mini-batch 进行分布式处理。并且讨论了同步数据并行和异步数据并行的差异点,深入到 PyTorch AI 框架的弹性数据并行是如何实现与处理的。在本节内容中,将会重点关注 AI 框架中如何实现针对权重数据、优化器数据和梯度数据进行分布式并行,并在 PyTorch 框架的具体实现方案。
2024-12-09 22:03:29
977
原创 【AI系统】数据并行
是一种广泛应用于分布式 AI 系统中的技术,旨在通过将数据集划分为多个子集并在不同计算节点上并行处理这些子集,以提高计算效率和速度。在大规模机器学习和深度学习训练过程中,数据并行可以显著加快模型训练速度,减少训练时间,提升模型性能。大部分的数据并行模型中,每个计算节点都会接收到完整的模型副本,但处理不同的数据子集。通过这种方法,计算任务可以被分摊到多个节点上,从而显著提高处理速度和效率。数据并行的实现方式多种多样,按照同步方式进行分类,包括和。
2024-12-09 21:55:04
978
原创 【AI系统】并行训练基本介绍
本文将围绕在 PyTorch2.0 中提供的多种分布式训练方式展开,包括并行训练,如:数据并行(Data Parallelism, DP)、模型并行(Model Parallelism, MP)、混合并行(Hybrid Parallel),可扩展的分布式训练组件,如:设备网格(Device Mesh)、RPC 分布式训练以及自定义扩展等。基于 RPC 的分布式训练(RPC)支持无法适应数据并行训练的通用训练结构,例如分布式流水线并行、参数服务器范式以及 DDP 与其他训练范式的组合。
2024-12-09 21:51:45
295
原创 【AI系统】计算图挑战与未来
目前主流的 AI 框架都选择使用来抽象神经网络计算表达,通过通用的数据结构(张量)来理解、表达和执行神经网络模型,通过可以把 AI 系统化的问题形象地表示出来。
2024-12-09 21:50:32
1075
原创 【AI系统】动态图与静态图转换
从 TensorFlow、PyTorch,到 PaddlePaddle、MindSpore、MegEngine,主流的 AI 框架动静态图转换,经历了动静分离、动静结合到动静统一的发展过程。兼顾动态图易用性和静态图执行性能高效两方面优势,均具备动态图转静态图的功能,支持使用动态图编写代码,框架自动转换为静态图网络结构执行计算。短短七八年时间,动静态图互相转换的技术在 AI 系统领域发展迅速,大大提升了 AI 算法/模型的开发效率,提高了 AI 产品应用的便利性,实现了计算效率和灵活性的平衡。
2024-12-09 21:48:20
888
原创 【AI系统】计算图的控制流实现
计算图在数学上作为一个有向无环图(DAG,Directed Acyclic Graph),能够把神经网络模型的概念抽象出来作为同一描述,不过在计算机的编程中,会遇到很多 if、else、while、for 等控制流语句,有向无环图改如何表示控制流变成了计算图中一个很重要的问题。好处在于,引入控制流之后,开发者可以向计算图中引入分支选择以及循环控制逻辑,进而构造出更加复杂的神经网络模型结构。
2024-12-09 21:45:11
1077
原创 【AI系统】计算图的调度与执行
AI 框架中对张量计算的种类有很多,比如加法、乘法、矩阵相乘、矩阵转置等,这些计算被称为算子(Operator),它们是 AI 框架的核心组件。为了更加方便的描述计算图中的算子,现在来对算子狭义的算子(Kernel):对张量 Tensor 执行的基本操作集合,包括四则运算,数学函数,甚至是对张量元数据的修改,如维度压缩(Squeeze),维度修改(reshape)等。广义的算子(Function):AI 框架中对算子模块的具体实现,涉及到调度模块,Kernel 模块,求导模块以及代码自动生成模块。
2024-12-09 21:41:46
585
原创 【AI系统】计算图与自动微分
自动求导应用链式法则求某节点对其他节点的雅可比矩阵,它从结果节点开始,沿着计算路径向前追溯,逐节点计算雅可比。将神经网络和损失函数连接成一个计算图,则它的输入、输出和参数都是节点,可利用自动求导求损失值对网络参数的雅可比,从而得到梯度。在前面的内容我们深入地探讨过自动微分的原理,可是 AI 框架中神经网络模型怎么跟自动产生连接关系呢?自动微分跟反向传播是什么关系呢?在实际 AI 框架的实现中,自动微分的实现方式有什么变化吗?
2024-12-09 21:36:13
923
原创 【AI系统】计算图原理
我们会经常遇到有些 AI 框架把统一的图描述称为数据流图,有些称为计算图,这里可以统称为计算图。下面简单介绍为什么可以都统称为计算图的原因。数据流图(Data Flow Diagram,DFD):从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。在 AI 框架中数据流图表示对数据进行处理的单元,接收一定的数据输入,然后对其进行处理,再进行系统输出。
2024-12-08 22:47:46
935
原创 【AI系统】计算图基本介绍
如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。复杂的模型结构需要 AI 框架能够对模型算子的执行依赖关系、梯度计算以及训练参数进行快速高效的分析,便于优化模型结构、制定调度执行策略以及实现自动化梯度计算,从而提高 AI 框架训练的效率。有了对计算图的基本了解之后,就开始深入地了解计算图,跟自动微分之间的关系。
2024-12-08 22:44:29
609
原创 【AI系统】自动微分的挑战&未来
在前面的文章里面,分别介绍了什么是自动微分、如何实现自动微分,以及更加深入的自动微分的基本数学原理,并贯以具体的代码实现例子来说明业界主流的 AI 框架在自动微分实现方法,希望让你更加好地掌握自动微分端到端能力。虽然计算机实现自动微分已经发展了几十年,不过在自动微分的演进过程和未来发展,仍然遇到诸多挑战,这里主要总结两点:1)易用性;2)高效性能。针对这两点的改进,也是自动微分技术未来演进可以重点优化和改进的方向。
2024-12-08 22:43:16
976
原创 【AI系统】动手实现 PyTorch 微分
这里记录一下使用操作符重载(OO)编程方式的自动微分,其中数学实现模式则是使用反向模式(Reverse Mode),综合起来就叫做反向 OO 实现 AD 啦。
2024-12-08 22:38:56
819
原创 【AI系统】动手实现自动微分
在这章内容,会介绍是怎么实现自动微分的,因为代码量非常小,也许你也可以写一个玩玩。前面的文章当中,已经把自动微分的原理深入浅出的讲了一下,也引用了非常多的论文。有兴趣的可以顺着综述 A survey 这篇深扒一下。
2024-12-08 22:35:58
694
原创 【AI系统】微分实现方式
在上一篇文章了解到了正反向模式只是自动微分的原理模式,在实际代码实现的过程,正方向模式只是提供一个原理性的指导,在真正编码过程会有很多细节需要打开,例如如何解析表达式,如何记录反向求导表达式的操作等等。这一节中,希望通过介绍目前比较热门的方法给大家普及一下自动微分的具体实现。
2024-12-08 22:33:55
1083
原创 【AI系统】微分计算模式
上一篇文章简单了解计算机中常用几种微分方式。本节将深入介绍 AI 框架离不开的核心功能:自动微分。而自动微分则是分为前向微分和后向微分两种实现模式,不同的实现模式有不同的机制和计算逻辑,而无论哪种模式都离不开雅克比矩阵,所以我们也会深入了解一下雅克比矩阵的原理。
2024-12-08 22:30:53
641
原创 【AI系统】什么是微分
自动微分(Automatic Differentiation,AD)是一种对计算机程序进行高效准确求导的技术,一直被广泛应用于计算流体力学、大气科学、工业设计仿真优化等领域。近年来,机器学习技术的兴起也驱动着对自动微分技术的研究进入一个新的阶段。随着自动微分和其他微分技术研究的深入,其与编程语言、计算框架、编译器等领域的联系愈发紧密,从而衍生扩展出更通用的可微编程概念。也是作为 AI 框架核心的功能,被广泛地应用。本文将从常见的微分方法开始介绍,然后深入自动微分基本概念。
2024-12-08 22:19:37
1227
原创 【AI系统】自动微分引言
可以想象一下,假设在实现一个神经网络模型的时候,一般开发者只会使用 Pytorch 的 API 实现一个正向的网络表达式,可是网络模型的反向怎么表示呢?在接下来的内容,主要是了解计算机实现微分的基本概念,其实微分的实现方式分为很多种,有数字微分,符号微分,自动微分。微分可以近似地描述当函数自变量的取值作足够小的改变时,函数的值是怎样改变的。实际上除了正向的表示是用户手工的地去构建,反向的表示、自动微分的实现、正反向的链接关系都是由 AI 框架,里面的自动微分功能去实现的。的变化量都是极小的。
2024-12-08 22:18:02
937
原创 【AI系统】昇思 MindSpore 关键特性
昇思MindSpore是面向“端-边-云”全场景设计的AI框架,旨在弥合AI算法研究与生产部署之间的鸿沟。在算法研究阶段,为开发者提供动静统一的编程体验以提升算法的开发效率;生产阶段,自动并行可以极大加快分布式训练的开发和调试效率,同时充分挖掘异构硬件的算力;在部署阶段,基于“端-边-云”统一架构,应对企业级部署和安全可信方面的挑战。开源以来,秉持全场景协同、全流程极简、全架构统一三大价值主张,致力于增强开发易用性、提升原生支持大模型和AI+科学计算的体验。
2024-12-08 22:16:54
1160
原创 【AI系统】框架编程范式
编程范式、编程范型、或程式設計法(Programming paradigm),是指软件工程中的一类典型的编程风格。常见的编程范型有:函数式编程、命令式编程、声明式编程、面向对象编程等等,编程范式提供并决定了开发者对程序执行的看法。在开发者使用 AI 框架进行编程的过程中,主要使用到的编程范式主要有 2 种:1)声明式编程与 2)命令式编程。本文将会深入展开和介绍两种不同的编程范式对 AI 框架整体架构设计的影响,以及目前主流的 AI 框架在编程范式之间的差异。
2024-12-08 22:13:33
974
原创 【AI系统】AI 框架之争
在前面的内容主要是讲述了 AI 框架在数学上对自动微分进行表达和处理,最后表示称为开发者和应用程序都能很好地去编写深度学习中神经网络的工具和库,整体流程如下所示:除了要回答最核心的数学表示原理以外,实际上 AI 框架还要思考和解决许多问题,如 AI 框架如何对实际的神经网络实现多线程算子加速?如何让程序执行在 GPU/NPU 上?如何编译和优化开发者编写的代码?
2024-12-08 22:11:49
1423
原创 【AI系统】AI 框架作用
深度学习范式主要是通过发现经验数据中,错综复杂的结构进行学习。通过构建包含多个处理层的计算模型(网络模型),深度学习可以创建多个级别的抽象层来表示数据。例如,卷积神经网络 CNN 可以使用大量图像进行训练,例如对猫狗分类去学习猫和狗图片的特征。这种类型的神经网络通常从所采集图像中,包含的像素进行学习。本文将从深度学习的原理开始,进而深入地讨论在实现深度学习的计算过程中使用到的 AI 框架,看看 AI 框架具体的作用和目的。
2024-12-08 22:08:04
689
原创 【AI系统】AI 框架基础介绍
在 AI 框架基础系列里面,将会先介绍神经网络和深度学习的基本概念,了解深度学习、神经网络、 AI 多个新名词和新概念之间的种种关联关系。简单而言,而深度学习是通过函数逼近来解析神经网络的数学原理,通过反向求导算法来求解神经网络中参数的偏导,从而迭代地求解神经网络中的最优值。不过上面的叙述还是有点难以理解复杂的数学原理,因此在 AI 框架作用中的深度学习基础,将会深入浅出地介绍介绍深度学习的基础。
2024-12-08 22:03:43
762
原创 【AI系统】推理内存布局
从前文的简单介绍中,我们提到了可以从内存布局上对推理引擎的 Kernel 进行优化,接下来,我们将先介绍 CPU 和 GPU 的基础内存知识,NCHWX 内存排布格式以及详细展开描述 MNN 这个针对移动应用量身定制的通用高效推理引擎中通过数据内存重新排布进行的内核优化。
2024-12-08 14:00:19
822
原创 【AI系统】QNNPack 算法
QNNPACK(Quantized Neural Networks PACKage 是 Marat Dukhan (Meta) 开发的专门用于量化神经网络计算的加速库,其卓越的性能表现一经开源就击败了几乎全部已公开的加速算法。到目前为止,QNNPACK 仍然是已公开的,用于移动端(手机)的,性能最优的量化神经网络加速库。本节将会深入介绍 QNNPACK 算法的实现过程。
2024-12-07 23:59:28
903
原创 【AI系统】Winograd 算法
在上一篇文章的介绍中,介绍了 Im2Col 技术,它通过将三维张量重新排列成矩阵形式,然后利用基于内存访问局部性的优化库如 GEMM(通用矩阵乘法库)加速计算。随后,还探讨了空间组合优化,这一种利用局部性原理来提升效率的技术。在本文将重点介绍 Winograd 优化算法,它是矩阵乘优化方法中 Coppersmith–Winograd 算法的一种应用,按照 Winograd 算法的原理将卷积的运算进行转换,从而减少卷积运算中乘法的计算总量。其主要是通过将卷积中的乘法使用加法来替换,并把一部分替换出来的加法放到
2024-12-07 23:58:17
881
原创 【AI系统】Im2Col 算法
Im2Col 计算卷积使用 GEMM 库的代价是额外的内存开销。使用 Im2Col 将三维张量展开成二维矩阵时,原本可以复用的数据平坦地分布到矩阵中,将输入数据复制了KH∗KW−1KH∗KW−1KH∗KW−1份。转化成矩阵后,可以在连续内存和缓存上操作,而且有很多库提供了高效的实现方法(BLAS、MKL),Numpy 内部基于 MKL 实现运算的加速。
2024-12-07 23:52:38
625
原创 【AI系统】卷积操作原理
卷积计算在直觉上不易理解,其可视化后如下图所示。图中红色滑块在移动过程中与蓝色方块的积绘制成的三角图案即为卷积结果在各点上的取值:更具体来说,解释卷积需要清楚“卷”和”积“两个步骤。“卷”的过程f∗gt≜∫Rnfτgt−τdτf∗gt≜∫Rnfτgt−τdτ令xτyt−τxτyt−τ则有xytx+y=txyt成立。换言之,在卷积的过程中,函数fxf(x)fx与gyg(y)gy中。
2024-12-07 23:45:15
891
原创 【AI系统】Kernel 层架构
在推理引擎架构中,Runtime 层和 Kernel 层是紧密相连的两个组件。Runtime 提供了一个执行环境,它管理整个推理过程,包括模型的加载、预处理、执行和后处理。它还负责资源管理,如内存分配和线程管理。其通常具有平台无关性,可以在不同的操作系统和硬件上运行,为上层应用提供 API 接口,使得用户能够轻松地集成和使用神经网络模型。Kernel 层包含了一系列的低级函数,它们直接在硬件上执行数学运算,如卷积、矩阵乘法和激活函数。其通常是硬件特定的,针对不同的 AI 加速芯片有不同的实现。
2024-12-07 23:39:22
641
原创 【AI系统】计算图的优化策略
除了前面提到的算子替换和算子前移等内容,本文内容将深入探讨计算图的优化策略,我们将细致分析图优化的其他重要内容,如改变数据节点的数据类型或存储格式来提升模型性能,以及优化数据的存储和访问方式以降低内存占用和数据访问时间。以上内容的理解和掌握,对于高效利用计算资源,提升算法性能具有至关重要的作用。
2024-12-07 23:36:57
826
原创 【AI系统】离线图优化技术
上一篇文章主要回顾了计算图优化的各个组成部分,包括基础优化、扩展优化以及布局和内存优化。这些优化方式在预优化阶段、优化阶段和后优化阶段都有所应用,以提高计算效率。同时,还介绍了 AI 框架和推理引擎在图优化方面的不同应用和侧重点。接下来,我们从计算图优化的各个组成部分开始逐步进行讲解。
2024-12-07 23:07:02
708
原创 【AI系统】计算图优化架构
本文将会介绍推理引擎转换中的图优化模块,该模块负责实现计算图中的各种优化操作,包括算子融合、布局转换、算子替换和内存优化等,以提高模型的推理效果。计算图是一种表示和执行数学运算的数据结构,在机器学习和深度学习中,模型的训练和推理过程通常会被表示成一个复杂的计算图,其中节点代表运算操作,边代表数据(通常是张量)在操作之间的流动。
2024-12-07 23:00:26
893
原创 【AI系统】模型转换流程
ONNX(Open Neural Network Exchange)是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的 AI 框架(如 Pytorch、MXNet)可以采用相同格式存储模型数据并交互。ONNX 的规范及代码主要由微软,亚马逊,Meta 和 IBM 等公司共同开发,以开放源代码的方式托管在 Github 上。
2024-12-07 22:57:11
1230
原创 【AI系统】自定义计算图 IR
转换模块架构分为转换模块和图优化,中间的 IR(Intermediate Representation)用来承载,把不同的 AI 框架对接到同一个 IR。有了 IR,我们就可以很方便地做各种图优化工作,图优化是对计算图进行优化,以提高模型的计算效率和性能。通过对计算图进行算子融合、算子替换等各种优化技术的应用,可以减少冗余计算、提高并行性、减少内存占用等,从而加速训练和推理过程。padX:int;padY:int;
2024-12-07 22:51:34
949
原创 【AI系统】推理文件格式
在训练好一个模型后,需要将其保存下来,以便在需要时重新加载并进行推理或进一步的训练。为了实现这一目标,需要一种有效的方式来将模型的参数、结构等保存起来。本文主要介绍在推理引擎中,针对神经网络模型的序列化与反序列化、不同的模型序列化方法,以及 Protobuf 和 FlatBuffers 两种在端侧常用的模型文件格式。
2024-12-07 22:45:44
906
原创 【AI系统】模型转换基本介绍
模型转换的主要任务是实现模型在不同框架之间的流转。随着深度学习技术的发展,训练框架和推理框架的功能逐渐分化。训练框架通常侧重于易用性和研究人员的算法设计,提供了分布式训练、自动求导、混合精度等功能,旨在让研究人员能够更快地生成高性能模型。而推理框架则更专注于针对特定硬件平台的极致优化和加速,以实现模型在生产环境中的快速执行。由于训练框架和推理框架的职能和侧重点不同,且各个框架内部的模型表示方式各异,因此没有一个框架能够完全涵盖所有方面。
2024-12-07 22:43:25
1270
NVIDIA十代GPU架构回顾(从Fermi费米到Volta伏特)
2023-04-30
【AI框架基础】系列第四篇!最后一篇啦,函数式编程和声明式编程有什么区别?AI到底应该用什么编程范式?
2022-10-09
【AI框架基础】系列第三篇!AI框架之争!都2022年,还在为用什么AI框架发愁?
2022-10-09
【AI框架基础】系列第二篇!AI框架有什么用?没有AI框架开发算法会遇到什么难题?
2022-10-09
【自动微分】系列第七篇!自动微分挑战和未来!自动微分易用性和性能应该如何兼容?可微编程是否未来?
2022-10-09
【自动微分】系列第六篇!手把手实现一个PyTorch!实现PyTorch核心自动微分!
2022-10-09
【自动微分】系列第四篇!自动微分的实现方式!基于库实现、基于操作符重载实现、基于源码转换实现!
2022-10-09
【自动微分】系列第三篇!微分的两种模式!前向微分和正向微分!对应反向传播!
2022-10-09
【自动微分】系列第二篇!符号微分/数值微分/自动微分的区别是什么?
2022-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人