MindSpore AI框架和MindOne套件简单介绍

一、MindSpore

MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标,其中易开发表现为API友好、调试难度低,高效执行包括计算效率、数据预处理效率和分布式训练效率,全场景则指框架同时支持云、边缘以及端侧场景。

1.MindSpore总体架构

  • ModelZoo(模型库):ModelZoo提供可用的深度学习算法网络。

  • MindSpore Extend(扩展库):昇思MindSpore的领域扩展库,支持拓展新领域场景,如GNN/深度概率编程/强化学习等,期待更多开发者来一起贡献和构建。

  • MindSpore Science(科学计算):MindScience是基于昇思MindSpore融合架构打造的科学计算行业套件,包含了业界领先的数据集、基础模型、预置高精度模型和前后处理工具,加速了科学行业应用开发。

  • MindExpression(全场景统一API:基于Python的前端表达与编程接口,支持两个融合(函数/OOP编程范式融合、AI+数值计算表达融合)以及两个统一(动静表达统一、单机分布式表达统一)。

  • 第三方前端:支持第三方多语言前端表达,未来计划陆续提供C/C++等第三方前端的对接工作,引入更多的第三方生态。

  • MindSpore Data(数据处理层):提供高效的数据处理、常用数据集加载等功能和编程接口,支持用户灵活地定义处理注册和pipeline并行优化。

  • MindCompiler(AI编译器):图层的核心编译器,主要基于端云统一的MindIR实现三大功能,包括硬件无关的优化(类型推导、自动微分、表达式化简等)、硬件相关优化(自动并行、内存优化、图算融合、流水线执行等)、部署推理相关的优化(量化、剪枝等)。

  • MindRT(全场景运行时):昇思MindSpore的运行时系统,包含云侧主机侧运行时系统、端侧以及更小IoT的轻量化运行时系统。

  • MindSpore Insight(可视化调试调优工具):昇思MindSpore的可视化调试调优工具,能够可视化地查看训练过程、优化模型性能、调试精度问题、解释推理结果。

  • MindSpore Armour(安全增强库):面向企业级运用时,安全与隐私保护相关增强功能,如对抗鲁棒性、模型安全测试、差分隐私训练、隐私泄露风险评估、数据漂移检测等技术。

2.PyNative

2.1 MindSpore的运行模式

MindSpore提供了动态图和静态图统一的编码方式,大大增加了静态图和动态图的可兼容性,用户无需开发多套代码,仅变更一行代码便可切换动态图/静态图模式,例如设置set_context(mode=PYNATIVE_MODE)切换成动态图模式,设置set_context(mode=GRAPH_MODE)即可切换成静态图模式,用户可拥有更轻松的开发调试及性能体验。

PyNative模式下使用的内存均从内存池申请,算子运行完成后,如果输出不被算子反向图使用,那就可以释放。也就是说,PyNative下内存全部是动态使用的。

2.2 PyNative内存优化手段

  • 优化block之间的碎片。如果block只有一个,是不是就没有block之间的碎片了?通过在context中添加mempool_block_size,可以使用block的大小,例如,Device设备给内存池使用为29GB,PyNative下通过设置context.set_context(mempool_block_size=“29GB”),那么内存池就只会有1个block了,也就不存在block之间的碎片了。如图(黄色块表示已经分配占用),内存池只有1个block:
  • 优化block内部碎片。将内存池划分为2类block。一类称为common block, 另一类称为persistent block。将图的输入,输出,Weigths Parameter和ValueNode这些生命周期较长的Tensor划分到这个persistent block。common block被其它类型的内存申请使用,主要是各个算子的输出。如此一来,common block将大幅提高buf之间的合并成功率,图执行完一个step后,common block将完全有可能合并为一整块内存。如图(黄色块表示已经分配占用),内存池区分为common block和persistent block:

  • 优化正向输出内存。通过添加对正向输出的内存的所属Tensor的引用计数,当引用计数为0时,直接释放该内存。反向图在执行过程中,先遍历整图获取每个正向输出Tensor的引用计数,当反向算子执行完成后,检查Tensor的引用计数是否为0,如果是,就直接释放该Tensor的内存,不需要等到整个反向图执行完成后再释放。释放的内存被内存回收,可能会与其它空闲buf合并成大块内存,方便后续算子使用,这样内存利用率就提高了。

3.自动微分(MindSpore与PyTorch)

当前主流深度学习框架中有两种自动微分技术:

  • 操作符重载法: 通过操作符重载对编程语言中的基本操作语义进行重定义,封装其微分规则。 在程序运行时记录算子过载正向执行时网络的运行轨迹,对动态生成的数据流图应用链式法则,实现自动微分。

  • 代码变换法: 该技术是从功能编程框架演进而来,以即时编译(Just-in-time Compilation,JIT)的形式对中间表达式(程序在编译过程中的表达式)进行自动差分转换,支持复杂的控制流场景、高阶函数和闭包。

PyTorch采用的是操作符重载法。相较于代码变换法,操作符重载法是在运行时生成微分计算图的, 无需考虑函数调用与控制流等情况, 开发更为简单。 但该方法不能在编译时刻做微分图的优化, 控制流也需要根据运行时的信息来展开, 很难实现性能的极限优化。

MindSpore则采用的是代码变换法。一方面,它支持自动控制流的自动微分,因此像PyTorch这样的模型构建非常方便。另一方面,MindSpore可以对神经网络进行静态编译优化,以获得更好的性能。

MindSpore自动微分的实现可以理解为程序本身的符号微分。MindSpore IR是一个函数中间表达式,它与基础代数中的复合函数具有直观的对应关系。复合函数的公式由任意可推导的基础函数组成。MindSpore IR中的每个原语操作都可以对应基础代数中的基本功能,从而可以建立更复杂的流控制。

4.自动并行

MindSpore自动并行的目的是构建数据并行、模型并行和混合并行相结合的训练方法。该方法能够自动选择开销最小的模型切分策略,实现自动分布并行训练。

目前MindSpore采用的是算子切分的细粒度并行策略,即图中的每个算子被切分为一个集群,完成并行操作。

5.PyTorch框架转变为MindSpore框架

将SVD3D中基于PyTorch框架实现自动混合精度(Automatic Mixed Precision,AMP)功能改为基于MindSpore框架实现

import torch

def autocast(f, enabled=True):
    def do_autocast(*args, **kwargs):
        with torch.cuda.amp.autocast(
            enabled=enabled,
            dtype=torch.get_autocast_gpu_dtype(),
            cache_enabled=torch.is_autocast_cache_enabled(),
        ):
            return f(*args, **kwargs)

    return do_autocast

import mindspore as ms
from mindspore.amp import auto_mixed_precision

def autocast(f, enabled=True):
    def do_autocast(*args, **kwargs):
        with auto_mixed_precision(ms.nn.Cell(), cast_op_level=ms.amp.Level.O2 if enabled else ms.amp.Level.O0):
            return f(*args, **kwargs)

    return do_autocast

二、MindOne

1. 简介

MindOne 是一个集成了前沿生成算法和模型的开源项目,旨在优化内容生成,适用于图像、视频、文本生成等多种领域。它的名称来源于“ONE for all”和“Optimal generators with No Exception”,代表了其广泛适用性和高效生成的特点。

2.主要功能

1.图像生成

  • Stable Diffusion:支持1.5和2.x版本,通过潜在扩散模型实现文本到图像生成。
  • Stable Diffusion XL:具备双文本嵌入和更大UNet的新一代模型,提升生成效果。
  • 图像增强和调优:包括ControlNet、T2I-Adapter、IP-Adapter等增强功能。

2.视频生成

  • VideoComposer:通过提示或参考视频生成可控视频扩散,支持训练和推理。
  • AnimateDiff:最先进的文本到视频生成模型,支持运动Lora微调。

3.文本生成

  • ChatGPT检测:识别输入文本是否由ChatGPT生成。

4.新模型支持

  • OpenSora:包括基于VAE+STDiT和基于CausalVAE3D+Latte_T2V的模型。
  • 扩散变压器模型:包括用于图像生成的DiT和用于视频生成的Latte。

3.项目特色

  • 开源与社区支持:MindOne是一个开源项目,拥有活跃的开发者社区,不断更新和改进。

  • 高性能生成:通过集成最新的生成技术,MindOne提供了高效的内容生成工具。

  • 多功能集成:无论是图像、视频还是文本生成,MindOne都能提供全面的支持。

4.应用场景

  • 数字内容创作:帮助设计师和创作者生成高质量的图像和视频。

  • 研究与开发:为学术研究和技术开发提供先进的生成工具和算法。

  • 自动化内容生成:在商业和媒体领域实现自动化的高效内容生产。

三、参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值