2

Caffe ニューラル ネットワークがあり、メイン スレッドをブロックせずにネットワークで (GPU を使用して) フォワード パスを実行したいと考えています。私はpythonを使用しています。スレッドとマルチプロセッシングを使用してみました。GPU を使用するように要求しているにもかかわらず、彼らは CPU を使用しています。これが私のコードです:

class ThreadingWorker(threading.Thread):
    def __init__(self):
        super(ThreadingWorker,self).__init__()
        param = config()
        self.model = param.model
        self.net = caffe.Net(self.model.deployFile, self.model.caffemodel, caffe.TEST)

    def run(self):
        input_data = np.random.rand(1,4,self.model.width,self.model.height)
        start = time()
        self.net.forward(data=input_data)
        print 'Success, took %f seconds' % (time()-start)      

class MultProcessingWorker(mp.Process):
    def run(self):
        param = config()
        self.model = param.model
        self.net = caffe.Net(self.model.deployFile, self.model.caffemodel, caffe.TEST)
        input_data = np.random.rand(1,4,self.model.width,self.model.height)
        start = time()
        self.net.forward(data=input_data)
        print 'Success, took %f seconds' % (time()-start)      

class NormalWorker(object):
    '''Using the main thread, no parallelization is being used here'''
    def __init__(self):
        param = config()
        self.model = param.model
        self.net = caffe.Net(self.model.deployFile, self.model.caffemodel, caffe.TEST)

    def run(self):
        input_data = np.random.rand(1,4,self.model.width,self.model.height)
        start = time()
        self.net.forward(data=input_data)
        print 'Success, took %f seconds' % (time()-start)   

p = NormalWorker()
p.run()

>> Success, took 0.34 seconds

thread = ThreadingWorker()
thread.start()   

>> Success, took 3.54 seconds

p = MultProcessingWorker()
p.start()

>> Success, took 3.45 seconds
4

1 に答える 1

2

私は非常によく似た問題を抱えていました。

使用して

caffe.set_mode_gpu()

子スレッド自体で解決しました。

だから試してください:

class MultProcessingWorker(mp.Process):
    def run(self):

        caffe.set_mode_gpu() # <---  should fix the problem

        param = config()
        self.model = param.model
        self.net = caffe.Net(self.model.deployFile, self.model.caffemodel, caffe.TEST)
        input_data = np.random.rand(1,4,self.model.width,self.model.height)
        start = time()
        self.net.forward(data=input_data)
        print 'Success, took %f seconds' % (time()-start)  
于 2016-06-10T18:20:13.800 に答える