Deepmind lab 在Python中的环境搭建

Deepmind lab 是一个 Deepmind 团队推出的一个GUI仿真平台,提供 C(C++)/lua/python的接口。以下介绍编译过程(以2019 October 的release 为准)

要求

  1. Linux 系统(似乎不支持Windows),我以Ubuntu 18.04 LTS为例子。
  2. Python(官方默认2.x,3.x为实验特性,但是目前运行良好)
  3. 系统库(Ubuntu):libffi-dev、gettext、freeglut3-dev、libsdl2-dev、zip、libosmesa6-dev
  4. Python模块:numpy、pillow、dev(也就是Python的库、头文件)
  5. 钦点的编译平台:bazel
  6. 特别说明:我使用的是 anaconda 中的 python 因此不需要通过apt安装python模块。

准备

  1. 首先要安装git,gcc,g++等编译器,这个可以用sudo apt-get install build-essential即可。这个不像tensorflow要求(钦)定编译gcc版本,亲测7.3的gcc和g++可以编译。
  2. 下载源码git clone https://github.com/deepmind/lab.git或者下载release包(文件大,网速慢的最好用梯子)
  3. 进入源码目录:lab并切换到 你的 anaconda的虚拟环境
  4. 安装必要的库:sudo apt-get install libffi-dev gettext freeglut3-dev libsdl2-dev zip libosmesa6-dev以及bazel需要的库:sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
  5. 安装必要的Python模块:pip install numpy pillow(anaconda的虚拟环境自带python的库、头文件)
  6. 安装bazel:前往bazel 的 github 下载。我下载的是0.29.1 Linux installer我测试 Deepmind lab 的 2019 October release 需要 0.29.1的 bazel版本,早期版本至少0.19是无法编译这一版本的,请留意。
  7. 下载的 bazel假设名为bazel-0.29.1-installer-linux-x86_64.sh。先运行 chmod a+x bazel-0.29.1-installer-linux-x86_64.sh 添加执行权限。安装分两种:
  • 安装到指定目录,跳转到 8
  • 安装到 $HOME/bin(类似于单用户安装),请跳转到9
  1. 我个人喜欢安装到/usr/local下因此也就使用第一种方式(当然需要权限)。
sudo ./bazel-0.29.1-installer-linux-x86_64.sh --prefix /usr/local # 这样 bazel 的可执行文件就会被安装到 /usr/local/bin 下。prefix 后面值可以自己指定!
  1. 为当前用户安装
# (二选一,不要重复运行安装命令!)为当前用户安装可以使用:
./bazel-0.29.1-installer-linux-x86_64.sh --user 
  1. 最后讲 bazel 所在的路径写入到 ~/.bashrc
# 二选一!
# 8)安装在指定目录
export PATH="$PATH:/usr/local/bin"
# 9)当前用户安装
export PATH="$PATH:$HOME/bin"
  1. 重新打开终端或运行:source ~/.bashrc并运行 bazel version 输出:
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
Build label: 0.29.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Tue Sep 10 13:44:39 2019 (1568123079)
Build timestamp: 1568123079
Build timestamp as int: 1568123079

即安装正确。

修改配置文件

  1. 重新进入Deepmind lab的目录并进入 anaconda 的虚拟环境
  2. 假设你的虚拟环境为 ml,那么对应的虚拟环境所在目录为 /home/shu/miniconda3/envs/ml, 其中/home/shu/miniconda3/是你的 anaconda 的目录。
  3. 现在确定 numpy 模块的目录。运行python解释器,运行python -c "import numpy as np;print(np.get_include())" 得到输出:
/home/shu/miniconda3/envs/ml/lib/python3.6/site-packages/numpy/core/include
  1. 修改WORKSPACE,这个是用于修改 Python 库所在的前缀目录。找到最后:修改:
new_local_repository(
    name = "python_system",
    build_file = "python.BUILD",
    path = "/home/shu/miniconda3/envs/ml",
)

这个 path 就是你的虚拟环境所在目录。

  1. 替换 python.BUILD
# Description:
#   Build rule for Python and Numpy.
#   This rule works for Debian and Ubuntu. Other platforms might keep the
#   headers in different places, cf. 'How to build DeepMind Lab' in build.md.

cc_library(
    name = "python",
    hdrs = select(
        {
            "@bazel_tools//tools/python:PY2": glob(["include/python2.7/*.h"]),
            "@bazel_tools//tools/python:PY3": glob(["include/python3.6m/*.h","lib/python3.6/site-packages/numpy/core/include/**/*.h"]),
        },
        no_match_error = "Internal error, Python version should be one of PY2 or PY3",
    ),
    includes = select(
        {
            "@bazel_tools//tools/python:PY2": ["include/python2.7"],
            "@bazel_tools//tools/python:PY3": ["include/python3.6m","lib/python3.6/site-packages/numpy/core/include"],
        },
        no_match_error = "Internal error, Python version should be one of PY2 or PY3",
    ),
    visibility = ["//visibility:public"],
)

请注意一下几点:

  • 在4中提到的 path 可以认为是 python.BUILD 库路径的前缀。在 python.BUILD 见到的路径,例如
["include/python3.6m","lib/python3.6/site-packages/numpy/core/include"]

都是相对路径,他们的前缀就是 path

  • 如果使用的是 Python 3.5,请改为 python3.5m. Python 2.7 的部分不需要修改!
  • 请确保 hdrsincludes@bazel_tools//tools/python:PY3 都修改成功。
  1. 保存之后就可以编译了

编译

  1. 运行 bazel build -c opt --python_version=PY3 //python/pip_package:build_pip_package
  2. 等待编译完成。期间会从 github 和 google 服务器(没被q)下载模块,请耐心等待。
  3. 编译成功后运行 ./bazel-bin/python/pip_package/build_pip_package /tmp/dmlab_pkg 产生 whl 安装包。
  4. 运行安装命令 pip install /tmp/dmlab_pkg/DeepMind_Lab-1.0-py3-none-any.whl --force-reinstall 即可安装。

参考

  1. Bazel: Installing Bazel on Ubuntu
  2. DeepMind Lab Python Module