1

我的实验室刚刚获得了 Microsoft Azure 的赞助,我正在探索如何利用它。我是工业级云服务的新手,对大量的术语和概念感到非常困惑。简而言之,这是我的场景:

  1. 我想用多个数据集试验相同的算法,也就是数据并行。
  2. 该算法在 Linux (ubuntu 16.04) 上使用 C++ 实现。我尽力使用静态链接,但仍然依赖于一些动态库。然而,这些动态库可以通过 apt 轻松安装。
  3. 每个数据集都是结构化的,意味着数据(图像、其他文件......)是用文件夹组织的。

想法系统配置将是一堆相同的虚拟机和一个共享文件系统。然后我可以从脚本或其他东西中使用“qsub”提交我的工作。有没有办法在 Azure 上做到这一点?

我调查了批处理服务,但在创建计算节点后无法安装依赖项。我也遇到了存储问题。到目前为止,我只看到了将批处理与 Blob 存储结合使用的示例,其中是非结构化的。

那么 Azure 中是否还有其他服务可以满足我的要求?

4

2 回答 2

1

我根据以下文章以某种方式弄清楚了自己:https ://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-classic-hpcpack-cluster/ 。这是我的解决方案:

  1. 使用 Windows 头节点和一组 Linux 计算节点创建 HPC 包。以下是 Marketplace 中几个有用的模板。

  2. 从头节点,我们可以在 Linux 计算节点中执行命令,或者在 HPC 集群管理器中,或者在 PowerShell 中使用“clusrun”。我们可以通过 apt-get 轻松安装计算节点的依赖项。

  3. 在其中一个存储帐户中创建文件共享。这可以由集群内的所有机器安装。

  4. 这里的一个小问题是,由于某种加密原因,您无法在 Azure之外的 Linux 机器上挂载文件共享。我脑子里有两种解决方案:(1) 将文件共享挂载到 Windows 头节点,然后通过 FTP 或 SSH 从那里创建文件共享。(2) 创建另一个 Linux VM(作为桥接器),在该 VM 上挂载文件共享并使用“scp”从外部与其通信。由于我对Windows不熟悉,所以我采用了后来的解决方案。

  5. 对于可执行文件,我只是上传了在本地机器上编译的二进制可执行文件。大多数依赖项都是静态链接的。但是,仍然有一些动态对象。我将这些动态对象上传到 Azure 并在计算节点上执行程序时设置 LD_LIBRARY_PATH。

  6. 作业提交在 Windows 头节点中完成。为了使其更灵活,我编写了一个 python 脚本,它编写 XML 文件。作业管理器可以加载这些 XML 文件来创建作业。以下是一些说明:https ://msdn.microsoft.com/en-us/library/hh560266(v=vs.85).aspx

我相信 Azure Batch Service 应该有更多优雅的解决方案,但到目前为止,我的小型集群使用 HPC Pack 运行得很好。希望这篇文章可以帮助某人。

于 2016-10-04T05:05:22.020 回答
0

Azure 文件可以为您的 Ubuntu 机器提供共享文件解决方案 - 详细信息如下:

https://azure.microsoft.com/en-us/documentation/articles/storage-how-to-use-files-linux/

同样,根据您的要求,您可以通过 Blob 存储通过使用容器创建伪结构,然后在 Blob 的命名策略中使用“/”。

对于 David 的观点,虽然 Batch 通常用于此类工作负载,但它可能不适合您的解决方案。VM 规模集(https://azure.microsoft.com/en-us/documentation/articles/virtual-machine-scale-sets-overview/)将允许您通过负载或计划扩展您的计算容量,具体取决于您的工作量行为。

于 2016-10-03T08:41:50.303 回答