Ray:全民分布式计算,第 1 部分

从本地 PC 及其他电脑上的单核到多核雷后:全民分布式计算,第 1 部分首先出现在《迈向数据科学》上。

来源:走向数据科学

这是关于使用 Ray 进行分布式计算的两部分系列中的第一部分。本部分展示如何在本地 PC 上使用 Ray,第 2 部分展示如何将 Ray 扩展到云中的多服务器集群。

购买了一台新的 16 核笔记本电脑或台式机,您渴望通过一些繁重的计算来测试其功能。

你是一名 Python 程序员,虽然还不是专家,所以你打开你最喜欢的 LLM 并问它这样的问题。

“我想计算给定输入范围内素数的数量。请为此提供一些 Python 代码。”

几秒钟后,LLM 会为您提供一些代码。您可能会通过简短的来回调整它,最终您会得到如下所示的结果:

导入数学、时间、操作系统

def is_prime(n: int) -> bool:

如果 n < 2:返回 False

如果 n == 2:返回 True

如果 n % 2 == 0:返回 False

r = int(math.isqrt(n)) + 1对于范围 (3, r, 2) 内的 i:如果 n % i == 0:返回错误返回真def count_primes(a: int, b: int) -> int:c = 0对于范围 (a, b) 中的 n:如果 is_prime(n):c+=1返回c如果 __name__ == "__main__":A、B = 10_000_000、20_000_000Total_cpus = os.cpu_count() 或 1# 开始“厚实”;我们稍后可以扫一下块 = 最大(4, 总 CPU 数 * 2)步骤 = (B - A) // 块print(f"CPUs~{total_cpus}, chunks={chunks}")t0 = 时间.time()结果=[]对于范围内的 i(块):s = A + i * 步骤e = s + 步骤 如果 i < chunks - 1 否则 B结果.append(count_primes(s, e))总计 = 总和(结果)print(f"total={total}, time={time.time() - t0:.2f}s")您运行该程序,它运行得很好。唯一的问题是运行需要相当多的时间,可能是三十到六十秒,具体取决于输入范围的大小。这可能是不可接受的。你现在做什么?您有多种选择,其中最常见的三种可能是:– 使用线程或多处理并行化代码雷是什么?使用射线摘要