2013-05-25 34 views
2

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

我现在唯一的问题是,我有什么选择来(永久)保存不同服务器的仿真结果(无论是在模拟过程中的某些点还是在结束时)。理想情况下,我很乐意将它们写入安装在所有服务器上的单个永久性磁盘,但这是不可能的,因为我只能将它只读安装到多个服务器上。

将所有服务器的所有仿真结果收集回一个持久磁盘的最智能(也是最便宜的)方法是什么?

回答

5

谷歌云存储是永久存储在谷歌的云信息的好方法。您只需为项目启用该产品,即可直接从Compute Engine虚拟机访问云存储。如果使用'storage-rw'服务帐户创建实例,则访问更容易,因为您可以使用内置于虚拟机中的gsutil命令,而无需执行任何明确的授权。

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

关于GCE的服务帐户功能的更多背景可以在here找到。

0

如果你想留在谷歌的产品空间,google cloud storage

否则,我使用S3和boto对于这些类型的任务

0

作为更普遍的选择,你需要某种通用对象存储。正如前面的回复中指出的那样,Google提供了一个很好的包,但几乎所有的云提供商都提供了一些存储选项。确保您的云提供商具有两个密钥选项 - 一个卷存储区,一个类似于虚拟磁盘的数据存储区以及一个对象存储区,一个键/值存储区。两者都有自己的优点和缺点。卷存储是虚拟磁盘的替代品。如果您可以使用stdio,则可能会使用远程卷存储。问题是,它们通常具有磁盘结构。如果你想要更多的东西,你需要一个数据库。对象存储是磁盘和数据库之间的“中间地带”。它速度快,半结构化。

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

4

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

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

使用NFS优于GCS的主要优势在于NFS提供了熟悉的文件系统语义,如果您使用的第三方软件希望从文件系统读取文件,这可以提供帮助。定期将文件从GCS同步到本地存储非常容易,但确实需要在主机上运行额外的代理。设置NFS的缺点是你可能需要在主机之间同步UID,NFS可能是一个安全漏洞(我只会在我的私有网络上暴露NFS,而不是在10/8以外的任何地方),而且它需要在客户端和服务器上安装额外的软件包来设置共享。此外,NFS只会像托管机一样可靠,而像GCS或S3这样的对象存储将通过冗余服务器实现,甚至可能实现地理多样性。

+0

非常感谢这个答案。你知道哪种解决方案读取和写入速度更快:远程NFS共享或GCS? – naeger

相关问题