2016-07-27 78 views
0

我寫了下面的代碼,以評估的Python多的效果,而使用TensorFlow:TensorFlow和Python多處理

import tensorflow as tf 
from multiprocessing import Process 

mydevice = "/gpu:0" 

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.01) 

mrange = 1000 

def myfun(): 
    with tf.device(mydevice): 
    mm1 = tf.constant([[float(i) for i in range(mrange)]],dtype='float32') 
    mm2 = tf.constant([[float(i)] for i in range(mrange)],dtype='float32') 

    with tf.device(mydevice): 
     prod = tf.matmul(mm1,mm2) 

    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True,gpu_options=gpu_options)) 
    rest = sess.run(prod) 

    print rest 
    sess.close() 

ll = [] 
for i in range(100): 
    p1 = Process(target=myfun) 
    p1.start() 
    ll.append(p1) 

for item in ll: 
    item.join() 

在我的筆記本電腦的GPU運行這段代碼所需的時間:〜6秒

如果我改變了設備CPU:〜6秒

如果我刪除多,並調用該函數串行:75秒

可能有人請expla如果我在設備設置爲GPU時使用多處理功能會發生什麼情況。很明顯,將會推出多個CUDA內核,但它們將在GPU中同時運行嗎?

這只是一個實驗,看看我是否可以在GPU上啓動多個RNN。

回答

3

GPU主要用於渲染2D和3D計算機圖形。這涉及很多數字處理,可以從並行算法中受益。深度學習還涉及大量並行數字處理,因此加速圖形的相同硬件也可加速深度學習。

GPU與CPU的不同之處在於它針對高度並行的數字運算進行了優化。查看任何Nvidia GPU的規格,您將看到一個名爲CUDA Cores的指標。這個數字通常在數千個範圍內(或者對於較弱的GPU來說爲數百個)。單個CUDA內核比標準CPU內核要弱很多,但由於您擁有如此之多的GPU,可以爲並行任務大幅度執行CPU。該架構實際上非常複雜,您可以閱讀有關如何進入CUDA編程的信息。看看這篇文章。 https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units

從你張貼的數字我猜你有一個弱的筆記本電腦的GPU,所以這就是爲什麼它執行大約相同的CPU。在我的臺式機上,我擁有新的GTX 1080,它可以超過20倍的CPU。我感到驚訝的是,當你連續打電話時,你的數字會上升很多,但我認爲還有其他的事情發生,因爲我甚至不知道如何用tensorflow來做這件事。

0

Fermi及更高版本的GPU支持通過TensorFlow使用的CUDA流執行併發內核。因此,只要CUDA運行時認爲有利於獨立操作,即使它們位於同一圖形中,即可通過單個線程上的單個sess.run調用來啓動獨立操作。