c++ - 通过网络直接从另一台计算机的内存中读取文件

标签 c++ algorithm c++11 filesystems deep-learning

  1. 我正在进行一项涉及大约 800 GB 图像数据的大规模深度学习实验。
  2. 计算服务器上的可用空间只有 30 GB,无法扩展到 800 GB。
  3. 目前,我通过使用 Python 将我的数据分成 30 GB 的 block 来解决这个问题,然后使用 openssh 通过复制来处理它们。每次我需要另一个 block 时,我都会删除当前 block ,然后对下一个 block 重复该过程。对于 CNN 训练的几个 epoch,这个过程重复了数百次。
  4. 虽然我没有进行基准测试,但我担心这是否是一个非常主要的性能瓶颈,因为 CNN 训练本身需要数周时间才能处理这种规模的数据。重复复制可能会非常昂贵。
  5. 我从来没有机会面对这个问题,所以现在我在想,是否可以直接从我的存储服务器的内存中读取文件进行处理。

具体来说,我的问题是:

  • 是否可以直接从另一个系统的内存中读取文件,就好像这些文件在同一个系统上一样,而无需显式 scp ?
  • 什么样的 C++ 框架可以用来做类似的事情?
  • 在这种资源受限的情况下,专业程序员通常使用哪些技术?

我不是计算机科学专业的,这是我第一次面对这种以性能为中心的问题。因此,我几乎没有处理这种情况的实践经验。所以,有点启发或引用会很好。

最佳答案

这听起来可能有点粗鲁,但您需要意识到您无法在计算器上进行任何类型的现实世界机器学习

如果您的机器已使用 10 年或使用拨号互联网连接,则无法分析大数据。事实上,您的服务器当时有 30Gb 的可用硬盘空间,而您可以以低于 200 美元的价格轻松购买 1Tb,这意味着这里确实存在问题。

许多机器学习算法在收敛之前会多次迭代数据,因此任何需要多次下载/删除数据的解决方案都会(不切实际地)慢很多。即使假设有一个非常快速和稳定的 200 Mb/s 连接,您也需要几个小时才能下载全部数据。现在重复这甚至 100 次(NN 在 100 次迭代后收敛几乎是不可能的),你会看到你的情况有多糟糕。

这接近我的最后一句话 - 如果你想处理大数据,请升级你的机器以处理大数据

关于c++ - 通过网络直接从另一台计算机的内存中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611952/

相关文章:

C++循环链表删除,从下一个节点开始计数

c++ - 二叉树上的左右 BFS 遍历

java - Java中旅行商问题的蛮力算法

algorithm - 寻找一种算法以(伪)随机顺序吐出一系列数字

c++ - 为什么 std::to_string 的实现会创建一个 4 倍于类型大小的缓冲区?

c++ - QT项目无法编译,没有可用于构建的编译器

c++ - 如何在C++中调用execute命令行

algorithm - Perl 在计算阶乘 N 的递归实现中在哪里保存中间结果?

c++ - C++ 中的广义极值分布 (GEV)

c++ - 如何在 C++11 中访问 double 的 pair<pair<string,string>,double>