我希望这是解决此类问题的正确方法。
我面临一个需要处理的大型 Python 任务。在我的计算机上运行它大约需要 60 小时。此任务由 CPU 而不是 GPU 运行。
这些c5
实例似乎是为 CPU 密集型任务而设计的,所以我的第一个实例是c5.4xlarge
Windows 实例。在实例上运行 Python 脚本后,我惊讶地发现它的速度有多慢。它每执行一批任务所花的时间与我的笔记本电脑差不多。我终止了它,并尝试了一个m5.4xlarge
实例,结果相同。
我做错了什么?这些实例的运行速度应该比我的笔记本电脑及其i7-8550U
CPU 快 10 倍。
答案1
有许多方面需要考虑:
您的应用程序是否可以利用多核 CPU? 更大的 EC2 实例会为您提供更多 CPU 核心,但通常不会提供更快的单核性能。确保您的应用程序可以执行并行处理充分利用所有可用的 CPU 核心。
如果不能运行并行处理,看看是否可以将数据拆分成多个独立批次并并行运行应用程序的多个副本,每个副本都使用一个核心。
你在哪里存储您的数据? 如果他们EBS 卷相比之下,它可能相当慢实例本地存储(又名临时存储)。并非所有 EC2 实例都提供实例存储 - 检查Amazon EC2 实例类型表格中的详细信息。将数据复制到实例存储之前进行处理,以提高数据访问性能。
另一个选择是使用存储优化实例和预配置 IOPS EBS 卷但这通常非常昂贵。
如果你的应用做了很多联网在计算过程中,请确保你在这方面也没有受到限制。选择一个具有高网络性能。
对于这样的实验,你可能会发现使用Spot 实例这可以为您节省高达 90% 的运行成本(或者以相同的价格可以为您提供更大的实例)。但是请注意一些权衡,主要是如果对特定实例类型的需求增加,实例可能会随时终止。
希望有帮助:)
答案2
如果您正在读取/写入大量文件到磁盘,难怪 AWS 中的脚本速度较慢,因为那里的 io 操作通常依赖于网络连接(搜索 EBS)。
您可以尝试 i3 实例类型,它们提供快速的 SSD 磁盘。但更正确的方法是调查您的案例中的瓶颈是什么:cpu、ram 或 io,然后调整脚本来克服它,这将节省您的金钱和时间。