昇思MindSpore“自动向量化Vmap”介绍与示例

简介: 昇思MindSpore“自动向量化Vmap”介绍与示例

🍁一、什么是“自动向量化Vmap”

自动向量化Vmap官方地址 👉  MindSpore

这应该是非常常见的问题了:自动向量化Vmap是MindSpore深度学习框架中的一个重要特性,用于自动地将数据并行化执行,以提高深度神经网络的计算性能。



概念上,Vmap可以将一个函数应用于一个具有特定形状的N维数组,并自动地将该函数复制到每个数组中的元素,从而实现批量计算的目的。也就是说,通过Vmap技术,可以将运算符应用于整个张量,而不是一次操作其中的每个元素,从而快速地对张量进行操作和转换,将输入和输出都分割成多个分块并分配到多个设备上进行并行处理,可以加快模型的训练和推理速度。

🍁二、 “自动向量化Vmap”有哪些优势

由于在实现过程上,MindSpore的Vmap特性涉及了多个类和函数,包括@vmapipe修饰器、map函数和unroll函数等。其中,@vmapipe修饰器可以将函数转换为自动并行计算函数,Map函数可用于将函数应用于数据集的批处理样本,Unroll函数可将计算循环展开为具有指定维度的代码。通过这些函数的组合使用,可以在MindSpore框架中实现自动向量化的Vmap特性,以提高神经网络的计算性能和效率


总之、MindSpore的自动向量化Vmap特性是一项非常有价值的功能,它可以大幅度提高深度学习算法的运算速度,减少需要的计算资源,同时还可以有效地加速模型的训练和推断过程,进一步推进深度学习技术的应用和发展。


如果还想了解更多“自动向量化Vmap”的优势和特点可以访问官方文档,非常的详细

effafb6b64c740b28c7591f98aa1b8fc.png

🍁三、 “自动向量化Vmap”在实际例子的简单使用

下面以一个简单的例子【Python版】来说明自动向量化Vmap的具体实现过程

假设我们需要对一个形状为(4, 5)的二维张量进行操作,具体步骤如下:

首先肯定是要导入MindSpore相关模块和库:

import mindspore.numpy as np
import mindspore.ops.operations as P
from mindspore import Tensor
from mindspore import context
from mindspore.parallel._auto_parallel_context import auto_parallel_context

其他的部分代码如下:

# 设置运行上下文和设备,开启自动并行计算。
context.set_context(mode=context.GRAPH_MODE, device_target="GPU")
auto_parallel_context().set_straegy("auto_parallel")
# 定义需要进行的操作函数。
def matmul_add(x, y):
    z = P.MatMul()(x, y)
    z = P.Add()(z, 1)
    return z
# 创建数据集,并将数据集分成多个分块以便并行处理。
x_data = np.ones((4, 5))
y_data = np.ones((5, 4))
data1 = Tensor(x_data[:2], dtype=np.float32)
data2 = Tensor(y_data, dtype=np.float32)
data3 = Tensor(x_data[2:], dtype=np.float32)
data_list = [(data1, data2), (data2, data3)]
# 使用@vmapipe修饰器和Map函数将操作函数应用于数据集,并获得结果数据。
@np.vmapipe(model_parallel=2)
def forward(x, y):
    return np.array(matmul_add(x, y))
result_list = np.array(list(map(forward, *data_list))))
# 使用unroll函数对计算循环进行展开。
result = np.unroll(result_list, -1)

最后,我们就可以使用自动向量化Vmap特性对二维张量进行自动并行计算,获得更高的计算效率和速度。其中,@vmapipe修饰器指定了model_parallel参数为2,表示使用2个设备进行并行计算,Map函数将操作函数应用于数据集,并返回结果数据,unroll函数可将计算循环展开为具有指定维度的代码。  

相关文章
|
27天前
|
机器学习/深度学习 存储 人工智能
【AI系统】昇思MindSpore并行
本文介绍昇思MindSpore的并行训练技术,包括张量重排布、自动微分等,旨在简化并行策略搜索,提高大规模模型训练效率。文章探讨了大模型带来的挑战及现有框架的局限性,详细说明了MindSpore如何通过技术创新解决这些问题,实现高效的大模型训练。
76 20
【AI系统】昇思MindSpore并行
|
28天前
|
机器学习/深度学习 人工智能 开发者
【AI系统】昇思 MindSpore 关键特性
本文介绍华为自研AI框架昇思MindSpore,一个面向全场景的AI计算框架,旨在提供统一、高效、安全的平台,支持AI算法研究与生产部署。文章详细阐述了MindSpore的定位、架构、特性及在端边云全场景下的应用优势,强调其动静态图统一、联邦学习支持及高性能优化等亮点。
54 7
【AI系统】昇思 MindSpore 关键特性
|
27天前
|
人工智能 PyTorch 算法框架/工具
【AI系统】动手实现 PyTorch 微分
本文介绍了使用操作符重载(OO)编程方式实现的自动微分,特别是采用反向模式(Reverse Mode)的实现方法。文中详细解释了操作符重载的基本概念及其在自动微分中的应用,以及反向模式的工作原理。通过 Python 示例代码,演示了如何手动实现类似 PyTorch 中自动微分的核心机制,包括定义 `Variable` 类、`Tape` 结构以及实现基本的数学运算符重载。最后,通过一个具体的数学函数示例展示了如何利用上述机制计算梯度,帮助读者理解反向模式自动微分的全过程。
42 1
【AI系统】动手实现 PyTorch 微分
|
30天前
|
人工智能 PyTorch 算法框架/工具
【AI系统】昇腾推理引擎 MindIE
本文详细介绍华为昇腾推理引擎 MindIE,涵盖其基本介绍、关键功能特性及三大组件:MindIE-Service、MindIE-Torch 和 MindIE-RT。文章深入探讨了各组件在服务化部署、大模型推理和推理运行时方面的功能和应用场景,旨在帮助读者全面了解 MindIE 如何支持 AI 业务的高效运行和模型的快速部署。
44 0
|
7月前
|
机器学习/深度学习 并行计算 PyTorch
【从零开始学习深度学习】20. Pytorch中如何让参数与模型在GPU上进行计算
【从零开始学习深度学习】20. Pytorch中如何让参数与模型在GPU上进行计算
|
8月前
|
数据采集 人工智能 PyTorch
极智AI | 昇腾CANN ATC模型转换
大家好,我是极智视界,本文介绍一下 昇腾 CANN ATC 模型转换。
405 0
|
8月前
|
人工智能 并行计算 PyTorch
极智AI | 教你tensorrt实现mish算子
本文介绍了使用 tensorrt 实现 mish 算子的方法。
146 1
|
8月前
|
人工智能 API Python
极智AI | 再谈昇腾CANN量化
大家好,我是极智视界,本文介绍一下 再谈昇腾CANN量化。
163 1
|
8月前
|
人工智能 并行计算 API
极智AI | 谈谈GPU并行推理的几个方式
大家好,我是极智视界,本文主要聊一下 GPU 并行推理的几个方式。
480 0
|
8月前
|
机器学习/深度学习 人工智能 算法
极智AI | 教你简化onnx upsample算子
本文介绍了简化 onnx upsample 算子的方法。
292 0

热门文章

最新文章