[問題] tensorflow的純計算怎麼那麼慢?

看板Python作者 (逆天)時間6年前 (2018/05/18 23:37), 編輯推噓9(9026)
留言35則, 6人參與, 6年前最新討論串1/1
我用TF寫了一個計算使用者cosin相似度的程式如圖 http://i.imgur.com/Ic1gMEH.jpg
n_users = 943,每個user有1682筆資料 結果跑到天荒地老,CUDA開了還是要10分鐘才跑完一個user 我用一般寫法,不用任何套件,只需要40多分鐘就能跑完全部 有人知道背後的原因嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.153.113 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1526657828.A.0DD.html

05/18 23:46, 6年前 , 1F
不知道為什麼tf這裡這麼慢
05/18 23:46, 1F

05/18 23:46, 6年前 , 2F
有沒有試過用placeholder 當user的資料輸入控制看看?
05/18 23:46, 2F

05/18 23:46, 6年前 , 3F
我還有發現這樣的i與j的迴圈是不是有很多次不必要的重複
05/18 23:46, 3F

05/18 23:46, 6年前 , 4F
計算嗎?
05/18 23:46, 4F

05/18 23:46, 6年前 , 5F
例如總共10個user,i=1時的loop中1號與5號比過了,到i =
05/18 23:46, 5F

05/18 23:46, 6年前 , 6F
5的loop中5號又與1號比較一次
05/18 23:46, 6F

05/18 23:46, 6年前 , 7F
如果在第二層迴圈中改成
05/18 23:46, 7F

05/18 23:46, 6年前 , 8F
for j=I in range 會不會比較快一點
05/18 23:46, 8F

05/19 00:17, 6年前 , 9F
我試試看
05/19 00:17, 9F

05/19 00:27, 6年前 , 10F
tensorflow是要建立computing graph再去計算 你這樣會
05/19 00:27, 10F

05/19 00:28, 6年前 , 11F
重複建很多次浪費時間
05/19 00:28, 11F

05/19 00:36, 6年前 , 12F
input改用placeholder,U1_norm到cosin都放for外面
05/19 00:36, 12F

05/19 16:00, 6年前 , 13F
寫tensorflow要快就是要懂得怎麼樣把資料分給顯卡平行算
05/19 16:00, 13F

05/19 16:00, 6年前 , 14F
如果你只是弄一個自己想好的邏輯,然後丟給Tensorflow
05/19 16:00, 14F

05/19 16:01, 6年前 , 15F
預期程式就會很"聰明"的幫你分配電腦硬體,最有效率的算
05/19 16:01, 15F

05/19 16:01, 6年前 , 16F
出結果,那你的期待應該很容易就會落空y
05/19 16:01, 16F

05/19 16:03, 6年前 , 17F
如果不懂如何使用GPU加速的話,其實還是寫Python處理資料
05/19 16:03, 17F

05/19 16:04, 6年前 , 18F
就好,因為把一樣的程式單純搬到TF上面應該是不會變快的
05/19 16:04, 18F

05/19 16:05, 6年前 , 19F
要速度快就是要利用平行運算的性質來跑(CPU or GPU都是)
05/19 16:05, 19F

05/19 17:56, 6年前 , 20F
直接用numpy就好了 不知道用tf的意義
05/19 17:56, 20F

05/19 21:51, 6年前 , 21F
tsoahans正解 這裡完全不需要用到 loops 你的computati
05/19 21:51, 21F

05/19 21:51, 6年前 , 22F
onal graph 只需要一組 ops 但你現在建了 n^2 組 那當
05/19 21:51, 22F

05/19 21:51, 6年前 , 23F
然很慢
05/19 21:51, 23F

05/19 21:58, 6年前 , 24F
這個應用場景其實很常見 比如說CNN 有個 regression ta
05/19 21:58, 24F

05/19 21:58, 6年前 , 25F
sk我們想用cosine distance去當 loss (或是一個很custo
05/19 21:58, 25F

05/19 21:58, 6年前 , 26F
mized的loss) 這種情況能vectorize就vectorize. 否則會
05/19 21:58, 26F

05/19 21:59, 6年前 , 27F
非常的慢
05/19 21:59, 27F

05/21 15:33, 6年前 , 28F
感謝各位指教,前天改了之後沒問題了,不過倒是發現
05/21 15:33, 28F

05/21 15:33, 6年前 , 29F
了一件神奇的事情,我用gpu跑要將近4分鐘,用cpu竟
05/21 15:33, 29F

05/21 15:33, 6年前 , 30F
然只要1分多,跟我GPU應該比較快的印象不太一樣,我
05/21 15:33, 30F

05/21 15:33, 6年前 , 31F
挺好奇其中原因的
05/21 15:33, 31F

05/25 11:35, 6年前 , 32F
要看程式是IO bound還是CPU bound,GPU再運算時需要透過
05/25 11:35, 32F

05/25 11:36, 6年前 , 33F
bus把資料搬到GPU的記憶體內,比CPU直接從memory取資料
05/25 11:36, 33F

05/25 11:36, 6年前 , 34F
05/25 11:36, 34F

05/25 11:46, 6年前 , 35F
另外就是看你的程式有多少部分可以平行化
05/25 11:46, 35F
文章代碼(AID): #1Q_lCa3T (Python)