openAi的universe是一个比较有名也比较有意思的以游戏为载体的AI研究平台 但是其对环境要求的苛刻性比我想象中的要严格 因而对踩到的雷加以记录:
1. 环境说明
系统:macOS 10.13.4
python环境:anaconda 3.6版本
安装前gym版本:0.10.5
2. 问题列举
a. pip 安装问题
一般快捷的安装方式是使用
pip install universe
直接安装 但是存在问题:第一 这样安装完之后是pip上的最新版本没有错 但是引用可能存在问题 第二 这样安装的universe在环境配置上和当前的gym和ppaquette-gym-super-mario这样的库就产生了问题 具体表现为:完美使用pip install安装universe的话会导致gym被强制会滚到0.7.4版本(以统一解决“No module name “gym.benchmarks””的问题) 但是ppaquette-gym-super-mario的环境要求gym>0.8.0 然后重新安装mario会再次把gym强制更新到0.10.5 如此反复循环
解决第二个问题时如果采用
pip uninstall gym
pip install gym==0.9.0(此处为大于0.8的版本号)
会导致universe版本要求报错 因为pip版本的universe又要求gym处于一个较低的版本 陷入死循环 除非弃用其中一个
解决办法是采用git clone+pip安装:
先采用git将openAI的主页上的项目clone下来:
git clone https://github.com/openai/universe.git
clone完成后进入对应目录下使用pip进行安装:
cd universe
pip install -e .
安装过程中建议魔法上网以确保安装成功率
b. 关于官方Guidance的几个说明
还有一点需要说明的是 universe的官方项目主页上的GuideBook是提示使用docker进行build然后加载docker 从而形成一个封闭的universe环境 好处在于docker的依赖性可以确保universe在docker内的有效运行(docker本身可以看成一种类似iso文件的镜像打包 包含了所需要的环境) 缺点在于你无法在全局环境中找到它 也就是使用
pip list
命令 你是无法看到universe的
官方的目标是要稳定运行universe并且将编程环境限制在docker内部 但是当我们有其他需求的时候单纯靠往docker里重新添加内容不是持久之计 而且对于之前有一定量使用库积累的人来说这种迁移极其困难 所以这种方法在某些情况下是不适合的
解决方法就是参照上述方法使用pip在全局安装universe确保可引用性
c. Module Error/No Module named “gym.benchmarks”或其他同类型问题
在上述环境中pip安装时极易弹出类似以下错误:
ImportError: No module named benchmarks
这是个常见问题 在网络上搜索你会发现问题的来源很简单 gym在后续版本中(更具体来说应该是0.9.6版本之后)就移除了包括gym.benchmarks在内的一系列函数 导致后续版本对universe没有兼容性(这个问题也同时影响到了ppaquette-gym-super-mario)
解决办法是使用上述提到的先卸载gym再安装制定版本gym(0.9.5):
pip uninstall gym
pip install gym==0.9.5
关于前文提到的冲突问题 不用担心 我们不使用pip install方式安装 也不使用官方推荐的docker方式安装 所以在环境限制上比这两种要宽泛的多
d. 安装完后加载官方检测实例的时候出现的问题
注意 在安装完成之后使用
import universe
是不能完全解决全部问题的 你依旧无法运行官方提供的示例代码
import gym
import universe # register the universe environments
env = gym.make('flashgames.DuskDrive-v0')
env.configure(remotes=1) # automatically creates a local docker container
observation_n = env.reset()
while True:
action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n] # your agent here
observation_n, reward_n, done_n, info = env.step(action_n)
env.render()
你可能会遇见以下各类错误中的一个或者多个:
1.ConnectionRefusedError: [Errno 61] Connection refused
2.requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionRefusedError(61, 'Connection refused'))
3.equests.exceptions.ConnectionError: ('Connection aborted.', ConnectionRefusedError(61, 'Connection refused'))
4.AttributeError: 'VNCEnv' object has no attribute 'remote_manager'
5.404连接错误信息
6.502Gateway报错信息
......
诸如上述错误发生时请查看自己是否有在魔法上网 如果没有请确认上网后再重试(是的Attribute Error错误也和此有关)
另外这个操作极其需要等待时间 完全不像官方Guide上说的“several minutes” 所以在验证期间大可以去做些别的什么比如刷刷YouTube刷刷推之类的……(