python-2.7 - 在 Docker 中使用 Tensorflow 1.4 进行 GAN 训练在没有提示且没有释放通过 SSH 连接连接到 VM 的情况下停止

标签 python-2.7 docker tensorflow ssh nvidia

项目详情

我正在运行名为 的基于 GAN 的研究论文的开源代码“研究基于生成对抗网络的语音去混响以实现稳健的语音识别”
源代码:here
依赖项包括:

  • Python 2.7
  • TensorFlow 1.4.0

  • 我在我的 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 也非常大

    nvidia-smi Output

    当我在本地计算机上运行 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 在正确分配和清除内存方面存在问题。您可以找到一些引用 herehere .这些问题已在最新版本的 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 日志的更多信息:

  • Nvidia Bug Report Reference 1
  • Nvidia Bug Report Reference 2
  • Log GPU load

  • 希望这可以帮助。

    关于python-2.7 - 在 Docker 中使用 Tensorflow 1.4 进行 GAN 训练在没有提示且没有释放通过 SSH 连接连接到 VM 的情况下停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60904901/

    相关文章:

    python - 信用卡验证练习中的 while 循环 - python2.7

    docker - Ansible将容器部署到本地镜像的远程位置

    python - 属性错误 : 'Namespace' object has no attribute 'epochs_per_eval'

    python - 如何在 TensorFlow 中沿某个维度选择张量的元素(不是切片)

    c - 使用 c_api.h 执行使用 tensorflow.contrib.resampler 的卡住 tensorflow 图

    python - 如何使用 Python 和 Selenium 定位表格中的元素?

    python-2.7 - 从 Spyder 运行 graphlab

    json - 将 ndb.Model 序列化为 JSON 的 App 引擎数据存储 to_dict 替代方案

    docker - 将主机指向具有静态域名的Docker容器

    docker - 恢复VM后无法连接到docker