AI市场强化学习预置算法实践----使用强化学习训练智能体玩转Atari小游戏(2)

举报
灰灰爱喝粥 发表于 2020/09/12 18:33:02 2020/09/12
【摘要】 在上一篇实践教程中,结合ModelArts平台文档最佳实践,使用AI市场的强化学习预置算法,完成了玩Atari小游戏Breakout的智能体的训练。在完成在线服务部署之后,我们在页面只能进行单步推理,这并不是我们希望的”玩游戏“过程。对于不会编写相应程序的小伙伴来说,完成了训练却都不知道,自己到底训练了个啥?莫要慌张,下面,我们教大家一个不需要写复杂代码就可以看智能体玩游戏的过程,有图有真相...

在上一篇实践教程中,我们结合ModelArts平台的最佳实践文档,使用AI市场的强化学习预置算法,完成了玩Atari小游戏Breakout的智能体的训练。训练好的模型及配置文件在自己的OBS文件夹内,具体要怎么“欣赏”我们训练的智能体玩游戏呢?

实际上,这是一个推理并可视化的过程。按照最佳实践文档教程,我们可以将训练好的作业导入模型并部署为在线服务,就可以进行相应的推理验证,但是我们在页面只能进行单步推理,这并不是我们希望的”玩游戏“过程。

对于不会编写相应程序的小伙伴来说,完成了训练却都不知道,自己到底训练了个啥?莫要慌张,下面,我们教大家一个不需要写复杂代码就可以看智能体玩游戏的过程,有图有真相。

首先,我们需要创建一个notebook的开发环境,在”工作环境“选项,选择”TF-2.1.0&Pytorch-1.4.0-python3.6“,如下图所示,其他选择默认或者根据自身实际情况选择即可。

在notebook环境创建好了之后,我们需要将上一个教程中训练模型部署成在线推理服务。

关于部署在线推理的过程,提供两种不同的方式:一种是手动在网页页面进行操作,包括模型导入和部署服务两步,操作简单;另一种是在notebook开发环境,调用Marl库SDK,调用简单,衔接推理过程,简洁方便,推荐第二种方式。

(1)网页交互方式部署在线服务

网页交互方式部署在线服务的过程,大家可以参考ModelArts的使用教程,或是参考强化学习训练内置环境最佳实例相关过程,链接如下:

https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0033.html


在线服务部署完成之后,确保其是正常运行状态。然后,在我们创建的notebook环境中,新建一个运行脚本,运行的kernel选择“Marl-0.0.1”,如下图所示。

在notebook中,调用Marl SDK,输入具体代码如下所示。

from marl.inference import CloudPredictor

inference_configs = {}
inference_configs["algorithm"] = 'ppo'  # 与训练模型时使用的算法保持一致
inference_configs["server_name"] = 'service-name'  # 在部署在线服务时,设置的在线服务名称

predictor = CloudPredictor(inference_configs)
predictor.restart_server(inference_configs["server_name"])

(2)notebook调用SDK方式部署在线服务

首先,在notebook环境中新建一个运行脚本,运行的kernel选择“Marl-0.0.1”,如下图所示。

在配置相关参数前,有两个地方需要明确的内容:一个是查看并复制训练任务的输出路径信息;另一个是修改训练保存的文件中config.json文件。

在训练任务的页面,查看设置的模型输出路径信息,如下图所示。

按照训练输出的路径,在OBS中找到config.json文件,下载config.json文件到本地进行修改

打开config.json文件,将其中runtime参数按照下图所示方式修改。

将修改好的config.json文件重新上传至OBS中,覆盖原来的文件。

上述准备工作完成后,接着,通过调用SDK方式,部署在线服务,只需要配置一些参数,即可轻松完成。示例代码如下所示:

from marl.inference import CloudPredictor

inference_configs = {}

inference_configs["model_name"] = 'rl-example'  # 设置模型导入的名字
inference_configs["model_version"] = '0.0.1'  # 设置模型导入版本信息
inference_configs["source_location"] = '/bucket_name/***/***/'  # 启动训练任务时设置的训练输出路径信息(上述查询过的)
inference_configs["specification"] = "2cpu"  # 通过SDK方式,只能设置cpu规格(所以需要修改config文件的)
inference_configs["instance_count"] = "1"
inference_configs["service_name"] = 'rl-example'  # 设置在线推理服务的名称
inference_configs["algorithm"] = 'ppo'  # 与训练模型时使用的算法保持一致

predictor = CloudPredictor(inference_configs)
predictor.create_server()


上述两种情况之后,准备阶段就完成了,下面就是真正的可视化过程了。在notebook中,添加如下代码:

from marl.utils import VisualizeAtari
%matplotlib inline

vis = VisualizeAtari(env="Breakout-v0")
for i in range(1000):
    action = predictor.predict(vis.state)
    vis.step(action)
    vis.show()
    if vis.done:
        break
vis.close()

可得到如下图所示的结果。

至此,我们就完成了对训练得到的智能体的推理可视化过程,其中Atari系列包含20+种类的不同游戏,更换不同的游戏,你所需要做的只需要修改预置算法中环境ID信息。智能体玩游戏的好坏程度,需要训练更长时间以及调参工作,这方面的“高阶”操作,我们以后再进行相关介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。