昇思MindSpore介绍

第一次浪潮:符号主义+逻辑推理

第二次浪潮:专家系统+机器学习

第三次浪潮:深度学习

第四次浪潮:智能内容生成(chatGPT)

(重点:分布式并行,transformer配置文件、高性能推理)

一些吹捧昇思的内容…

MindSpore vs PyTorch

MindSpore模型开发风格和PyTorch保持一致,部分API接口名称不同

  • MindSpore继承Cell类,Pytorch继承Module类
  • MindSpore应用construct接口,pytorch应用forward接口
  • 数据预处理方面,MS采用流水线形式,定义一系列数据操作,作用到数据集上
    PT采用多进程形式,目前也在推出流水线形式(TorchData)

acllite

在华为Ascend AI处理器的开发环境中,devicecontextstreamresource这几个概念是用于管理和组织计算资源的基本元素。

1. Device(设备)

Device 是计算的基本单元。每个 device 代表一个物理的Ascend AI处理器。初始化设备是执行计算任务的第一步。

2. Context(上下文)

Context 是对设备上的计算环境的抽象。一个 device 可以包含一个或多个 contextcontext 提供了一个独立的执行环境,管理其内存和其他资源。多个 context 可以在同一个 device 上并行运行,彼此独立。

3. Stream(流)

Stream 是一种用于控制计算和内存操作的顺序的机制。一个 context 中可以包含一个或多个 stream。每个 stream 内的操作按顺序执行,但不同 stream 之间可以并行执行。stream 使得程序能够在同一个 context 中实现并行计算。

4. Resource(资源)

Resource 包括内存、事件和其他硬件资源。这些资源在 contextstream 中被分配和管理,用于支持计算任务的执行。

关系图

1
2
3
4
5
6
7
8
Device
└── Context
├── Stream
│ ├── Resource
│ └── Resource
└── Stream
├── Resource
└── Resource

示例代码

以下示例代码展示了如何在华为Ascend AI处理器环境中初始化设备、创建上下文和流,并分配资源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import acl

def main():
# 初始化ACL
acl.init()

# 设置设备ID
device_id = 0
acl.rt.set_device(device_id)

# 创建上下文
context, ret = acl.rt.create_context(device_id)
if ret != 0:
raise Exception(f"acl.rt.create_context failed with error code {ret}")

# 创建流
stream, ret = acl.rt.create_stream(context)
if ret != 0:
raise Exception(f"acl.rt.create_stream failed with error code {ret}")

# 分配内存资源(示例)
input_size = 1024
input_ptr, ret = acl.rt.malloc(input_size, acl.const.ACL_MEM_MALLOC_HUGE_FIRST)
if ret != 0:
raise Exception(f"acl.rt.malloc failed with error code {ret}")

# 释放资源
acl.rt.free(input_ptr)
acl.rt.destroy_stream(stream)
acl.rt.destroy_context(context)
acl.rt.reset_device(device_id)
acl.finalize()

if __name__ == "__main__":
main()

导入模型

  1. 通过ms.export将已有权重导入成onnx形式的模型

  2. 使用atc工具将原始模型转化为om模型