使用 Microsoft Azure 作为计算集群

Use Microsoft Azure as a computing cluster

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

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

理想的系统配置是一堆相同的 VM 和一个共享文件系统。然后我可以通过脚本或其他方式使用 'qsub' 提交我的工作。有没有办法在 Azure 上执行此操作?

我调查了批处理服务,但在创建计算节点后安装依赖项时遇到问题。我在存储方面也遇到了麻烦。到目前为止,我只看到了将 Batch 与 Blob 存储一起使用的示例,并且是非结构化的。

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

A​​zure 文件可以为您的 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/) 允许您根据工作负载行为通过负载或计划来扩展计算容量。

我根据这篇文章以某种方式自己弄明白了: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. 这里的一个小故障是,出于某种加密原因,您无法在 Linux Azure 之外的机器上安装文件共享。我脑子里有两个解决方案:(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 上运行得很好。希望这个 post 可以帮助到一些人。