2017-08-05 45 views
0

香港專業教育學院寫了seq2seq網絡,使用Facebook fastText向量我的嵌入。我遇到了一個問題,即模型將運行並訓練40%的時間,然後在60%的訓練開始時隨機掛起。Tensorflow掛起。什麼是有些事情我可以做調試問題

我考慮的一些事情是對我的參數進行的任何調整都可能導致瓶頸,因爲emebeddings有多大,300x100000和序列長度平均爲10個單位。這表示使用nvidia-smi我可以看到它不是一個計算瓶頸,因爲GPU在特定時間只顯示9-20%的使用率。同樣,網絡也會調整一些池的大小,但從來沒有在模型成功訓練的運行中擊中OOM。我爲我的訓練解碼器和我的預測解碼器使用了一個預定的列車幫助器和一個波束搜索解碼器。

它變得有點有風險的,因爲我每次重新啓動作出的調整風險我花更多的時間查殺處理後的培訓和再然後運行實際看到實驗發揮出來。我在一個EC2 p2xlarge實例中使用單個K80在12gib vram。

另外有沒有什麼辦法可以快速檢查掛起確實掛起和tensorflow實際上不是隻是在努力搗弄數字給我嗎?我現在有2000個步驟的間隔設置打印鉤子,但它看起來並不像已經採取了一步。有沒有什麼能夠更細緻地顯示某個opnode正在執行。

我試過tfdbg以及我不認爲它與我使用的contrib.estimator.estimator兼容,因爲它在執行幾個步驟後從invoke_stepper崩潰到奇怪的錯誤,從堆棧跟蹤don' t似乎與我的代碼有關。

+0

最常見的「掛」問題是餓死的隊列。你正在將數據送入隊列嗎?如果是這樣,則啓動另一個線程,並且每隔一秒左右打印一次該隊列的大小,然後查看是否啓動隊列。 –

+2

您可以使用gdb或strace附件查看它掛在哪裏。如果它掛在session.run調用中,你可以添加tf.Print語句來確定它掛在哪個操作上。 –

回答

0

在這種特殊情況下連接後,廣​​發行,看着它看起來像東西被鎖的線程。我搜索了相關的上tensorflow的GitHub上的問題,它原來有上看起來類似地雷潛在livelocking問題了大規模的線程。在該線程結束時,另一個相關問題與摘要編寫者無法關閉線程併產生無法管理的線程數量相關聯。

我正在使用tf.train「tf.train.LoggingTensorHook」的更高級別的日誌記錄機制,事實證明這並不使用摘要編寫器,所以我做的這個功能是因爲某種原因在tensorflow的內部線程中玩得很好,並以類似的方式鎖定所有東西。自從刪除日誌鉤以來,我已經掛起了0次,並且運行了超過20次運行以成功完成以及幾次運行超過100000次的更長時間的運行。

相關問題