python分布式集群ray_Ray:为人工智能而生的分布式执行框架

许多人工智能算法在计算上都非常密集,并且显示出复杂的通信模式。为此许多研究人员将大部分时间花在构建定制系统上,以高效地在集群中分发代码。

然而,定制的系统通常是基于特定的单一算法或算法类。因此我们构建了Ray来帮助消除一堆冗余的工程任务,这些任务目前在每个新算法中反复出现。我们希望能够重用一些基本的基础元素来实现并高效地执行各种算法和应用程序。

现有代码的简单并行化

Ray允许通过最少的修改来远程执行Python函数。

使用常规的Python时,在函数未执行完毕之前,如果调用函数,那么会被阻塞。下面这个例子的执行时间为8秒:

def f(): time.sleep(1) # Calls to f executed serially. results = [] for _ in range(8):

result = f()

results.append(result)

对于Ray,当调用远程函数时会立即返回一个future(称之为对象IDs)。接着创建一个任务,然后调度它,并在集群的某个地方去执行。下面的例子只需要1秒即可完成。

@ray.remote def f(): time.sleep(1) # Tasks executed in parallel. results = [] for _ in range(8):

result = f.remote()

results.append(result)

results = ray.get(results)

注意,惟一的变化是将@ray.remote装饰器添加到了函数定义中,通过f.remote调用该函数,并且在对象IDs列表中调用ray.get(记住对象IDs是未来)&#

你可能感兴趣的:(python分布式集群ray)