Docker 中的 HUTB

用户可以拉取基于 HUTB 版本的映像以在 Docker 容器中运行。这对于以下用户很有用:

  • 想要运行 HUTB 而不需要安装所有依赖项
  • 运行多个 HUTB 服务器并执行 GPU 映射
  • 在没有显示的情况下运行 HUTB 服务器

本教程介绍了运行 HUTB 镜像的要求,以及如何在有显示器或没有显示器的情况下运行它。


在你开始之前

您需要安装:

  • Docker: 按照 此处 的安装说明进行操作。
  • NVIDIA Container Toolkit: NVIDIA 容器工具包是一个库和工具集,可将 NVIDIA 图形设备公开给 Linux 容器。它专为在 Linux 主机系统上运行的 Linux 容器而设计。请按照 此处 的说明安装nvidia-container-toolkit软件包。

CentOS安装Docker:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum -y install docker-ce-18.03.1.ce

docker启动出错:failed to start daemon: error initializing graphdriver: driver not supported

解决:

rm -rf /var/lib/docker/*
systemctl restart docker

CentOS 安装 NVIDIA 容器工具包命令:

curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  tee /etc/yum.repos.d/nvidia-container-toolkit.repo
yum-config-manager --enable nvidia-container-toolkit-experimental
yum install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker

笔记

Docker 需要 sudo 才能运行。按照 本指南 将用户添加到 docker sudo 组。


在容器中运行 HUTB

1. 拉取 HUTB 镜像。

您可以提取最新的 HUTB 映像或特定的发行版本。最新镜像是指 最新的打包版本 。要拉取映像,请运行以下命令之一:

# 拉取最新的镜像
docker pull carlasim/carla:latest

# 拉取特定的版本
docker pull carlasim/carla:0.9.16

2. 运行 HUTB 容器。

不同版本的 HUTB 支持不同的图形 API,这可能会影响 Docker 镜像的运行条件:

  • 0.9.12 仅支持 Vulkan
  • 0.9.7+ 同时支持 Vulkan 和 OpenGL。

注意

HUTB 在 Docker 容器内的执行方式随着时间推移而发生了变化。如果您使用的是早于 0.9.16 的版本,请参阅该特定版本的文档。

没有显示运行 HUTB:

docker run \
    --runtime=nvidia \
    --net=host \
    --env=NVIDIA_VISIBLE_DEVICES=all \
    --env=NVIDIA_DRIVER_CAPABILITIES=all \
    carlasim/carla:0.9.16 bash CarlaUE4.sh -RenderOffScreen -nosound

要在离屏模式下运行 HUTB:

sudo docker run --privileged --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.12 /bin/bash ./CarlaUE4.sh -RenderOffScreen

带显示运行 HUTB:

注意

要运行带有显示的 Docker 镜像,您需要 x11 显示协议。

docker run \
    --runtime=nvidia \
    --net=host \
    --user=$(id -u):$(id -g) \
    --env=DISPLAY=$DISPLAY \
    --env=NVIDIA_VISIBLE_DEVICES=all \
    --env=NVIDIA_DRIVER_CAPABILITIES=all \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    carlasim/carla:0.9.16 bash CarlaUE4.sh -nosound

HUTB 0.9.7 至 0.9.11

要使用 Vulkan 运行 HUTB:

sudo docker run --privileged --gpus all --net=host -e DISPLAY=$DISPLAY -e SDL_VIDEODRIVER=x11 -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.11 /bin/bash ./CarlaUE4.sh -vulkan <-additonal-carla-flags>

笔记

只要您的计算机有显示器,此命令将允许您使用 Vulkan 运行 HUTB 镜像。有关在离屏模式下运行 Vulkan 的信息,请参阅 渲染文档

要使用 OpenGL 运行 HUTB:

docker run -e DISPLAY=$DISPLAY --net=host --gpus all --runtime=nvidia carlasim/carla:<version> /bin/bash CarlaUE4.sh -opengl <-additonal-carla-flags>

3. (可选)配置 Docker 标志。

上面的命令使用了一些 Docker 标志,可以根据您的需要进行配置:

  • Networking: --net=host 参数将允许容器共享主机的整个网络。如果您希望将主机上的特定端口 映射到容器端口 ,请使用标志 -p <host-ports>:<container-ports>
  • GPUs: 您可以使用 --gpus all 选择有所 GPU,或者使用 --gpus '"device=<gpu_01>,<gpu_02>"' 使用特定 GPU。 浏览 此处 获取更多信息。

离屏模式

如果您在没有显示器的计算机上运行 HUTB,则 OpenGL 不需要配置,但是您需要执行一些额外的步骤才能使用 HUTB 0.9.12 之前的 Vulkan 执行相同的操作。有关信息,请参阅渲染文档


与此主题相关的任何问题或疑问都可以在 HUTB 论坛中发布。


开发容器(Devcontainer): 基于镜像的Ubuntu 22.04

这些说明已在 Ubuntu 24.04 中测试过。

以下文档旨在解释如何构建使用 Ubuntu 22.04 编译 HUTB 的 Docker 镜像。

拉取国内镜像

为了在国内更快速拉取镜像,可以使用国内的镜像源:

docker pull registry.cn-beijing.aliyuncs.com/synkrotron/carla:0.9.16
# 查看已经拉取成功的镜像信息
sudo docker images
# 根据镜像创建容器
# your_container_name 替换为自定义名,比如 hutb_2.9.16_test
# YOUR_IMAGE_ID 替换为 docker immages 中的输出字段 IMAGE ID
docker run --privileged --name {your_container_name} --gpus all --net host -e DISPLAY=$DISPLAY -e SDL_VIDEODRIVER=x11 -it {YOUR_IMAGE_ID} /bin/bash
docker run --privileged --name hutb_2.9.16_test --gpus all --net host -e DISPLAY=$DISPLAY -e SDL_VIDEODRIVER=x11 -it a77a7620cf26 /bin/bash
# 在容器中启动HUTB的服务端程序
./CarlaUE4.sh
# 在主机中运行 HUTB 的客户端程序
# conda create -n hutb_dev python=3.8 -y
# conda activate hutb_dev
python automatic_control.py


参考