我有两个文件:
import mylib
class Foo:
def __init__(self):
self.myobj = mylib.MyObj(0)
def main():
foo = Foo()
foo.myobj.docaffe()
import caffe
caffe.set_mode_gpu()
class MyObj:
def __init__(self, gpuid):
caffe.set_device(gpuid)
self.nd = caffe.Net(...)
def docaffe():
self.nd.forward(...)
然而,代码在CPU上运行,尽管mylib.py
的替代版本中的代码几乎相同(我的两个模块当前通过zmq
进行通信,所以我想直接调用)按预期工作直接通过python mylib.py
调用。
那么,有什么我不知道导入模块和上下文的东西吗?我是否需要一些额外的范围信息以确保我在正确的上下文中设置GPU模式?
更新:我尝试将mylib.py
粘贴到main.py
,但代码仍无法使用GPU,因此{{1}之间可能存在一些模糊的冲突和其他导入,如caffe
或各种ROS模块。
答案 0 :(得分:0)
这很奇怪 - 我的问题的解决方案是:
import caffe
class MyObj:
def __init__(self, gpuid):
caffe.set_device(gpuid)
self.nd = caffe.Net(...)
def docaffe():
caffe.set_mode_gpu()
self.nd.forward(...)
将caffe.set_mode_gpu()
移动到__init__
方法的开头或结尾不起作用,只是在调用它似乎坚持的caffe
的胆量之前。我认为问题与在一个线程中使用线程和创建MyObj
有关,然后在另一个线程中使用它。