2

我正在尝试构建在几个高 CPU 无盘实例上运行的神经网络模拟。我计划使用永久性磁盘来存储我的模拟代码和训练数据,并将它们安装在所有服务器实例上。它基本上是一种 map reduce 类型的任务(多个节点处理相同的训练数据,所有节点的结果需要收集到一个单独的结果文件中)。

我现在唯一的问题是,我有哪些选择(永久)保存不同服务器的模拟结果(在模拟期间的某些时间点或最后一次)。理想情况下,我希望将它们写入安装在所有服务器上的单个永久磁盘,但这是不可能的,因为我只能将它以只读方式安装到多个服务器。

将所有服务器的所有模拟结果收集回一个永久磁盘的最聪明(也是最便宜)的方法是什么?

4

4 回答 4

5

谷歌云存储是在谷歌云中永久存储信息的好方法。您需要做的就是为您的项目启用该产品,然后您就可以直接从您的 Compute Engine 虚拟机访问 Cloud Storage。如果您使用“storage-rw”服务帐户创建实例,则访问会更加容易,因为您可以使用虚拟机中内置的 gsutil 命令,而无需进行任何显式授权。

更具体地说,请转到Google Cloud Console,选择您要使用 Compute Engine 和 Cloud Storage 的项目,并确保这两项服务都已启用。然后在创建虚拟机时使用“storage-rw”服务帐户范围。如果您使用 gcutil 创建 VM,只需添加 --storage_account_scope=storage-rw (如果您使用 Cloud Console 启动 VM,还有一种直观的方法可以设置服务帐户范围)。虚拟机启动并运行后,您可以自由使用 gsutil 命令,而无需担心执行交互式登录或 OAuth 步骤。您还可以通过将任何所需的 gsutil 请求集成到您的应用程序中来编写您的使用脚本(gsutil 也可以在启动脚本中工作)。

可以在此处找到有关 GCE 服务帐户功能的更多背景信息。

于 2013-05-26T00:23:13.943 回答
4

Marc 的答案绝对是长期存储结果的最佳选择。根据您的 I/O 和可靠性需求,您还可以将一台服务器设置为 NFS 服务器,并使用它将卷远程安装在其他节点上。

通常,NFS 服务器将是您的“主节点”,它可以提供二进制文件和配置。工作人员会定期重新扫描从主服务器导出的目录以获取新的二进制文件或配置。如果您不需要大量磁盘 I/O(您提到了神经模拟,所以我假设数据集适合内存,并且您只输出最终结果),只需将输出写入主节点上的 NFS 目录,然后将主节点备份结果到 GCS 之类的某个地方。

使用 NFS 优于 GCS 的主要优点是 NFS 提供了熟悉的文件系统语义,如果您使用期望从文件系统读取文件的第三方软件,这会有所帮助。定期将文件从 GCS 同步到本地存储非常容易,但确实需要在主机上运行额外的代理。

设置 NFS 的缺点是您可能需要在主机之间同步 UID,NFS 可能是一个安全漏洞,(我只会在我的私有网络上公开 NFS,而不是在 10/8 以外的任何地方)并且它需要安装客户端和服务器上的附加软件包来设置共享。此外,NFS 将仅与主机一样可靠,而像 GCS 或 S3 这样的对象存储将通过冗余服务器甚至可能的地理多样性来实现。

于 2013-05-28T18:05:04.200 回答
0

如果你想留在谷歌产品空间,谷歌云存储怎么样?

否则,我将 S3 和boto用于此类任务

于 2013-05-25T23:59:38.900 回答
0

作为更通用的选项,您要求某种通用对象存储。正如之前的回复所指出的,谷歌提供了一个不错的软件包,但几乎所有的云提供商都提供了一些存储选项。确保您的云提供商有两个关键选项——卷存储,类似于虚拟磁盘的数据存储,以及对象存储,键/值存储。两者都有自己的长处和短处。卷存储是虚拟磁盘的直接替代品。如果您可以使用 stdio,您可能会使用远程卷存储。问题是,它们通常具有磁盘的结构。如果你想要更多的东西,你需要一个数据库。对象存储是磁盘和数据库之间的“中间地带”。它速度很快,而且是半结构化的。

我自己是一个 OpenStack 用户——首先,因为它确实提供了两个存储系列,其次,它受到各种供应商的支持,因此,如果您决定从供应商 A 转移到供应商 B,您的代码可以保持不变。您甚至可以在您自己的机器上运行它的副本(访问 www.openstack.org) 但是请注意,OpenStack 确实喜欢内存。您不会在 4GB 笔记本电脑上运行私有云!考虑两台 16GB 的机器。

于 2013-05-26T01:28:02.640 回答