通过 Keras 使用网络中其他机器的 GPU

数据挖掘 神经网络 喀拉斯 训练 显卡
2022-02-19 12:57:06

我的情况如下:

  • 我有一台运行Ubuntu 18.04的相当便宜的笔记本电脑,不幸的是它不够强大(旧的、廉价的 GPU)来训练深度学习模型。我在A市。
  • 我父亲(位于 B 市)有两台计算机(配备强大的 GPU),两台计算机都运行Windows 10 专业版,理论上我可以在夜间使用。我可以通过 VPN 连接到网络,并且对两台机器都有 SSH root 访问权限。

我现在正在寻找一个 Keras 设置,它允许我从本地机器上使用远程 GPU 训练神经网络。理想情况下,我会有一个 Jupyter 笔记本,它的所有逻辑都在我的计算机上运行,​​并且可以以某种方式连接到远程机器上运行的瘦客户端(可能向 CNTK 公开一些接口)。我宁愿让 Windows 机器尽可能地笨拙,并且理想情况下只使用它们的 GPU(当然还有一些本地缓存)。此外,我更愿意在远程机器上坚持使用 Windows,而不必使用 Linux 发行版设置一些双引导。不过,启用 Linux 子系统会很好。

关于如何解决我的问题的任何想法?

1个回答

我不确定您的想象如何,但您描述它的方式是不可能的。您不能在本地和远程执行一些计算,即使您可以设置它,由于延迟也会效率低下。

很多人(包括我自己)都有类似的情况,我们处理它的方式是远程执行所有事情。即你的数据、代码和笔记本都在远程机器上,从那里运行它们。但是,您可以从自己的 PC 访问这些内容。例如,您可能有一个在您自己的浏览器上运行的笔记本,它实际上在远程机器上执行它的命令(把它想象成 google colab 或 kaggle 笔记本)。


如何设置

首先,不需要创建双引导 linux。只有当您觉得自己比 Windows 更熟悉 Linux 时,才应该这样做。你需要做的是:

  1. 安装所有必要的 NVIDIA 工具,以便您可以在 GPU 上运行 keras。这些包括安装 (a) 正确的显卡驱动程序,(b) CUDA 和 (c) cuDNN
  2. 设置你的 python 生态系统,它需要有所有必要的库(jupyter、tenrosflow、keras 等)。我建议一个虚拟环境。此时,您应该确保 keras 在远程机器上的 GPU 上正常运行。
  3. 设置一个 ssh 连接,将发送到远程机器的端口 8888 的所有内容转发到您自己机器上您选择的端口(例如 9999) ssh -N -f -L localhost:8888:localhost:9999 username@remote_hostname
  4. 通过 ssh 连接到您的远程计算机并运行jupyter notebook(我更喜欢在后台或屏幕中运行它,这样我就不必让终端始终打开)。记下它输出到屏幕的令牌,因为它不会自动让您登录。
  5. 打开浏览器并输入localhost:9999. 您需要在此处添加令牌以进行身份​​验证。现在你正在使用一个实际在你的远程机器上运行的笔记本!

此外,您可以设置其他工具来让您的生活更轻松。例如,我有一个用于更轻松地传输数据的 FTP 客户端,并设置了 PyCharm 以使用远程解释器(即执行我在远程机器上编写的代码)。