建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
MindSpore 主题:3176帖子:10177

已解决

【 问题求助-算子编译】

avgpool3d放在自己的gpu上能跑出结果 但是放到Ascend上似乎跑不出结果 或者说是太慢了)

liqupr 2021/6/1 732
import numpy as np
# import torch
import time
import mindspore.ops as ops
from mindspore import Tensor
import mindspore.context as context
from mindspore import dtype as mstype

context.set_context(mode=context.PYNATIVE_MODE, device_target="CPU")
class AvgPool3D:
# mindspore implementation
def __init__(self, kernel_size=(2, 2, 2), stride=(2, 2, 2)):
self.stride = stride
self.kernel_size = kernel_size
self.w_height = kernel_size[1]
self.w_width = kernel_size[2]
self.w_d = kernel_size[0]

def __call__(self, x):
self.x = x
self.in_height = x.shape[3]
self.in_width = x.shape[4]
self.in_d = x.shape[2]
self.out_height = int((self.in_height - self.w_height) / self.stride[0]) + 1
self.out_width = int((self.in_width - self.w_width) / self.stride[1]) + 1
self.out_d = int((self.in_d - self.w_d) / self.stride[2]) + 1
self.max = ops.Argmax()
op = ops.ReduceMean(keep_dims=True)
out = np.ones((x.shape[0], x.shape[1],self.out_height, self.out_width, self.out_d)).astype(np.float32)
out = Tensor(out)
n = 0
# print( x.shape[0].dtype)
while n < x.shape[0]:
c = 0
while c < x.shape[1]:
i = 0
while i < self.out_height:
j = 0
while j < self.out_width:
k = 0
while k < self.out_d:
start_i = i * self.stride[0]
start_j = j * self.stride[1]
start_k = k * self.stride[2]
end_i = start_i + self.w_height
end_j = start_j + self.w_width
end_k = start_k + self.w_d
out[n, c] = op(x[n, c, start_i: end_i, start_j: end_j, start_k: end_k])
k += 1
j += 1
i += 1
c += 1
n += 1
return out

if __name__ == '__main__':
context.set_context(mode=context.GRAPH_MODE, device_target="GPU", save_graphs=False)

x_numpy = np.random.random((32, 52, 1, 7, 7)).astype(np.float32)
x_ms = Tensor(x_numpy,mstype.float32)
avg_pool_ms = AvgPool3D(kernel_size=(1, 7, 7), stride=(1, 1, 1))
out_ms = avg_pool_ms(x_ms)
print(out_ms.shape)

由于mindspore不支持avgpool3d 故在工程师给的代码下修改了一下avgpool3d算子 。该算子在gpu下能跑出结果,但是放到Ascend上时,能看到程序一直在运行 但是始终没有结果。报警警告:[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.136.049 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.136.096 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] PRE_ACT(100136,python):2021-06-01-21:03:30.137.172 [mindspore/ccsrc/backend/optimizer/ascend/format_type/deal_ref_trans_and_cast.cc:109] AddAdditionalToRefOutput] ref op origin node is not parameter
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.311.646 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.311.686 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] PRE_ACT(100136,python):2021-06-01-21:03:30.312.760 [mindspore/ccsrc/backend/optimizer/ascend/format_type/deal_ref_trans_and_cast.cc:109] AddAdditionalToRefOutput] ref op origin node is not parameter

有什么解决办法吗???急求各位大佬!!!!!!!!

回复3

2021/6/2 09:26

用户您好,上面问题已经收到,会尽快给您答复,请耐心等待一下哦~

梁成辉
1 0
2021/6/2 11:29

你使用CPU跑3D算子,当然慢了。

liqupr

2021-6-2 19:05

我用ascend效果是一样的 也跑不出来
... 展开
梁成辉
3 0
2021/6/3 15:52

使用master分支的最新版本试试。

你使用的是什么版本?

liqupr

2021-6-3 20:43

master分支的最新版本是啥呀 不好意思 我不太知道呢
... 展开

liqupr

2021-6-3 20:44

您说的是mindspore版本吗 我用的1.2
... 展开

chengxiaoli

2021-6-4 11:15

用户您好,1.2版本应该还不支持该算子,可以选择在https://gitee.com/mindspore/mindspore中选择master分支进行编译安装。编译安装教程:https://bbs.huaweicloud.com/forum/thread-97495-1-1.html。
... 展开
上划加载中
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

liqupr

发帖: 30粉丝: 0

发消息 + 关注

发表于2021年06月01日 21:28:04 732 3
直达本楼层的链接
楼主
显示全部楼层
[算子编译] avgpool3d放在自己的gpu上能跑出结果 但是放到Ascend上似乎跑不出结果 或者说是太慢了)

import numpy as np
# import torch
import time
import mindspore.ops as ops
from mindspore import Tensor
import mindspore.context as context
from mindspore import dtype as mstype

context.set_context(mode=context.PYNATIVE_MODE, device_target="CPU")
class AvgPool3D:
# mindspore implementation
def __init__(self, kernel_size=(2, 2, 2), stride=(2, 2, 2)):
self.stride = stride
self.kernel_size = kernel_size
self.w_height = kernel_size[1]
self.w_width = kernel_size[2]
self.w_d = kernel_size[0]

def __call__(self, x):
self.x = x
self.in_height = x.shape[3]
self.in_width = x.shape[4]
self.in_d = x.shape[2]
self.out_height = int((self.in_height - self.w_height) / self.stride[0]) + 1
self.out_width = int((self.in_width - self.w_width) / self.stride[1]) + 1
self.out_d = int((self.in_d - self.w_d) / self.stride[2]) + 1
self.max = ops.Argmax()
op = ops.ReduceMean(keep_dims=True)
out = np.ones((x.shape[0], x.shape[1],self.out_height, self.out_width, self.out_d)).astype(np.float32)
out = Tensor(out)
n = 0
# print( x.shape[0].dtype)
while n < x.shape[0]:
c = 0
while c < x.shape[1]:
i = 0
while i < self.out_height:
j = 0
while j < self.out_width:
k = 0
while k < self.out_d:
start_i = i * self.stride[0]
start_j = j * self.stride[1]
start_k = k * self.stride[2]
end_i = start_i + self.w_height
end_j = start_j + self.w_width
end_k = start_k + self.w_d
out[n, c] = op(x[n, c, start_i: end_i, start_j: end_j, start_k: end_k])
k += 1
j += 1
i += 1
c += 1
n += 1
return out

if __name__ == '__main__':
context.set_context(mode=context.GRAPH_MODE, device_target="GPU", save_graphs=False)

x_numpy = np.random.random((32, 52, 1, 7, 7)).astype(np.float32)
x_ms = Tensor(x_numpy,mstype.float32)
avg_pool_ms = AvgPool3D(kernel_size=(1, 7, 7), stride=(1, 1, 1))
out_ms = avg_pool_ms(x_ms)
print(out_ms.shape)

由于mindspore不支持avgpool3d 故在工程师给的代码下修改了一下avgpool3d算子 。该算子在gpu下能跑出结果,但是放到Ascend上时,能看到程序一直在运行 但是始终没有结果。报警警告:[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.136.049 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.136.096 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] PRE_ACT(100136,python):2021-06-01-21:03:30.137.172 [mindspore/ccsrc/backend/optimizer/ascend/format_type/deal_ref_trans_and_cast.cc:109] AddAdditionalToRefOutput] ref op origin node is not parameter
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.311.646 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] DEVICE(100136,python):2021-06-01-21:03:30.311.686 [mindspore/ccsrc/runtime/device/ascend/kernel_select_ascend.cc:282] TagRaiseReduce] node:[ScatterNdUpdate]reduce precision from int64 to int32
[WARNING] PRE_ACT(100136,python):2021-06-01-21:03:30.312.760 [mindspore/ccsrc/backend/optimizer/ascend/format_type/deal_ref_trans_and_cast.cc:109] AddAdditionalToRefOutput] ref op origin node is not parameter

有什么解决办法吗???急求各位大佬!!!!!!!!

举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

chengxiaoli

发帖: 303粉丝: 41

级别 : 版主,版块专家

发消息 + 关注

发表于2021年06月02日 09:26:51
直达本楼层的链接
沙发
显示全部楼层

用户您好,上面问题已经收到,会尽快给您答复,请耐心等待一下哦~

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

梁成辉

发帖: 0粉丝: 1

发消息 + 关注

发表于2021年06月02日 11:29:23
直达本楼层的链接
板凳
显示全部楼层

你使用CPU跑3D算子,当然慢了。

评论
liqupr 2021-6-2 19:05 评论

我用ascend效果是一样的 也跑不出来

... 查看全部
点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

梁成辉

发帖: 0粉丝: 1

发消息 + 关注

发表于2021年06月03日 15:52:16
直达本楼层的链接
地板
显示全部楼层

使用master分支的最新版本试试。

你使用的是什么版本?

评论
liqupr 2021-6-3 20:43 评论

master分支的最新版本是啥呀 不好意思 我不太知道呢

... 查看全部
liqupr 2021-6-3 20:44 评论

您说的是mindspore版本吗 我用的1.2

... 查看全部
chengxiaoli 2021-6-4 11:15 评论

用户您好,1.2版本应该还不支持该算子,可以选择在https://gitee.com/mindspore/mindspore中选择master分支进行编译安装。编译安装教程:https://bbs.huaweicloud.com/forum/thread-97495-1-1.html。

... 查看全部
点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

邀请回答
您可以邀请3位专家

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200