找回密码
 立即注册
搜索
查看: 61|回复: 0

华为全栈全场景 AI 计算框架 MindSpore 正式开源,大幅降低 AI 开发门槛

[复制链接]

9420

主题

0

回帖

2万

积分

管理员

积分
28470
发表于 2024-9-19 16:22:45 | 显示全部楼层 |阅读模式
机器心脏报告

同步编辑部

经过万众期待,3月28日,华为全栈全场景AI计算框架终于正式开源。

今年的华为开发者大会HDC 2020上,除了昇腾、鲲鹏等自研芯片硬件平台外,最令人期待的莫过于深度学习框架的开源。今天上午,华为首席科学家陈雷在活动上宣布这一产品正式开源,我们终于可以在开放平台上一睹它的真面目了。

作为“全场景AI框架”,它是华为人工智能解决方案的重要组成部分,对标Java、C#、等热门深度学习框架,旨在大幅降低AI应用开发门槛,让人工智能无处不在。

它是一个统一的训练和推理框架,支持自主/协作的端到端、边缘到云的训练。华为希望通过这个完整的软件栈实现一次性算子开发和一致的开发调试体验,从而帮助开发者实现一次开发,在所有设备上平滑迁移应用的能力。

原生支持AI芯片、全场景一致的开发体验——除了这些我们已经熟知的强大功能之外,华为今天还重点展示了三大创新能力:全新编程范式、执行模式、协作方式。

今天发布的第一个开源版本是0.1.0-alpha版本,主要包括自动微分、自动并行化、数据处理等功能。华为称其具有算法即代码开发、运行高效、部署灵活等特点。其核心分为三层,从下到上分别是后端运行时、计算图引擎、前端展现层。

开源社区:代码:

一般来说,构建神经网络都是围绕“单元”展开的,单元是张量和运算的集合,从输入张量开始,提供各种运算构建“单元”,最终模型封装这个单元,可用于训练和推理。

的整体架构,从后端硬件支持到前端API,涉及到各种优化和特性,比如不使用计算图的自动微分、自动并行化、计算过程的优化等。

其最大的特点是采用了业界最新的自动微分技术,可以利用编译器和编程语言的底层技术进一步优化,支持更好的微分表达。

自动微分:不仅仅是计算图

自动微分是深度学习框架的灵魂,有了它,我们在写模型的时候只需要关注前向传播,把复杂的求导、反向传播过程全部交给框架去做。通俗的讲,自动微分就是指一种自动求函数导数的方法,在机器学习中,这些导数可以更新权重,在更一般的自然科学中,这些导数还可以用于后续的各种计算。

人类擅长通过分析得出微分,而计算机擅长数值微分。

一般来说,自动微分需要建立计算图,用来追踪函数和变量的依赖关系,并根据链式法则进行梯度传递。然而,对于 ,它不依赖于计算图,而是使用一种称为“源代码转换”的自动微分方法,它支持 if 和 for 等复杂的控制流结构,以及灵活的函数式编程。

自动微分本质上是解析变量之间的依赖关系,并利用全微分法则和链式法则将梯度传递给不同的变量。

将代码解析为计算图。

目前主流的深度学习框架中自动微分技术主要有三种:

TF 早期采用的是静态计算图,现在采用的是动态计算图。静态图可以利用静态编译技术来优化网络性能,但是搭建网络或者调试都非常复杂。动态图使用起来非常方便,但是在性能上很难做到极致的优化。



它走的是另外一条路,即基于源代码转换的自动微分,还支持自动控制流的自动微分,所以搭建类似这样的模型非常方便,同时它还能做神经网络的静态编译优化,所以性能也非常不错。

基于源代码转换的方法是实现自动区分的另一种途径。

源转换的工作原理的简要概述。

假设我们用 C 写了一个函数,这个函数的源代码会根据自动微分工具自动转换成另一个源代码。这个新生成的源代码包含了计算梯度的语句,可以直接编译。这样的源代码到源代码的转换对编译器非常友好,而且编译器还可以在计算过程中进行优化。

自动微分的实现可以理解为程序本身的符号微分,因为IR是函数的中间表达,与基本代数中的复合函数有直观的对应关系,只要知道基本函数的导数公式,就可以推导出任意基本函数组成的复合函数的导数公式。IR中的每一个基本操作都可以对应到基本代数中的一个基本函数,这些基本函数可以构建更为复杂的过程控制。

自动并行训练:所有计算都交给它

当今的深度学习模型由于规模庞大,经常需要进行并行化处理,它能够将串行编写的代码自动并行化,自动实现分布式并行训练,并保持高性能。

一般来说,并行训练可以分为模型并行和数据并行。数据并行比较容易理解,每个样本可以独立完成前向传播,然后总结传播结果。而模型并行则比较复杂,需要我们用“并行思维”的逻辑,把需要并行化的部分全部手工写出来。

自动并行的目标是构建一种数据并行、模型并行、混合并行相结合的训练方法,会自动选择成本最低的模型分裂方式,实现自动化的分布式并行训练。

目前采用的是细粒度的算子并行拆分方法,即将图中的每个算子拆分成簇,完成并行计算。拆分方法可能非常复杂,但作为提倡它的开发者,不需要关心底层实现,只需要顶层 API 就能高效计算。

除了自动微分、自动并行之外,还有很多优秀的特性和组件,比如完整的数据预处理模块、高效的图计算引擎等,都值得去探索。比如在数据预处理模块,我们就需要考虑如何提升数据预处理能力,让它跟上昇腾芯片消费数据的速度。

当然,可视化工具、模型评估工具等常用模块也是一应俱全。除了计算图、标量曲线等常见的可视化,还能实现新颖的“模型可追溯性”,将学习率、损失值、模型大小等诸多超参数配置都集中到一起,方便开发者调整参数。

代码是什么样的?

编写模型时,编码风格非常有特色。如之前介绍的,主要概念是张量、运算符、单元和模型。它还提供了一种编程范式,因为它使用了-to-自动微分。常用的数据结构如元组和列表仍然可以使用,匿名函数也没有问题。

我们都知道张量,里面的算子可以是卷积,也可以是简单的加法,它们和张量一起组成了“单元”,是所有神经网络单元的基类,单元再被封装成模型,可以直接调用模型进行训练和推理,也可以使用更多底层的API来搭建复杂的模型。

如下图,我们可以发现两个亮点,第一个当然是计算图的调整,一行代码就能切换动态图和静态图,一般情况下都是用动态图,需要用静态图的时候,可以设置一个上下文管理器。

numpy 作为 np

。 作为

.nn 作为 nn



# 这

净额=净额()



x = (np..rand(1, 1, 4, 1024).(np.))

# 在模式中,通过

输出 = 净值(x)

# 进入图形模式

.(模式=.)

输出 = 净值(x)

对于自动并行这个功能,我们只需要在自己编写的串行代码中再增加一行,就能完成自动并行化,无需花费任何精力去理解背后复杂的并行逻辑。

如下图所示,只要将运行环境设置为图模式,并允许使用分布式接口HCCL(   ),我们编写的模型在初始化之后就能自动进行优化,以最佳的并行策略加速整个训练过程。

操作系统



来自 .init

如果 == “”:

.(模式=.,

="",

=正确,

=int(os.[""]))

初始化()

...

华为表示,其原生适配所有AI应用场景,在按需协作的基础上,将AI算法实现为代码,可大幅缩短模型开发时间。以典型案例为例,可减少20%的核心代码量,大幅降低开发门槛,整体效率提升50%以上。

随着框架的开源,相关文档和教程已在官网上线,欢迎开发者提供反馈。至于未来的发展方向,华为表示开源后大部分工作将交由社区独立完成:社区将按照社区章程运作,未来新版本计划将由各个特殊兴趣小组(Group,简称SIG)输出,并提交技术治理委员会(TSC)决策并向公众公布。

目前,技术治理委员会由14家不同机构的代表组成,包括易通科技、康尼克人工智能、哈尔滨工业大学、华为、中国工商银行、伦敦帝国理工学院、中国科学院计算技术研究所、北京大学、清华大学、中国科学技术大学、英国爱丁堡大学、法国巴黎大学、明斯特大学、西安电子科技大学等。

为了吸引开发者,华为还将推出一系列开发者体验活动。

随着深度学习框架等工具的全面开源,以及“最强AI处理芯片”的推出,华为的AI布局已逐渐清晰,其又将为各行各业带来哪些新的改变,让我们拭目以待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【科创星域】 ( 京ICP备20013102号-15 )

GMT+8, 2025-5-5 05:48 , Processed in 0.063780 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表