bug描述 Describe the Bug
Paddle 在 有cuda的设备上默认调用GPU,实际运算中造成设备调用混乱,缺少相关文档,如设定某一Tensor x 传输至CPU后,对其进行的任意运算仍将被自动传回GPU进行,对部分需要在cpu端进行的操作难以调度,不太符合在设备端运算的控制逻辑,device_guard在动态图模式下无效, paddle.device.set_device("cpu") 可用但仍旧添加了额外的逻辑负担,该是否存在设备同步等副作用?
import paddle
a = paddle.rand(shape=[1,4])
a = a.cpu()
print(a.place) # CPUPlace
a=a+1
print(a.place) # CUDAPlace
a = a.cpu()
print(a.place) # CPUPlace
with paddle.static.device_guard("cpu"):
a = a+1
print(a.place) # CUDAPlace
其他补充信息 Additional Supplementary Information
- No response*
4条答案
按热度按时间c6ubokkw1#
您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看 官网API文档 、 常见问题 、 历史Issue 、 AI社区 来寻求解答。祝您生活愉快~
Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the API , FAQ , Github Issue and AI community to get the answer.Have a nice day!
y4ekin9u2#
抱歉 这个现象出现的原因是因为我们对于运行的算子会自动的根据当前的默认设备进行设备间拷贝,目的是为了减少用户自行思考相关拷贝的操作代码,但是这个设计确实存在一定弊端,比如您提到的这个问题。我们正在寻找一种更好的策略来兼顾这两中情况。
os8fio9y3#
device_guard这个接口只能在静态图下生效哈 而动态图则需要paddle.device.set_device("cpu")这样去使用
3yhwsihp4#
抱歉 这个现象出现的原因是因为我们对于运行的算子会自动的根据当前的默认设备进行设备间拷贝,目的是为了减少用户自行思考相关拷贝的操作代码,但是这个设计确实存在一定弊端,比如您提到的这个问题。我们正在寻找一种更好的策略来兼顾这两中情况。
是的,主要是在某些显存紧张的场景下缺少了按需求自由调度的使用方式,如果后续能增加全局设置,或者能够为Tensor设定禁止自动设备间拷贝的flag,更进一步支持在用户手动指定Tensor设备或手动调用设备间移动之后设定该禁止flag也许更合理一些