【Mindspore 1.5rc】【Graph Mode性能】Graph Mode下,网络结构中存在较多循环时编译速度过慢

问题描述:

【问题背景】

推理时,我需要写一个自回归的过程,循环调用我的model,如

x=init()

for i in range(200):

    x=model(x)

我希望把这个过程放在一个nn.Cell类的construct方法里,这样可以在Graph Mode的时候速度快很多(否则就是在静态图之外,用python的过程来做这个循环)。

【问题】

当这个循环数量小的时候,我启动程序,还挺快的;但是一旦这个循环次数增加,启动程序时,程序会卡在编译阶段特别特别慢,难以忍受的慢(数小时)。

请问应该如何把这种循环放在静态图的遍历过程中,感觉太慢了啊,而且好像很吃显存

解答:

循环200次就相当于构造了相当于原始的模型200倍的model,显存和速度降低也是合理的,可以缩小下模型看下

主要问题在于循环展开导致编译时间较长,可以试试下面的code

'''

@constexpr

def get_range_start():

    return Tensor(0, dtype=dtype.int32)

@constexpr

def get_range_end(end):

    return Tensor(end, dtype=dtype.int32)

@ms_function

def construct(x):

    i = get_range_start()

    while i < get_range_end(200):

        x = model(x)

        i += 1

    return x

'''

可以试试这么写能不能关掉循环展开

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值