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

相关文章
|
6月前
|
数据采集 自然语言处理 前端开发
社区供稿 | 猎户星空百亿参数大模型 Orion-14B系列开源,一张3060就能跑(附魔搭社区推理微调最佳实践)
1月21日,傅盛在猎户星空大模型发布会上宣布,“为企业应用而生” 的开源百亿参数猎户星空大模型正式发布。猎户星空大模型(Orion-14B)是由猎户星空研发的预训练多语言大语言模型,以其140亿参数规模展现出了卓越的性能。
|
24天前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
|
3月前
|
数据采集 自然语言处理 测试技术
CMU&清华新作:让LLM自己合成数据来学习,特定任务性能同样大幅提升
【8月更文挑战第24天】近期研究提出SELF-GUIDE,一种创新方法,旨在通过大型语言模型(LLMs)自动生成特定任务数据并用于自我微调,以克服其在特定任务上的性能局限。SELF-GUIDE分为三个阶段:数据合成、模型微调及性能评估。通过向目标LLM提供适当提示生成高质量合成数据,并用于微调以提升特定任务表现。实验证明,该方法在Natural Instructions V2等多个基准测试中显著提升了分类与生成任务性能。SELF-GUIDE不仅有效提高性能,还具备高数据效率,减少对外部数据依赖。然而,生成数据质量受限于LLM能力,且并非适用于所有任务。
61 4
|
4月前
|
人工智能 算法
等不来OpenAI的Q*,华为诺亚探索LLM推理的秘密武器MindStar先来了
【7月更文挑战第13天】华为诺亚方舟实验室推出MindStar,一种增强LLM推理能力的搜索框架。MindStar通过PRM奖励模型和Beam/Levin Search策略选择最佳推理路径,提升开源模型如LLaMA-2-13B、Mistral-7B的性能,与GPT-3.5等闭源模型媲美,但成本更低。尽管推理成本高和需预训练PRM,MindStar为LLM推理研究开辟新途径。[论文链接](https://arxiv.org/pdf/2405.16265v4)
82 9
|
4月前
|
自然语言处理 API Android开发
阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?
阿里云的Qwen2-72B模型在Hugging Face上荣登开源模型榜首,展现卓越性能,超越其他包括Meta的Llama-3在内的竞争者。Qwen2有多个参数版本,其中72B版本在自然语言理解、知识、代码等任务上表现出色。较小参数版本如7B模型在某些方面略逊一筹。推出不同参数模型可能是为了降低成本、加速迭代、构建丰富的模型生态。通过提供不同规模的模型,阿里云旨在促进技术研究和全场景应用,类似于微软Windows XP和阿里云OS生态的构建策略。
298 1
|
4月前
|
机器学习/深度学习 并行计算 PyTorch
PyTorch | 加速模型训练的妙招
PyTorch | 加速模型训练的妙招
43 0
|
机器学习/深度学习 存储 缓存
LLM推理提速2.8倍,CMU清华姚班校友提出「投机式推理」引擎SpecInfer,小模型撬动大模型高效推理
LLM推理提速2.8倍,CMU清华姚班校友提出「投机式推理」引擎SpecInfer,小模型撬动大模型高效推理
287 0
|
机器学习/深度学习 人工智能 自然语言处理
Sea AI Lab和北大Adan项目原作解读:加速训练深度模型的高效优化器
Sea AI Lab和北大Adan项目原作解读:加速训练深度模型的高效优化器
272 0
|
机器学习/深度学习 人工智能 算法
固定参数的模型有多大潜力?港中文、上海AI Lab等提出高效视频理解框架EVL
固定参数的模型有多大潜力?港中文、上海AI Lab等提出高效视频理解框架EVL
143 0
|
机器学习/深度学习 自然语言处理 并行计算
ChatGPT背后大模型如何高效训练?京东探索研究院、悉大、中科大60页论文详述五大类训练方法
ChatGPT背后大模型如何高效训练?京东探索研究院、悉大、中科大60页论文详述五大类训练方法
447 0
下一篇
无影云桌面