本科生在哪里可以在预算内找到核心?

计算科学 高性能计算
2021-12-06 19:26:28

在我的神经网络研究中,我可能已经达到了一个点,如果没有大量的金融投资,我就无法继续下去。

我正在使用神经进化来进化 EMNIST 数据集上的网络。它是令人尴尬的并行(100 个人 * 116,323 条记录)。该程序无法使用 GPU 加速。我努力了。这留下了 OpenMP,令我惊讶的是,它提供了几乎等于核心数量的加速。然而,即使是一个 72 核的虚拟机,预计也需要 34 天(最少 200 次迭代),并且花费超过 2,400 美元。

MPI 在我对程序进行的更改列表中,但是(假设无缝并行化)所需的内核和时间不会改变。虚拟机和核心数量的几种组合(亚马逊、Azure、谷歌)显示成本估计为对于 1 个实验。假设所有设置都是正确的,我不需要进行进一步的实验。1,500

我是一名大二的本科生。我的大学没有计算集群,也没有任何访问权限。他们拥有的最好的是 8 核工作站(运行这项工作需要一年的时间)。我没有 1,500 美元可用。是否有任何资源(赞助商、赠款、实验室等)可以帮助我获得所需的核心(云或“家庭超级计算机”)?

1个回答

你需要资金,你需要一个更好的算法,一个更好的实现,或者你需要改变你的问题。要获得资金,您需要与您的顾问合作。这可能是关于使用赠款或获得XSEDE 分配的赠款。如果您的顾问两者都没有,即使您喜欢他们的研究,与他们合作也可能不是一个好的选择:科学需要资金。

如果你想让它更便宜,那就考虑一个不同的算法。即使它做了很多分支和类似的事情,也必须有某种方法在某些部分利用线性代数运算来利用 GPU(或 Xeon Phi)加速。也许您需要预先计算一些值,或者需要一种完全不同的方法。只有你(和你的顾问)会知道。事实上,这种算法开发是研究的全部目的。你的顾问可能给你这个项目,因为没有简单的计算机可以解决这个问题。您的目标不是找到一台更大的计算机,而是找出如何让您的计算机解决这个问题(或者至少找出如何更好地解决它)。没有在线教程或任何东西可以帮助您:这是真正的研究。

您还需要查看您的实现。如果您使用 Python 等高级语言进行循环和分支,这可能是问题所在。您要么需要重新编写要矢量化的代码以做得更好,要么要获得“生产质量”的速度,您需要使用性能语言以非分配格式重新编写它(生成严格类型的和过程间优化的编译代码),如 C++ 或 Julia。不难找到非向量化的 Python 代码,只需通过更好的实现和小心内存使用就可以使速度提高 1000 倍(即使向量化在内存使用方面也很糟糕,所以仍然有很多需要优化的地方)。

最后,如果这是一个众所周知的高度研究领域,它不能做得更好,并且您无法获得资金/分配来运行算法,请选择一个不同的项目。有时问题目前是不可能的。我非常怀疑你的顾问会给你一个这个领域的问题,尽管你是一名本科生。

但是,鉴于您是一名年轻的本科生,我会双重/三重/四重检查您实际上是否正确,甚至在责怪其他人之前甚至需要这种计算能力。令人尴尬的并行(100 个人 * 116,323 条记录)非常小,即使在没有 GPU 的台式计算机上训练也是如此。你真的应该确保一切都尽可能快(用几种不同的语言重写几次,对每个部分进行基准测试和分析,摆脱内部循环中的所有内存分配等),确保没有更好的算法选择,确保没有可以进行的集群分配,然后才应该考虑转移到更适合您当前访问计算能力的新项目。