项目详情
我正在运行名为 的基于 GAN 的研究论文的开源代码“研究基于生成对抗网络的语音去混响以实现稳健的语音识别”
源代码:here
依赖项包括:
我在我的 GPU 虚拟机上使用 python 2.7 提取了 TensorFlow 1.4.0 的 Docker 镜像,并使用以下命令与 ssh 连接:
docker pull tensorflow/tensorflow:1.4.0-gpu
我在运行
bash rsrgan/run_gan_rnn_placeholder.sh
根据 source code 的自述文件
问题详情
一切正常,模型正在训练,损失在减少,但只有一个问题,经过一些迭代终端没有输出,GPU 仍然显示 PID,但没有释放内存,有时 GPU-Utils 变为 0%。在 VM 的 GPU 和 CPU 上进行训练是相同的情况。
这不是内存问题因为按型号划分的 GPU 内存使用量是 11,000MB 中的 5400MB,而且 CPU 的 RAM 也非常大
当我在本地计算机上运行 21 次迭代时,每次迭代用 0.09 小时,第一代 i5 和 4GB RAM 执行所有迭代。但是,每当我在 docker 内使用 ssh 运行它时,GPU 和 CPU 都会一次又一次地发生问题。
请记住,问题发生在 docker 内部,计算机与 ssh 连接,并且 ssh 也不会经常断开连接。
确切的数字
如果一个迭代需要 1.5 小时,那么问题会在两到三个迭代之后发生,如果单次迭代需要 0.06 小时,那么问题恰好在 25 次迭代中的 14 次之后发生
最佳答案
在 Docker 容器内执行操作
您可以尝试的第一件事是构建 Docker 镜像,然后通过指定 -ti
进入 Docker 容器内部。标志或 /bin/bash
docker run
中的参数命令。
克隆容器内的存储库,在构建镜像时,您还应该将训练数据从本地复制到 docker 内部。在那里进行培训和commit
这些更改使您无需在以后的运行中重复这些步骤,因为在您退出容器后,如果未提交,所有更改都会丢失。
您可以找到 docker commit here 的引用资料。 .
$ docker commit <container-id> <image-name:tag>
在训练过程中检查 VM 的 GPU 和 CPU 利用率,看看一切是否按预期工作。
在你的虚拟机上使用 Anaconda 环境
Anaconda 是一个很棒的包管理器。您可以安装 anaconda 并创建一个虚拟环境并在 virtual environment
中运行您的代码。 .
$ wget <url_of_anaconda.sh>
$ bash <path_to_sh>
$ source anaconda3/bin/activate or source anaconda2/bin/activate
$ conda create -n <env_name> python==2.7.*
$ conda activate <env_name>
通过 conda
安装所有依赖项(推荐)或 pip
.
运行你的代码。
Q1:在 Docker 中使用 Tensorflow 1.4 进行 GAN 训练在没有提示的情况下停止
尽管 Docker 在 Docker 内部提供了操作系统级别的虚拟化,但我们在运行一些在系统上轻松运行的进程时遇到了问题。因此,要调试问题,您应该进入图像内部并执行上述步骤以调试问题。
Q2:训练停止,但没有释放通过 SSH 连接连接到 VM 的内存
是的,这是我之前也遇到过的问题。释放内存的最佳方法是停止 Docker 容器。您可以找到更多资源分配选项here .
此外,早期版本的 TensorFlow 在正确分配和清除内存方面存在问题。您可以找到一些引用 here和 here .这些问题已在最新版本的 TensorFlow 中得到修复。
此外,检查 Nvidia 错误报告
第一步:安装Nvidia-utils
通过以下命令安装。您可以从 nvidia-smi 输出中找到驱动程序版本(问题中也提到了。)
$ sudo apt install nvidia-utils-<driver-version>
第 2 步:运行 nvidia-bug-report.sh
脚本
$ sudo /usr/bin/nvidia-bug-report.sh
日志文件将在您当前的工作目录中生成,名称为 nvidia-bug-report.log.gz
.此外,您可以通过 /var/log/nvidia-installer.log
访问安装程序日志。 .
您可以在以下链接中找到有关 Nvidia 日志的更多信息:
希望这可以帮助。
关于python-2.7 - 在 Docker 中使用 Tensorflow 1.4 进行 GAN 训练在没有提示且没有释放通过 SSH 连接连接到 VM 的情况下停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60904901/