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我们可以非常容易的看到集群各节点资源使用情况
设置任务参数
在@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))