昇思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函数可将计算循环展开为具有指定维度的代码。  

相关文章
|
3月前
|
数据可视化 Swift 开发者
零一万物开源Yi系列“理科状元”Yi-9B,消费级显卡可跑,魔搭社区最佳实践
零一万物发布并开源了Yi系列中的“理科状元”——Yi-9B,可在魔搭体验
|
9月前
|
存储 人工智能 调度
GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优
算力对训练模型的重要性日益凸显。随着大模型训练的流行,全球显卡和算力正在快速增长。算力后周期市场也在迅速崛起。其中“后”更多是指后服务市场,涵盖从显卡服务器到货IDC之后,形成稳定算力到输出稳定商业推理结果全过程。该过程主要涉及云化、调优、调度、部署、落地和数据管理等环节。
|
机器学习/深度学习 人工智能 自然语言处理
性能超越Llama2-13B,可免费商用,姚星创业公司开源百亿参数通用大模型
性能超越Llama2-13B,可免费商用,姚星创业公司开源百亿参数通用大模型
461 0
|
5天前
|
人工智能 API 数据中心
NVIDIA破局第二曲线创新问题之Megatron Core的定义如何解决
NVIDIA破局第二曲线创新问题之Megatron Core的定义如何解决
9 0
|
5天前
|
机器学习/深度学习 人工智能 语音技术
NVIDIA破局第二曲线创新问题之NVIDIA大模型平台软件“全家桶”的定义如何解决
NVIDIA破局第二曲线创新问题之NVIDIA大模型平台软件“全家桶”的定义如何解决
9 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
|
2月前
|
编解码 人工智能 测试技术
ShareGPT4V作者团队又一力作!百万高质量视频-字幕数据助力社区提升多模态大模型视频理解及生成能力
【6月更文挑战第30天】ShareGPT4Video`团队推出百万视频-字幕数据集,强化多模态模型的视频理解和生成。包括40K视频的`ShareGPT4Video`数据集、`ShareCaptioner-Video`模型和8B参数的`ShareGPT4Video-8B`模型,后者在视频基准测试中取得最佳效果。差异化字幕生成策略解决了传统方法的局限。尽管取得突破,但数据规模和模型泛化仍是未来挑战。[论文链接](https://arxiv.org/abs/2406.04325v1)
26 1
|
3月前
|
人工智能 自然语言处理 开发者
首个基于SSM-Transformer混合架构,开源商业大模型Jamba
【4月更文挑战第13天】AI模型部署与优化迎来新解决方案,ai21labs推出的SSM-Transformer混合架构大模型Jamba结合英伟达NVIDIA NIM服务。Jamba模型在自然语言处理上表现出色,开源特性促进AI技术普及,而NIM提供跨平台、高性能的部署支持。不过,技术门槛、资源需求及优化挑战仍需考虑。
85 6
首个基于SSM-Transformer混合架构,开源商业大模型Jamba
|
3月前
|
人工智能 自然语言处理 文字识别
社区供稿 | 元象首个多模态大模型XVERSE-V开源,刷新权威大模型榜单,支持任意宽高比输入
元象公司发布了开源多模态大模型XVERSE-V,该模型在图像输入的宽高比方面具有灵活性,并在多项评测中展现出优越性能,超越了包括谷歌在内的多个知名模型。XVERSE-V采用创新方法结合全局和局部图像信息,适用于高清全景图识别、文字检测等任务,且已在Hugging Face、ModelScope和GitHub上开放下载。此外,模型在视障场景、内容创作、教育解题、百科问答和代码生成等领域有广泛应用,并在VizWiz等测试集中表现出色。元象致力于推动AI技术的普惠,支持中小企业、研究者和开发者进行研发和应用创新。
|
3月前
|
人工智能 自然语言处理
浙大联合微软等提出全新视频编辑统一框架UniEdit
【2月更文挑战第13天】浙大联合微软等提出全新视频编辑统一框架UniEdit
39 2
浙大联合微软等提出全新视频编辑统一框架UniEdit