[ray入门] Ray控制任务资源使用

Ray的资源控制非常细粒度,你可以控制某个函数function的资源使用,控制力非常的强。

集群资源

集群资源大致可以分为4类,cpu,gpu,内存和自定义资源:

  • num_cpus(int) - CPU数量,默认为系统CPU核数。
  • num_gpus(int) - GPU数量,默认为系统GPU数量。
  • object_store_memory(bytes) - 对象存储可以使用的内存大小。
  • resources(json) - 自定义资源设置。

resources参数允许用户自定义一种资源名字及资源的大小,形式如{"custom_parallelism":16}。通过这种方式,Ray提供了自由的资源限制,不在限定于cpu,gpu,memory。

非Cluster模式

代码初始化时,指定参数

# 设置cpu8个,gpu1个,自定义资源Resource1共4个,自定义资源Resource2共16个
ray.init(num_cpus=8, num_gpus=1, resources={'Resource1': 4, 'Resource2': 16})
Cluster模式

启动ray node时,指定CLI参数:

# 设置cpu8个,gpu1个,自定义资源custom_parallelism共16个
ray start --num-cpus=8 --num_gpus=1 --resources='{"custom_parallelism":16}'

通过dashboard我们可以非常容易的看到集群各节点资源使用情况

resource.png

设置任务参数

在@ray.remote注解上设置需要的资源

# -*- coding: utf-8 -*-

import ray

# 设置需要的cpu、gpu数量
@ray.remote(num_cpus=2, num_gpus=2)
def func1():
    return 1

# 按百分比设置需要的cpu、gpu资源
@ray.remote(num_cpus=0.5)
def func2():
    return 1

# 设置需要的自定义资源
@ray.remote(resources={'custom_parallelism': 1})
def func3():
    return 1

if __name__ == '__main__':
    # 设置ray的num_cpus、num_gpus以及自定义资源
    ray.init(num_cpus=8, num_gpus=8, resources={'custom_parallelism': 16})
    res1 = func1.remote()
    res2 = func2.remote()
    res3 = func3.remote()
    print(ray.get(res1))
    print(ray.get(res2))
    print(ray.get(res3))

你可能感兴趣的:([ray入门] Ray控制任务资源使用)