尧图精选

DeepMind Lab 构建全指南:基于 Bazel 从源码编译 3D AI 研究环境

🕒 发布时间:2026/9/28 8:50:34 📁 来源:尧图网络
人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载DeepMind Lab 是一个可自定义的 3D 智能体Agent研究平台本文以仓库中 docs/users/build.md 为骨架系统讲解如何在 Linux 上使用 Bazel 完成 DeepMind Lab 的编译、测试与运行。读完本文你将掌握完整的依赖安装流程、核心 Bazel 构建目标的使用方法、Python 2/3 环境的自动发现机制以及如何将环境打包为可独立安装的 PIP 包。构建系统概览Bazel 与构建目标DeepMind Lab使用 Bazel 文件定义了数十个构建目标build targets及其依赖关系构建规则在 DebianJessie 或更新版本与 Ubuntu14.04 或更新版本上开箱即用前提是已安装所需系统包。在其他 Linux 发行版上也可构建但可能需要对构建文件做一些调整详见后文。代码本身使用 C99 与 C17 编写因此需要一个足够新的编译器。原文档特别提醒最初的版本只需 C11自 2022 年起要求 C17构建前请确认编译器版本。从根 BUILD 文件可以看出构建体系分为几大层次QVM 工具链q3asm、lburg、q3rcc、q3cpp、q3lcc等编译工具用于将 C 源码翻译为 Quake 虚拟机字节码见 BUILD游戏逻辑模块cgamex86_64.so、qagamex86_64.so、uix86_64.so及对应的 QVM 产物见 BUILD地图与资源打包bspcBSP 编译器、map_assets、assets_pk3、assets_oa_pk3、assets_bots_pk3、vm_pk3、game_script_assets等资源生成规则见 BUILD游戏库与 Python 接口game_lib_sdl有窗口的 SDL 版本、game_lib_headless_osmesa/glx/egl无头渲染版本、deepmind_lab.soPython 模块、python_random_agent随机 Agent 示例以及dmlablib、dmlab_so_loader等见 BUILD。构建时使用的优化标志为-c opt即--compilation_modeopt真实训练与评估场景中建议始终开启。第一步安装 BazelBazel 的安装方法详见官方安装指南在多数系统上可通过包管理器或官方安装脚本完成。安装完成后在终端中执行bazel --version确认可用。Bazel 会通过仓库根目录的 WORKSPACE 文件自动拉取外部依赖。第二步安装系统依赖Debian / Ubuntu以下命令在 Debian 9Stretch与 Ubuntu 16.04Xenial及更新版本上测试通过Python 2 支持仅在 Debian 8.6Jessie与 Ubuntu 14.04Trusty上测试过。$ sudo apt-get install libffi-dev gettext freeglut3-dev libsdl2-dev \ zip libosmesa6-dev python-dev python-numpy python-pil python-enum34 \ python3-dev python3-numpy python3-pil若要构建 PIP 包还需安装python3-setuptools python-setuptools python3-wheel python-wheel要使用 PIP 包则安装python3-pip python-pip并建议安装python3-virtualenv python-virtualenv以便使用虚拟环境。Red Hat Enterprise Linux Server以下命令在 RHEL 7.6Maipo上测试通过同样适用于 CentOS 7在 CentOS 6 上需要适当调整包安装命令。Python 2 支持仅在 RHEL 7.2 上测试过。sudo yum -y install unzip java-1.8.0-openjdk libffi-devel gcc gcc-c \ java-1.8.0-openjdk-devel freeglut-devel python-devel python-imaging \ numpy python36-numpy python36-pillow python36-devel SDL2 SDL2-devel \ mesa-libOSMesa-devel zipSUSE Linux以下命令在 SUSE Linux Enterprise Server 12 上测试通过sudo zypper --non-interactive install gcc gcc-c java-1_8_0-openjdk \ java-1_8_0-openjdk-devel libOSMesa-devel freeglut-devel libSDL-devel \ python-devel python-numpy-devel python-imaging各依赖的作用结合仓库根目录 README.md 的 External dependencies, prerequisites and porting notes 一节可以理解这些包的角色SDL 2libsdl2-dev/SDL2-devel/libSDL-devel窗口与输入层SDL 渲染路径game_lib_sdl直接依赖它OSMesalibosmesa6-dev/mesa-libOSMesa-devel软件渲染的无头模式game_lib_headless_osmesa需要链接-lOSMesa见 BUILDgettext、libffiglib外部依赖所必需freeglut、zip构建工具链与资源打包PK3 归档所需Python 与 NumPyPython 接口编译时需要系统 Python 头文件与 NumPy 头文件。部分第三方库zlib、glib、libxml2、jpeg、png、lua、eigen、pybind11、dm_env、tree等由 WORKSPACE 通过http_archive声明并以 Bazel 外部仓库方式拉取无需手动安装但 SDL 2、gettext、OpenGL 与 Python 等必须以系统包形式存在。注意现有 BUILD 规则针对 Linux/x86_64源码中定义了-DARCH_STRING\x86_64\其他平台通常需要修改这些 BUILD 文件。第三步克隆代码$ git clone https://gitcode.com/gh_mirrors/la/lab $ cd lab第四步构建、测试并运行随机 Agentlab$ bazel build -c opt //:deepmind_lab.so # 构建 DeepMind Lab 的 Python 接口 lab$ bazel test -c opt //python/tests:python_module_test # 构建并运行接口测试 lab$ bazel run -c opt //:python_random_agent # 运行一个随机 Agent其中目标:deepmind_lab.so构建的是与 DeepMind Lab 交互的 Python 模块。从 BUILD 可以看到它由 C 扩展模块 python/dmlab_module.c 与公开头文件 public/dmlab.h 编译而成并链接dmlablib与系统 Python 头文件最终产物是一个可直接被 Python 导入的共享库测试目标//python/tests:python_module_test对应 python/tests/dmlab_module_test.py其定义见 python/tests/BUILD。该目录下还有python_random_agent_test、raycast_test、determinism_test等大量集成测试可在bazel test中一并运行随机 Agent 目标:python_random_agent对应 python/random_agent.py它启动一个环境循环每步采样随机动作用于快速验证安装正确性。随机 Agent 的命令行参数随机 Agent 支持多个可选命令行参数运行bazel run :random_agent -- --help可查看完整列表。结合 python/random_agent.py 的源码核心参数如下参数默认值说明--length1000Agent 运行的总步数--width80观测图像的宽度像素--height80观测图像的高度像素--fps60每秒帧数--level_scripttests/empty_room_test要加载的关卡 Lua 脚本名--runfiles_pathNone指定 runfiles 路径以定位 DeepMind Lab 数据--recordNone将运行录制为 demo 文件--demoNone回放录制的 demo 文件--demofilesNonedemo 文件存放目录--videoNone将 demo 运行录制为视频例如以 640×480 分辨率运行 10000 步lab$ bazel run -c opt //:python_random_agent -- --length10000 --width640 --height480若需要带窗口的 SDL 渲染例如人工游玩场景可按 README.md 的说明追加--define graphicssdllab$ bazel run :python_random_agent --define graphicssdl -- \ --length10000 --width640 --height480该--define graphics...选择机制对应 BUILD 中的config_settinggraphicssdl时链接game_lib_sdlgraphicsosmesa_or_glx时在game_lib_headless_glx与game_lib_headless_egl间选择默认则使用 EGL 无头渲染见 BUILD。机器学习 Agent 通常使用无头库EGL/GLX 硬件加速或 OSMesa 软件渲染而人类游玩则需要带 SDL 窗口的版本。Python 依赖详解DeepMind Lab不采用完全封闭hermetic的依赖管理尤其是 Python 并不内置而是要求系统中已安装。仓库的 Bazel workspace 包含一套自动发现机制构建时运行python2与python3解释器来探测系统 Python 的安装路径。具体实现见 python_system.bzl它通过distutils.sysconfig.get_python_inc()获取 Python 头文件目录、通过numpy.get_include()获取 NumPy 头文件目录并把它们软链接为python3/numpy3或 Python 2 对应的python2/numpy2最终由 WORKSPACE 中的python_repo规则默认py_version PY3生成外部仓库。此外NumPy 也必须安装在系统中因为该机制需要调用numpy.get_include()定位头文件。Python 2 与 Python 3 的选择Bazel 可以使用 Python 2 或 Python 3 构建 Python 代码默认是 Python 3但每个py_binary/py_test目标可以通过python_version参数单独指定所需版本。构建规则必须让目标 Python 版本的本地安装路径可用。默认构建规则针对 Debian 与 Ubuntu 设计利用 Bazel 的configurable attributes可配置属性select机制按构建所需的 Python 版本分别提供 Python 2 与 Python 3 的路径——这正是 python_system.bzl 中_BUILD_FILE使用select区分PY2/PY3的原理。指定 NumPy 版本如果通过 PIP 在本地安装了 NumPy并希望使用 DeepMind Lab 的 PIP 模块则应当针对运行时使用的 NumPy 版本构建模块。可在目标环境中运行以下代码查看该版本的 include 路径import numpy as np print(np.get_include())构建出的 Python 模块所链接的 Python 与 NumPy 库必须与运行时一致当本地安装与系统级安装不一致时需要格外小心。构建并安装 PIP 包在 Bazel 项目之外使用 DeepMind Lab 的推荐方式是通过 PIP 包流程为安装依赖 → 用 Bazel 构建资产与二进制 → 打包 → 安装。详见 python/pip_package/README.md。快捷流程git clone https://gitcode.com/gh_mirrors/la/lab cd lab bazel build -c opt --python_versionPY2 //python/pip_package:build_pip_package ./bazel-bin/python/pip_package/build_pip_package /tmp/dmlab_pkg pip install /tmp/dmlab_pkg/deepmind_lab-1.0-py2-none-any.whl --force-reinstallPython 2 与 Python 3 的选择通过 Bazel 的--python_version标志选择 Python API 版本Python 2bazel build -c opt --python_versionPY2 //python/pip_package:build_pip_packagePython 3bazel build -c opt --python_versionPY3 //python/pip_package:build_pip_packagePython 3 构建时建议以virtualenv --pythonpython3创建虚拟环境并在运行打包脚本前导出 Python 二进制路径例如export PYTHON_BIN_PATH/usr/bin/python3生成的.whl文件名会包含-py2-或-py3-字样以标识其针对的 Python 版本。自 Bazel 0.27 起默认 Python 版本为PY3。打包脚本的工作方式打包脚本 python/pip_package/build_pip_package.sh 的具体逻辑校验目标目录参数与bazel-bin是否存在必须从源码根目录运行将 Bazel 的 runfiles即org_deepmind_lab下的全部构建产物包括deepmind_lab.so与各类 PK3 资产复制到临时目录并重命名为deepmind_lab复制 setup.py、init.py 与dmenv_module.py到包目录依据PYTHON_BIN_PATH环境变量未设置时依次尝试python、python3调用setup.py bdist_wheel生成 wheel 文件到指定目录。因此构建打包脚本前Bazel 必须已构建//:deepmind_lab.so与全部GAME_ASSETS见 BUILD 中的assets_pk3、assets_oa_pk3、assets_bots_pk3、game_script_assets、non_pk3_assets、built_maps、vm_pk3等规则。使用虚拟环境安装推荐使用 Virtualenv 隔离环境$ cd ~/my_agent $ virtualenv agentenv # 或 virtualenv --system-site-package agentenv 复用系统包 $ source agentenv/bin/activate (agentenv)$ pip install numpy # 未使用 --system-site-package 时需要 (agentenv)$ pip install /tmp/dmlab_pkg/deepmind_lab-1.0-py2-none-any.whl安装验证编写agent.py导入deepmind_lab创建环境并执行 100 步向前行走import deepmind_lab import numpy as np # 创建新的环境对象。 lab deepmind_lab.Lab(demos/extra_entities, [RGB_INTERLEAVED], {fps: 30, width: 80, height: 60}) lab.reset(seed1) # 执行 100 步向前行走并累加每步返回的奖励。 print(sum( [lab.step(np.array([0,0,0,1,0,0,0], dtypenp.intc)) for i in range(0, 100)]))运行python agent.pyDeepMind Lab 会向控制台输出调试/诊断信息最终打印奖励数值对于示例关卡奖励应为4.0出生点前方有四只苹果。PIP 包还内置了 DeepMind dm_env 通用强化学习 API 的适配模块python/dmenv_module.py安装时可附带额外依赖pip install /tmp/dmlab_pkg/deepmind_lab-1.0-py2-none-any.whl[dmenv_module]安装后可通过from deepmind_lab import dmenv_module导入。需要说明的是并非所有 DeepMind Lab 特性都能通过 dm_env API 暴露例如 dm_env 的观测规范observation spec不支持动态形状而 DeepMind Lab 原生 APIthird_party/rl_api/env_c_api.h支持。常见问题与排错建议编译器版本过旧自 2022 年起构建要求 C17需升级到足够新的 GCC/Clang非 Debian/Ubuntu 平台现有 BUILD 规则针对 Linux/x86_64 编写含-DARCH_STRING\x86_64\与 GCC 专有编译选项其他平台通常需要编辑 BUILD 与bazel/目录下的第三方 BUILD 文件README.md 也提醒部分警告抑制标志可能不被当前编译器识别这些警告虽嘈杂但通常无害Python 路径不匹配构建产物链接的 Python/NumPy 库必须与运行时一致。若本地 Python 与系统 Python 不同应通过PYTHON_BIN_PATH指定正确的解释器路径并确认 NumPy 版本不低于构建时所用版本PIP 打包失败确认已从源码根目录运行打包脚本脚本依赖bazel-bin的存在并已先构建//python/pip_package:build_pip_package目标修改后未生效对 DeepMind Lab 的大多数修改新增游戏脚本、模型、纹理与代码都需要重新构建打包脚本并重新执行安装步骤。延伸阅读PIP 包构建与安装详解独立的 Python 模块打包文档Python API 参考Agent 与环境的交互接口Levels 文档仓库内置的各类任务关卡README.md外部依赖清单、上游来源与快速开始示例BUILD 与 WORKSPACE构建目标与外部依赖的完整定义。赞分享人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载相关推荐DeepMind Lab环境搭建与基础使用指南DeepMind Lab环境搭建与基础使用指南 本文详细介绍了DeepMind Lab环境的完整搭建流程和使用指南涵盖了系统要求与依赖库安装、Bazel构建系人工智能强化学习机器学习基于 Bazel 的 Kong 全栈构建系统深度指南从源码编译、开发环境到发行版打包基于 Bazel 的 Kong 全栈构建系统深度指南从源码编译、开发环境到发行版打包 导读 Kong 是一个云原生 API 网关与 AI 网关项目其运行时横API网关后端LLM 网关微服务人工智能从源码编译 Bazel基于 Bazel 的自举构建与零依赖 Bootstrap 完整实战指南从源码编译 Bazel基于 Bazel 的自举构建与零依赖 Bootstrap 完整实战指南 本篇技术指南完整讲解在当前 Bazel 开源仓库中从源码编译出可构建工具上一篇RuView Homecore verify 技能四个测试 Profile 与结果解释边界下一篇GPT-Researcher CURSOR_RULES 解析AI IDE 规则文件如何为 LLM 自主研究项目锚定结构与开发规范创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →