使用HPC群集


11

在我的大学里,我们有一个HPC计算集群。我使用集群来训练分类器,依此类推。因此,通常,要将作业发送到集群(例如python scikit-learn脚本),我需要编写一个Bash脚本,其中包含(其中包括)一个命令qsub script.py

但是,我发现此过程非常令人沮丧。通常会发生的事情是,我在笔记本电脑上编写了python脚本,然后登录到服务器并更新了SVN信息库,因此我在此处获得了相同的python脚本。然后,我编写该Bash脚本或对其进行编辑,以便可以运行bash脚本。

如您所见,这确实令人沮丧,因为对于python脚本的每个小小的更新,我都需要执行许多步骤才能在计算集群中执行它。当然,当我不得不将数据放在服务器上并在服务器上使用数据集的路径时,任务会变得更加复杂。

我敢肯定,这里有很多人正在将计算集群用于其数据科学任务。我只想知道你们是如何管理将作业发送到集群的?


1
啊,部署的乐趣...通过分布式系统的乐趣而增强:)
logc 2014年

Answers:


5

请您的网格管理员将您的本地计算机添加为“提交主机”,然后安装SGE(我们假设您正在使用,实际上并没有说),这样您就可以qsub在计算机上使用了。

要么....

使用emacs,然后您可以通过emacs的“ tramp” ssh-connection工具在HPC上进行编辑,并在另一个emacs窗口中保持外壳打开。您没有说要使用哪种编辑器/操作系统。您甚至可以将emacs配置为在两个位置保存文件,因此您可以将其保存到本地计算机上以运行测试,而可以同时保存到HPC文件系统以进行较大的工作。


4

有许多解决方案可减轻将文件从本地计算机复制到群集中的计算节点的负担。一种简单的方法是使用一个接口,该接口允许对群集中的计算机进行多访问,例如clusterssh(cssh)。它允许您通过一组终端屏幕(每个ssh连接到集群中的另一台计算机)一次在多台计算机上键入命令。

由于您的集群似乎已qsub建立,因此您的问题可能与沿机器复制数据有关(而不是仅在每个节点中运行命令)。因此,为解决这一问题,您可以编写scp脚本,在集群中的每个节点之间来回复制(肯定可以通过SVN解决),或者可以设置NFS。这将允许对数据的简单透明访问,并且还减少了复制不必要数据的需要。

例如,您可以访问节点,将数据复制到该位置,然后只需通过网络通信远程使用数据。我不了解如何设置NFS,但是您已经可以访问它(以防您访问的计算机上的主文件夹相同)。然后,脚本和数据可以发送到一个地方,以后再从其他地方访问。这与SVN方法类似,但更透明/更直接。


4

您使用源版本库的方法是一种很好的方法,它实际上还允许您在集群上工作,然后将所有内容复制回去。

如果您发现自己在笔记本电脑上对Python脚本进行了较小的编辑,然后更新了集群上的SVN目录,为什么不直接在集群前端上工作,进行所有需要的较小的编辑,然后在一天结束时提交那里的所有内容并在笔记本电脑上更新?

您需要做的就是熟悉那里的环境(操作系统,编辑器等)或安装自己的环境(我通常在主目录中安装最新版本的VimTmux等)以及正确的dotfiles,以便于在那里。)

此外,如果大小允许,您可以对数据进行版本控制,甚至可以对中间结果进行版本控制。我的存储库通常包含代码,数据(原始和清洁的版本),文档和用于发布的纸张来源(乳胶)

最后,您可以编写作业提交脚本,以避免手动修改脚本。qsub接受来自stdin的脚本,也接受所有#$注释作为命令行参数。


3

根据问题的措辞,我假设您有一台本地计算机和一台远程计算机,在其中更新两个文件-Python脚本和Bash脚本。这两个文件均受SVN控制,并且两台机器都可以访问同一SVN服务器。

抱歉,我没有针对您的网格系统的任何建议,但让我列出一些我认为对任何部署都很重要的一般要点。

将生产更改限制为配置更改。您写道,您必须“使用服务器上数据集的路径”;在我看来,这就像您已将路径硬编码到Python脚本中一样。这不是一个好主意,因为您将需要在将脚本移动到的每台其他计算机中更改这些路径。如果将这些更改提交回SVN,则在本地计算机上,您将拥有远程路径,并且不停地...(如果不仅有路径,而且还包含密码,该怎么办?您不应该在SVN中拥有生产密码)服务器。)

因此,将路径和其他设置信息保留在.ini文件中,然后使用ConfigParser读取它,或者使用.json文件并使用json模块。在本地和远程保留文件的一个副本,都在同一路径下,并且都不受SVN控制,并且只需在Python脚本中保留该配置文件的路径(或者如果不能同时保留两者,则从命令行获取该文件)同一路径下的配置)。

保持配置尽可能小。任何配置都是应用程序的“活动部分”,并且任何系统越少具有活动部分,就越鲁棒。构成配置的一个很好的指标就是,每次移动代码时都必须对其进行编辑。不需要编辑的内容可以保留为代码中的常量。

使您的部署自动化。您可以通过本地计算机上的Bash脚本来完成此操作。请注意,您可以通过来在远程计算机上运行任何命令ssh。例如:

svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev

## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'

为此,您当然需要在本地计算机和远程计算机之间进行基于公共/专用密钥的无密码登录

如果您需要的还不止这些,可以考虑使用Python的Fabric或更高级的菜式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.