mindspore.scipy 入门使用指导

1. MindSpore框架的SciPy模块

    SciPy 是基于NumPy实现的科学计算库,主要用于数学、物理学、生物学等科学以及工程学领域。诸如高阶迭代,线性代数求解等都会需要用到SicPy。SciPy大体上有数值最优化、线性代数、积分、插值、信号处理、常微分方程求解等计算求解模块。

    原生的SciPy科学计算库仅可CPU平台下使能,对于GPU、Ascend等计算平台无法使用且没有高效的实现。MindSpore是以Python作为表达语言的AI框架,能够合理利用GPU和Ascend的计算能力进行高效计算,并且MindSopre提供了SciPy模块。mindsopre.scipy是MindSpore基于mindspore.numpy和自研算子实现的科学计算库,不仅兼容原生的SciPy能在CPU平台高效运行,而且支持在GPU、Ascend等平台加速计算。

    mindspore.scipy在CPU后端不仅能借助Minspore底层高效的CPU算子而且针对GPU平台也自实现了一系列的GPU底层高效算子。在GPU场景下能够提升硬件算力利用率,大幅提升科学计算的速度。随着后续的更新迭代,Ascend平台上也会使能高性能的mindspore.scipy模块。

    除支持在不同硬件平台加速计算外,mindspore.scipy的接口定义与原生的SciPy保持高度一致,而当前业界已知的TensorFlow和PyTorch等框架中对于科学计算的接口支持与原生SciPy的接口对比存在差异。对于当前MindSpore已经支持的接口,原生的SciPy实现可以直接替换成mindspore.scipy的实现(后面的例子可以看到)。接口定义的高度一致最大程度地降低用户的迁移成本,提高minspore.scipy的易用性。

2.安装mindspore.scipy

    MindSpore的SciPy模块是作为科学计算的组件嵌入在MindSpore中的。当用户成功安装MindSpore框架后,minspore.scipy也会随之安装。MindSpore的安装命令由下图所示。

    推荐使用采用pip的方式完成MindSpore的安装。值得注意的是mindspore.scipy目前仅支持1.6.0及以上的版本,并且支持的平台仅包含CPU(Linux-x86_64)以及GPU(Linux-x86_64),Windows以及Ascend平台目前尚未支持。mindspore.scipy还在不断的发展,在后续的更新迭代中会逐渐更丰富、更高效、更便捷的用户接口以及更多计算平台。

Linux系统下CPU的pip安装命令为:

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/x86_64/mindspore-1.6.0-cp37-cp37m-linux_x86_64.whl  --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

Linux 系统下GPU的pip安装命令为:

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.0/MindSpore/cpu/x86_64/mindspore-1.6.0-cp37-cp37m-linux_x86_64.whl  --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后显示的界面如下:

import mindspore  
import mindspore.scipy  
print(mindspore.__version__)

如果输出1.6.0并且没有错误提示的话,说明mindspore.scipy正确安装了。

除了上述的pip命令安装,还可以用别的方式(例如源码)进行安装,详细的执行步骤可以参考MindSpore官网

3.如何使用mindspore.scipy

    从1,2小节可知,mindspore.scipy的接口是与原生SciPy高度对齐的,以下是一个简单的例子来展示如何极小程度修改原生SciPy的脚本,使能GPU计算。

   以下代码是使用原生NumPy和SciPy计算一个正定对称的实数矩阵进行cholesky分解和求解线性方程的过程:

import numpy as np  
from scipy.linalg import cho_factor as cho_factor  
from scipy.linalg import cho_solve as cho_solve  
a = np.array([[9., 3., 1., 5.], [3., 7., 5., 1.], [1., 5., 9., 2.], [5., 1., 2., 6.]])  
b = np.array([1., 1., 1., 1.])  
c, low = cho_factor(A)  # 计算 A = L L*  
x = cho_solve((c, low), b)  # 计算 A x = b  
print(np.dot(A, x) - b)  # 输出 A x - b 是否为0

运行上述脚本输出为:

[0.00000000e+00 2.22044605e-16 0.00000000e+00 0.00000000e+00] 

上述脚本中的分解和求解方程只能通过CPU进行计算,因为原生NumPy和SciPy只能在CPU上运行。安装了GPU下的MindSpore之后,将import的包改为mindspore.scipy,便可在GPU下对矩阵进行运算。修改后的脚本为:

import mindspore.numpy as np  # 修改为mindspore.numpy  
from mindspore.scipy.linalg import cho_factor as cho_factor  # 修改为mindspore.scipy  
from mindspore.scipy.linalg import cho_solve as cho_solve  # 修改为mindspore.scipy  
a = np.array([[9., 3., 1., 5.], [3., 7., 5., 1.], [1., 5., 9., 2.], [5., 1., 2., 6.]])  
b = np.array([1., 1., 1., 1.])  
c, low = cho_factor(A)  
x = cho_solve((c, low), b)  
print(np.dot(A, x) - b)

运行上述脚本,输出结果为:

[-5.9604645e-08  0.0000000e+00  0.0000000e+00 -5.9604645e-08] 

值得注意的是,mindspore.numpy.array默认构造的浮点类型是float32,如果需要更高的精度,用户可以将对应输入数据类型指定为float64,即

a = np.array([[9., 3., 1., 5.], [3., 7., 5., 1.], [1., 5., 9., 2.], [5., 1., 2., 6.]], dtype=np.float64)

若用户使用mindspore.scipy时存在编译时间过长的问题,可以尝试使用动态图模式运行MindSpore。mindspore.scipy的接口支持动静态图两种模式运行。默认情况下,MindSpore的运行是图模式(GRAPH_MODE),用户进需要输入代码,即可切换为动态图模式(PYNATIVE_MODE):

from mindspore import context  
context.set_context(mode=context.PYNATIVE_MODE)

关于cholesky分解,mindspore.scipy.linalg中有mindspore.scipy.linalg.cho_factor、mindspore.scipy.linalg.cholesky两个对外接口,对应的api描述可在

mindspore.scipy.linalg.cho_factor — MindSpore master documentation 中查看。

4.更多的mindspore.scipy接口

    更多具体的接口开放信息,可以查看对应的官方文档链接。

    目前mindspore.scipy模块初步完成了scipy.linalg(线性代数)、scipy.sparse.linalg(稀疏线性代数)、scipy.optimize(数值优化)这几个模块中的部分基础接口的开发。接口和文档都在持续完善中,最新、最全面的接口信息均可在mindspore.scipy — MindSpore master documentation中查看。其中包含了mindspore.scipy模块支持的所有接口,以及每个接口对应的输入输出,简单用例代码等。

QA 

    Q1:我安装了MindSpore 1.5的cpu 版本,为什么无法使用SciPy?

    A1:mindspore.scipy 是r1.6以后开源到MindSpore的,用户可以安装更新的版本(r1.6)或者master上的MindSpore源码进行安装体验。

    Q2:  我安装了MindSpore 1.6的cpu windows版本,为什么无法使用SciPy?

    A2:mindspore.scipy 当前还未支持windows操作系统,后续会加紧迭代加入,可以使用linux-x86-64下的cpu或者gpu版本安装体验。

    Q3:我想用mindspore.scipy模块下的xxx API,但是在官网的并未查询到相应的支持,怎么办?

    A3:如果在官网的最新介绍中没有查询到xxx API,可以再MindSpore的社区提issue给社区维护人员,我们会根据计划尽快开发xxx API。

         MindSpore码云:mindspore: MindSpore is a new open source deep learning training/inference framework that could be used for mobile, edge and cloud scenarios.

         MindSpore官网:https://www.mindspore.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值