我们很高兴宣布发布Ray的0.3版本,本次发布主要包括distributed actor handles 和Ray.tune——一个新的超参搜索库,还包括修复一系列bug和提高稳定性。
为了更新到最新版本,运行:
pip install -U ray
本版本增加了Ray.tune,这是一个分布式超参数评估工具,用于强化学习和深度学习等训练时间较长的任务,他目前包括以下功能:
Ray.tune 提供用于深度学习和其他计算密集型任务的python api,下面是例子:
from ray.tune import register_trainable, grid_search, run_experiments
def my_func(config, reporter):
import time, numpy as np
i = 0
while True:
reporter(timesteps_total=i, mean_accuracy=i ** config['alpha'])
i += config['beta']
time.sleep(0.01)
register_trainable('my_func', my_func)
run_experiments({
'my_experiment': {
'run': 'my_func',
'resources': {'cpu': 1, 'gpu': 0},
'stop': {'mean_accuracy': 100},
'config': {
'alpha': grid_search([0.2, 0.4, 0.6]),
'beta': grid_search([1, 2]),
},
}
})
可以使用TensorBoard和rllab的VisKit等工具实时显示正在运行的结果
(或者可以直接从驱动程序节点读取JSON格式的日志):
查看文档和代码。
下面的例子可以用Ray.tune来试验RLlib
cd ray/python/ray/rllib
python train.py -f tuned_examples/cartpole-grid-search-example.yaml
该tuned_examples目录还包含用于诸如Pong和Humanoid之类的常见基准测试任务的预先调整的超参数配置。查看 RLlib文档。
优秀的强化学习库应该与多个深度学习框架一起工作。作为迈向这一目标的一步,0.3增加了对RLlib中A3C的PyTorch模型的支持。你可以用下面的A3C配置来试试这个。
cd ray/python/ray/rllib
./train.py --run=A3C \
--env=PongDeterministic-v4 \
--config='{"use_pytorch": true, "num_workers": 8, "use_lstm": false, "model": {"grayscale": true, "zero_mean": false, "dim": 80, "channel_major": true}}'
Ray 0.3添加了对分布式actor操作符的支持,也就是说,可以让多个调用者在同一个actor上调用方法。Actor的创造者可以将actore手柄作为参数传递给其他任务或其他actor方法。下面是一个例子,其中驱动程序创建一个actor来记录消息,并将actor handle传递给其他任务:
import ray
ray.init()
@ray.remote
class Logger(object):
def __init__(self):
self.logs = []
def log(self, log_msg):
self.logs.append(log_msg)
def read_logs(self):
return self.logs
@ray.remote
def task(logger, task_index):
# Do some work.
logged = logger.log.remote('Task {} is done'.format(task_index))
# Create an actor and get a handle to it.
logger = Logger.remote()
# Pass the actor handle to some tasks.
tasks = [task.remote(logger, i) for i in range(10)]
# Wait for the tasks to finish.
ray.get(tasks)
# Get the logs from the tasks.
print(ray.get(logger.read_logs.remote()))
这个特性仍然被认为是实验性的,但是我们已经发现了分布式的actor 参数对于实现参数服务器和 流式MapReduce应用程序很有用。