从已经运行的 docker 容器中保存工件

wl2*_*776 1 docker dockerfile

我对 Docker 完全陌生。我用它来训练神经网络。

我有一个正在运行的容器,执行一个用于训练 NN 的脚本,并将其权重保存在容器的可写层中。最近我意识到这个设置是不正确的(我没有正确的 RTFM),训练结束后 NN 权重会丢失。

我已经阅读了有关卷和持久数据存储的答案和方法。所有这些都表达了一个想法:您必须提前准备好数据存储。

我的容器已经在运行。我明白不正确的设置是我的错。无论如何,我不想丢失将在此执行过程中获得的结果(现在正在进行中)。是否可以?

我想到的一种解决方案是再打开一个终端并运行 watch -n 1000 docker commit <image id> tag:label

也就是说,每 1000 秒提交一次快照。但是,在最后一个 epoch 上获得的权重仍然存在危险,因为 epoch 持续时间不同并且不是 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 
Run Code Online (Sandbox Code Playgroud)

我已经tensorflow-py3-gpu-keras从 DockerHub 中提取的最新 tensorflow 图像手动创建了图像:

docker run tensorflow

容器内部:

pip3 install keras

docker commit在另一个终端。

Dim*_*vak 5

你试过使用docker cp吗?这允许您将文件从 Docker 文件系统移动到您的主机,即使容器已停止(只要它没有被删除)。语法如下所示:

docker cp <container id>:/path/to/file/in/container /path/to/file/in/host
Run Code Online (Sandbox Code Playgroud)