2017-10-18 70 views
1

我對Docker完全陌生。我正在使用它來訓練神經網絡。保存已運行的碼頭集裝箱中的工件

我有一個正在運行的容器,執行用於訓練NN的腳本,並將其權重保存在容器的可寫層中。最近我意識到這個設置是不正確的(我沒有正確的RTFM),並且在訓練結束後NN權重將會丟失。

我已閱讀有關卷和持久性數據存儲的答案和配方。他們都表達了一個想法:您必須提前準備好數據存儲。

我的貨櫃是已在運行。我明白不正確的設置是我的錯。無論如何,我不想失去在執行過程中獲得的結果(目前正在進行中)。可能嗎?已經來到我的腦海

一種解決辦法是打開一個更終端,運行watch -n 1000 docker commit <image id> tag:label

也就是說,提交快照每1000秒。然而,由於曆元持續時間不同,並且不是1000的倍數,所以在最後一個時期獲得的權重仍然處於危險中。

是否還有更優雅的解決方案?

附加信息

圖片此容器用下列Dockerfile創建的:

FROM tensorflow-py3-gpu-keras 

WORKDIR /root 

COPY model4.py /root 
COPY data_generator.py /root 
COPY hyper_parameters.py /root 

CMD python model4.py 

我已經手動從最新tensorflow圖像創建的圖像tensorflow-py3-gpu-keras,從DockerHub被拉:

docker run tensorflow

集裝箱內:

pip3 install keras

而在另一個終端docker commit

+0

您需要將文件保存在根目錄嗎? @ wl2776 – Sergiu

+0

是的,腳本在/ root下運行,它在當前目錄 – wl2776

+0

中創建文件,您可以嘗試在該位置使用-v來掛載一個目錄,這將使該目錄和永久 – Sergiu

回答

4

您是否嘗試過使用docker cp?這允許您將文件從Docker文件系統移動到主機,即使容器已停止(只要它尚未被移除)。語法如下所示:

docker cp <container id>:/path/to/file/in/container /path/to/file/in/host 
+0

我用'docker commit'解決了我的問題。但'docker cp'是更好的解決方案。我會記住它,但希望不再需要這樣的黑客。 – wl2776