我正在尝试构建一个在几个高CPU无盘实例上运行的神经网络模拟。我打算使用持久性磁盘来存储我的模拟代码和训练数据,并将它们安装在所有服务器实例上。它基本上是一种减少任务的地图(几个节点处理相同的训练数据,所有节点的结果需要收集到一个结果文件)。
我现在唯一的问题是,我可以选择(永久地)保存不同服务器的模拟结果(在模拟期间的某些点或最后一次)。理想情况下,我很乐意将它们写入安装在所有服务器上的单个永久磁盘,但这是不可能的,因为我只能将它只读装载到多个服务器上。
将所有服务器的所有模拟结果收集回一个永久磁盘的最聪明(也是最便宜)的方法是什么?
答案 0 :(得分:5)
Google云端存储是将信息永久存储在Google Cloud中的绝佳方式。您需要做的就是为您的项目启用该产品,并且您将能够直接从Compute Engine虚拟机访问云存储。如果使用“storage-rw”服务帐户创建实例,则访问更加容易,因为您可以使用虚拟机中内置的gsutil命令,而无需进行任何明确授权。
更具体地说,转到Google Cloud Console,选择您要使用计算引擎和云存储的项目,并确保这两项服务都已启用。然后在创建虚拟机时使用“storage-rw”服务帐户范围。如果使用gcutil创建VM,只需添加--storage_account_scope = storage-rw(如果您使用Cloud Console启动VM,还可以通过直观的方式设置服务帐户范围)。虚拟机启动并运行后,您可以自由使用gsutil命令,而无需担心执行交互式登录或OAuth步骤。您还可以通过将任何所需的gsutil请求集成到应用程序中来编写脚本(gsutil也可以在启动脚本中使用)。
可以找到有关GCE服务帐户功能的更多背景信息here。
答案 1 :(得分:4)
Marc的回答绝对是长期存储结果的最佳选择。根据您的I / O和可靠性需求,您还可以将一台服务器设置为NFS服务器,并使用它在其他节点上远程安装卷。
通常,NFS服务器将是您的“主节点”,它可以同时提供二进制文件和配置。工作人员会定期重新扫描从主服务器导出的目录,以获取新的二进制文件或配置。如果你不需要大量的磁盘I / O(你提到了神经模拟,所以我假设数据集适合内存,而你只输出最终结果),只需简单地将输出写入主节点上的NFS目录,然后将主节点备份结果发送到某些地方,如GCS。
使用NFS而非GCS的主要优点是NFS提供了熟悉的文件系统语义,如果您正在使用期望从文件系统读取文件的第三方软件,这可能会有所帮助。定期将文件从GCS同步到本地存储非常容易,但需要在主机上运行额外的代理。
设置NFS的缺点是你可能需要在主机之间同步UID,NFS可能是一个安全漏洞,(我只在我的专用网络上暴露NFS,而不是在10/8之外的任何东西)和它将需要在客户端和服务器上安装其他软件包以设置共享。此外,NFS只会像托管机一样可靠,而像GCS或S3这样的对象存储将使用冗余服务器实现,甚至可能实现地理多样性。
答案 2 :(得分:0)
如果你想留在谷歌产品领域,google cloud storage怎么样?
否则,我已经使用S3和boto来完成这些任务
答案 3 :(得分:0)
作为一个更通用的选项,您需要某种通用对象存储。谷歌,如之前的回复中所述,制作了一个很好的软件包,但几乎所有云提供商都提供了一些存储选项。确保您的云提供商具有两个关键选项 - 卷存储,类似于虚拟磁盘的数据存储,以及对象存储,键/值存储。两者都有自己的优点和缺点。卷存储是虚拟磁盘的直接替换。如果您可以使用stdio,则可以使用远程卷存储。问题是,它们通常具有磁盘结构。如果你想要的不仅仅是那个,你需要一个数据库。对象存储是磁盘和数据库之间的“中间地带”。它快速,半结构化。
我自己就是OpenStack用户 - 首先,因为它确实提供了两个存储系列,其次,它得到了各种供应商的支持,因此,如果您决定从供应商A转移到供应商B,您的代码可以维持不变。您甚至可以在自己的机器上运行它的副本(请访问www.openstack.org)但是请注意,OpenStack确实喜欢内存。你不打算在4GB笔记本电脑上运行你的私有云!考虑两台16GB机器。