MindSpore实践问题记录:amp level ‘O2‘下`ms.ops.linspace`无法正确运行

文章讲述了在使用MindSpore在Linux的Ascend设备上尝试设置自动混合精度为O2时,linspace操作出现类型错误。作者分析了问题可能发生在ms.amp.auto_mixed_precision函数对非Cell实例的处理上,并通过临时用numpy替代解决了问题,强调了对MindSpore内部机制深入理解的必要性。
摘要由CSDN通过智能技术生成

1、基础环境

  • linux
  • Ascend 910
  • MindSpore 2.22

2、问题描述及报错信息

2.1 问题描述

设置自动混合精度为O2级别,ms.ops.linspace始终报类型错误,切换到mindsporepython代码里面将对应tensor打印出来发现符合类型要求,但是一直报错。

最小复现代码如下:

import mindspore as ms
import mindspore.nn as nn

ms.context.set_context(mode=ms.PYNATIVE_MODE, device_target='Ascend')


class LinSpaceTest(nn.Cell):
    def __init__(self):
        super().__init__()

    def construct(self, x):
        return ms.ops.linspace(
            0.5, 2.5, 2
        )
linspace = LinSpaceTest()
linspace.set_train(False)

ms.amp.auto_mixed_precision(linspace, amp_level='O2')
linspace(1)

print('done')

2.2 报错信息

TypeError: For primitive[LinSpace], the input argument[start type] must be a type of {Tensor[Float32], Tensor[Float64]}, but got Tensor[Float16].

3、问题定位及解决

暂时未定位到问题的具体发生位置(查看源码知ms.amp.auto_mixed_precision中仅对Cell的实例进行数据类型设置,应该不影响ms.ops.linspace这种op才对),初步只能定位到在contruct代码段内调用ms.ops.linspace就会报类似的错误,猜测和更深层次的代码(类似context manager之类的、或者是ms.ops.linspace的底层调用了不在blacklist中的Cell类)有关系。

当前使用ms.numpy.linspace暂时规避该问题,但是并不太好,后续将持续跟进该问题。替换后代码如下:

import mindspore as ms
import mindspore.nn as nn

ms.context.set_context(mode=ms.PYNATIVE_MODE, device_target='Ascend')


class LinSpaceTest(nn.Cell):
    def __init__(self):
        super().__init__()

    def construct(self, x):
        # ops -> numpy
        return ms.numpy.linspace(
            0.5, 2.5, 2
        )
linspace = LinSpaceTest()
linspace.set_train(False)

ms.amp.auto_mixed_precision(linspace, amp_level='O2')
linspace(1)

print('done')

4、总结

MindSpore的整体运行机制需要花点时间看看,目前定位问题困难较多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值