AI市场强化学习预置算法实践----使用强化学习训练智能体玩转Atari小游戏(2)
在上一篇实践教程中,我们结合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信息。智能体玩游戏的好坏程度,需要训练更长时间以及调参工作,这方面的“高阶”操作,我们以后再进行相关介绍。
- 点赞
- 收藏
- 关注作者
评论(0)