如何在Linux服务器上运行深度学习实验

写完代码后,您必须在拥有大量 RAM、CPU 和 GPU 资源的计算机上运行深度学习实验,通常是在云端的 Linux 服务器上。

最近,有人问我一个问题:

“你是如何运行深度学习实验的?”

这是一个很棒的实际问题,我喜欢回答。

在本文中,您将了解我在 Linux 上运行深度学习实验所使用的方法、命令和脚本。

阅读本文后,你将了解:

  • 如何设计建模实验并将模型保存到文件。
  • 如何运行单个 Python 实验脚本。
  • 如何通过 shell 脚本连续运行多个 Python 实验。

通过我新书《Python 深度学习》,开启您的项目,书中包含分步教程以及所有示例的Python 源代码文件。

让我们开始吧。

How to Run Deep Learning Experiments on a Linux Server

如何在Linux服务器上运行深度学习实验
照片作者:Patrik Nygren,部分权利保留。

1. Linux 服务器

我所有的建模代码都在我的工作站上编写,所有代码都在远程 Linux 服务器上运行。

目前,我倾向于在 EC2 上使用 Amazon Deep Learning AMI。有关为您的实验设置此服务器的帮助,请参阅以下文章:

2. 建模代码

我编写代码,使得每个 python 文件对应一个实验。

我主要处理大规模数据上的大型模型,例如图像字幕、文本摘要和机器翻译。

每个实验都会拟合一个模型,并将整个模型或仅权重保存到 HDF5 文件中,以便将来重复使用。

有关将模型保存到文件的更多信息,请参阅以下文章:

我试图准备一系列实验(通常是 10 个或更多)以一次性运行。我还试图将数据准备步骤分离到先运行的脚本中,并创建训练数据集的 pickled 版本,以便在可能的情况下加载和使用。

3. 运行实验

每个实验在训练期间可能会输出一些诊断信息,因此,每个脚本的输出都会重定向到一个特定于实验的日志文件中。我还重定向了标准错误,以防出现问题。

运行时,Python 解释器可能不会频繁刷新输出,特别是当系统负载很高时。我们可以使用 Python 解释器上的-u标志强制将输出刷新到日志中。

运行单个脚本(myscript.py)如下所示:

我可以创建一个“models”和“results”目录,并将模型文件和日志文件更新到这些目录中,以保持代码目录的整洁。

4. 运行批量实验

每个 Python 脚本都会按顺序运行。

会创建一个 shell 脚本,该脚本按顺序列出多个实验。例如:

此文件将保存为“run.sh”,放在代码文件相同的目录中,并在服务器上运行。

例如,如果所有代码和 run.sh 脚本都位于“ec2-user”主目录的“experiments”目录中,则脚本将按如下方式运行:

脚本作为后台进程运行,不易中断。我也会捕获此脚本的结果,以防万一。

您可以在本文中了解有关在 Linux 上运行脚本的更多信息:

就是这样。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

总结

在本文中,您了解了我在 Linux 上运行深度学习实验所使用的方法、命令和脚本。

具体来说,你学到了:

  • 如何设计建模实验并将模型保存到文件。
  • 如何运行单个 Python 实验脚本。
  • 如何通过 shell 脚本连续运行多个 Python 实验。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

6 条对《如何在 Linux 服务器上运行深度学习实验》的回复

  1. Elie Kawerk 2018 年 1 月 22 日上午 6:38 #

    嗨,Jason,

    感谢这篇文章!

    命令:“2>&1”的目的是什么?

    谢谢,
    Elie

    • Abhay katiyar 2018 年 1 月 23 日凌晨 1:07 #

      将 stderr 和 stdout 合并到 stdout 中

    • Jason Brownlee 2018 年 1 月 23 日上午 7:46 #

      不客气。

      好问题。它将标准错误“2”重定向到标准输出“1”,实际上是对标准输出“&1”的引用。

  2. nStar 2019 年 3 月 18 日晚上 8:26 #

    感谢分享此文。您对在 Linux 上运行深度学习实验的方法、命令和脚本进行了很好的解释。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。