ue4-runtime_ubuntu_docker_使用教程方法
- 前言
- docker安装
- NVIDIA Container Toolkit安装
- ue4-runtime镜像包简介、下载、使用
- 简介
- 开发镜像与运行时镜像对比
- 下载
- 使用
- 可能遇到的问题
- 参考文献
前言
本文主要涉及到本人进行ue4-runtime的docker的使用,以及相关的docker安装、docker如何使用gpu和一些可能会遇到的问题的记录,如有错漏希望大佬们能留言提醒,文末会附上参考文章链接。
- docker安装;
- NVIDIA Container Toolkit安装;
- ue4-runtime镜像包简介、下载、使用;
- 可能遇到的问题;
docker安装
docker的安装可直接参考菜鸟教程,此处先贴链接:
Ubuntu Docker安装:https://m.runoob.com/docker/ubuntu-docker-install.html
Ubuntu建议使用18.04及以上的版本,因为docker已经停止了16.04及以下版本的更新支持。
系统安装的时候如果勾选,会自带使用snap安装的docker,网上大部分资料都是apt安装的docker,可以使用snap remove命令卸载后依照教程使用apt重装docker。两个版本安装的docker在一些使用上会有区别,例如查看状态需要使用systemctl status snap.docker.docker,建议使用apt重装。
NVIDIA Container Toolkit安装
普通的docker环境不支持gpu,因此我们需要一个nvidia-docker的版本。如图:
此处先贴nvidia官方文档,有对Nvidia Container toolkit的从简介到入土的全部说明,非常详细!不擅长英文可以用google chrome右键翻译成中文查阅。
Nvidia Container Toolkit官方文档:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-on-ubuntu-and-debian
本文只摘取小部分重点信息,仅供概览,详细操作步骤按官方教程走就好,网上大部分教程都是搬运自这里。如果docker版本是小于19.03的,需要单独部署nvidia-docker,可自行查旧资料,建议使用19.03及以上版本的docker。
平台要求
运行 NVIDIA Container Toolkit 的先决条件列表如下所述:
- 内核版本 > 3.10 的 GNU/Linux x86_64
- Docker >= 19.03(推荐,但某些发行版可能包含旧版本的 Docker。支持的最低版本为 1.12)
- 架构 >= Kepler(或计算能力 3.0)的 NVIDIA GPU
- NVIDIA Linux 驱动程序>= 418.81.07(请注意,不支持较旧的驱动程序版本或分支。)
笔记
ue4-runtime镜像包简介、下载、使用
docker hub上提供了ue4-runtime的镜像包,分别基于Ubuntu18.04、20.04系统打包了OpenGL、Vulkan、CUDA、PulseAudio Client、PulseAudio Server、VirtualGL等工具,可根据需求pull不同tags的image进行使用。
简介
- 目前仅包含 Linux 开发镜像,无 Windows 开发镜像(由于技术和法律限制,官方无法发布 Windows 开发镜像)。所有支持像素流的 Windows 运行时镜像都支持基于 NVIDIA 和 AMD 显卡的 GPU 加速。Linux 镜像只支持 NVIDIA 显卡,对AMD 显卡的支持将在未来推出。
- UE4 Container 基于 TensorWorks开源架构开发,并由 虚幻容器 社区维护。
- UE4 Container 的作用:增强生产管线,开发次世代云应用程序,大规模部署企业解决方案等。
- UE4 Container 属于轻量级的,以容器镜像的方式存储在磁盘上,通过 Image 可运行一个或多个 Container 。与虚拟机不同的是,Container 共享一个底层 OS 内核,可跨不同 Container Image 共享公共数据,并能实现大量并发部署。 容器的应用标准单元可在不同计算基础设备(包括本地设备和云端设备)之间迁移。
- 包含两种容器镜像:开发镜像(Dev Images)和运行时镜像(Runtime Images)。4.27 版本中共有 7 中镜像类型。
开发镜像与运行时镜像对比
- 开发镜像用于需要编辑器的任务,在法律上有严格的 EULA 限制来管理它们的分发。
包含内容:
- (必需): Engine 构建工具和 Editor
- (可选):非核心引擎组件,如模板项目、调试符号和派生数据缓存 (DDC)
- (可选):使虚幻编辑器能够渲染图形所需的运行时依赖项和配置文件
- (可选):在 Linux 下将虚幻编辑器作为沙盒 GUI 应用程序运行所需的运行时依赖项和配置文件
- (可选):使用 X11 转发通过 VNC 或 SSH 远程访问虚幻编辑器所需的运行时依赖项和配置文件
- (可选):其他第三方附加功能或开源工具,例如 ue4cli
执行任务:
- 在容器中构建和打包项目或插件
- 为容器内的 Unreal 项目运行自动化测试工作流程
- 运行命令行功能为容器内的 Unreal 项目烘焙光照、烘培内容、电影渲染或执行其他任务
- 为容器内的 Unreal 项目渲染 Sequencer 过场动画
- 在容器内运行 Python 脚本或其他编辑器自动化实用程序
- 运行时映像用于运行打包的项目,包含打包的 Unreal 项目及其运行时依赖项,并且可以更自由地分发。
包含内容:
- (必需):运行带离屏渲染的打包虚幻项目所需的运行时依赖项
- (可选):启用音频输出所需的运行时依赖项和配置文件
- (可选):使用 Pixel Streaming 远程访问打包的 Unreal 项目所需的运行时依赖项和配置文件
- (可选):使用 X11 转发通过 VNC 或 SSH 远程访问打包的 Unreal 项目所需的运行时依赖项和配置文件
- (可以通过扩展基础镜像或绑定挂载文件自行添加):自定义在容器中运行的打包虚幻项目
执行任务:
- 使用 Engine 开发映像在容器内构建和打包项目,然后在容器内运行它
- 在容器外构建和打包项目,然后在容器内运行
- 可用镜像容器
容器镜像的源代码:Engine/Extras/Containers.
容器镜像的预构建版本:GitHub 容器注册表。
镜像 | 镜像类型 | 描述 |
dev | 开发镜像 | 虚幻引擎的完整 Linux 开发镜像,包括虚幻引擎的已安装版本、模板项目和完整调试符号。 |
dev-slim | 开发镜像 | Linux 版本的开发镜像,内容较小,不包含模板项目和调试符号。 |
runtime | 运行时镜像 | 带有或未带有 GPU 加速的简化版 Linux 运行时镜像,专用于在容器内运行打包的虚幻引擎应用程序。为了将镜像大小压缩到最小,此镜像不支持音频输出。 此容器镜像目前仅对使用 NVIDIA GPU 的机器提供 GPU 加速支持。 |
runtime-pixel-streaming | 运行时镜像 | 此镜像扩展了简化版 Linux 运行时镜像,以添加像素流应用程序所需的依赖项,包括支持音频输出。因此,尽管此镜像仍比 Windows 运行时镜像要小得多,但明显比默认运行时镜像要大。此容器镜像目前仅支持 NVIDIA GPU 的 GPU 加速。 |
runtime-windows | 运行时镜像 | 带有或未带有 GPU 加速的 Windows 运行时镜像,专用于在容器内运行打包的虚幻引擎应用程序。由于 Windows 容器镜像已经比 Linux 容器镜像大很多,而且与 Windows 操作系统本身的大小相比,像素流应用程序所需的依赖项相对较小,因此该镜像也包含这些依赖项。目前,对于在基于 GPU 加速的 Windows 容器内运行像素流应用的支持还是试验性的,不建议在实际开发中使用。 |
pixel-streaming-signaling-server | 特殊镜像 | 包括像素流系统使用的 Cirrus 信号和 web 服务器的 Linux 容器镜像。 |
multi-user-server | 特殊镜像 | 包括虚幻引擎多用户编辑系统所用服务器的 Linux 容器镜像。 |
- 软件及硬件要求
包含在虚幻引擎中的 Linux 容器镜像可以在 Windows、macOS 或 Linux 上构建和运行。计算机需满足以下硬件要求:
- 64 位 CPU,支持 SLAT (二级地址转译,处理器虚拟化技术,为虚拟化应用提供加速功能,如VirtualBox、Hyper-V 等)。
- 在系统 BIOS 中启用硬件虚拟化支持。
- 系统内存至少为 4 GB。
- Windows: 64位Windows 10 家庭版、专业版、企业版、教育版、1903 版本或更新版本,并且安装了 Windows 版 Docker 桌面版。
- macOS: macOS 版 10.14 或更新版本,并且安装了 Mac 版 Docker 桌面版。
- Linux: 64 位版本的 CentOS 7 或更新版本、Debian 10 或更新版本、Fedora 32 或更新版本、Ubuntu 16.04 或更新版本,或任何满足 Docker 先决条件的 Linux 发行版,并且安装了 Docker 引擎。
包含在虚幻引擎中的 Windows 容器镜像可以在 Windows 上构建和运行。计算机需满足以下软件要求:
- 64 位 Windows 10 专业版、企业版、教育版、1809 版本或更新并且安装了 Windows 版 Docker 桌面版。
推荐使用Docker来构建并运行包含在虚幻引擎中的容器镜像。
下载
docker hub上提供了ue4-runtime的镜像包,分别基于Ubuntu18.04、20.04系统打包了OpenGL、Vulkan、CUDA、PulseAudio Client、PulseAudio Server、VirtualGL等工具,可根据需求pull不同tags的image进行使用。
ue4-runtime docker hub链接:https://hub.docker.com/r/adamrehn/ue4-runtime
# 示例,可根据需求更换tag
docker pull adamrehn/ue4-runtime:18.04-cudagl10.2-virtualgl
# 使用命令查看是否下载成功,ok的话会显示
docker images
pull好镜像后,如docker hub链接内描述所说,运行时宿主机需要运行X11服务,即窗口系统用于显示图像结果,需要挂载宿主机X11 socket挂载到容器,详情参见’Using the VirtualGL images‘部分。
# Replace "adamrehn/ue4-runtime:virtualgl" with your chosen image tag
docker run --gpus=all -v/tmp/.X11-unix:/tmp/.X11-unix:rw -e DISPLAY adamrehn/ue4-runtime:virtualgl bash
# 示例, -itd --name配置项自查作用,可docker run --help看帮助
docker run -itd --name ue4test --gpus=all -v/tmp/.X11-unix:/tmp/.X11-unix:rw -e DISPLAY adamrehn/ue4-runtime:18.04-cudagl10.2-virtualgl bash
需要音频输出的,参见’Audio output‘部分挂载音频服务,若需要容器命名、共享目录、端口映射功能等自行查找方法。
# 挂载音频服务
"-v/run/user/$UID/pulse:/run/user/1000/pulse"
使用
使用ue4-runtime镜像,可根据个人需要安装需要的库等,无特别注意事项,此处贴几个常用docker操作命令。
# 启动容器ue4test
docker start ue4test
# 暂时挂起,不关闭容器,同时按Ctrl+Q+P
Ctrl+Q+P
# 退出,并关闭容器,按Ctrl+D,或输入exit
Ctrl+D
exit
# 进入挂起的容器
docker attach ue4test
# 以root权限进入容器,正常进入为普通用户,无权限使用apt等命令
docker exec -it -u root ue4test bash
可能遇到的问题
- 使用ue4-runtime docker运行ue4工程时,可能会在InitSDL时失败,提示没有可用的video device,说明没有可用于输出显示渲染结果的设备,我的解决方法是使用带virtualGL的镜像,并依照上文所述挂载X11既可。
Could not initialize SDL : No available video device
error: XDG_RUNTIME_DIR not set in the environment.
参考文献
最后感谢以下所有链接的作者提供的参考帮助。
- docker19.03+NVIDIA显卡+docker: Error response from daemon: could not select device driver “” with c
- docker容器使用GPU方法
- docker 容器中创建文件修改操作提示 Permission denied问题
- 菜鸟教程-Docker 镜像使用
- UE4 Container介绍
- UE4.27 linux云服务器像素流部署
- Nvidia Container Toolkit官方文档
- error: XDG_RUNTIME_DIR not set in the environment.报错
- dockerhub adamrehn/ue4-runtime主页
- Sources of Unreal Engine runtime images
- Could not initialize SDL : No available video device.报错