openAI/universe 安装踩雷记录

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刷刷推之类的……(

    原文作者:ErrorCode
    原文地址: https://zhuanlan.zhihu.com/p/37429482
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞