Headless Steam in LXC with GPU

Self Hosted 自托管
/ Proxmox / LXC
Aug 7, 2024 ~

在 LXC 中运行 Headless Steam 实现在家里随便一台电脑上,用服务器的显卡玩游戏。最终的效果就是,在 Steam 上面,从家里的服务器 stream 游戏到另一台电脑,手机,或者 Shield 上面。同时,这个服务器上面的显卡还要保留跑 AI 的能力。

Context

之前的文章已经提到了如何在 LXC 中使用 Nvidia GPU device。既然手上有一张 3090,那必然是既要用它玩游戏,也要用它跑跑 AI 的。

相关文章 :

配置一台新的 Proxmox Server
记录一次新 Proxmox 服务器的配置。搞定 GPU access in LXC Containers。
尝试Docker + LXC + ZFS + Proxmox
起因仅仅是因为想要Host新的服务,就是前文提到的 Immich,然后对现在的 Docker + VM + ZFS + Proxmox的方案有点点不满意,觉得每次折腾一个服务的时候,还是很容易把其他的服务一并搞挂了,尤其是Docker的Network有个有点蛋疼的问题,所以想着干脆一不做二不休,把每个服务都单独拿出来,装在一个LXC里面。而Docker其实仅仅是因为觉得Deploy起来方便,再加上Portainer CE版本管理起来,有个UI也确实顺手一些。于是就开启了这次的折腾之旅。 先说结论 不推荐这样做。 最主要的原因:Docker的storage driver在基于ZFS的LXC上面,基本上只能用VFS。这个driver速度慢,空间占用高,对家用SSD对ZFS尤其不友好。Immich的Stack一度因为磁盘速度太慢,根本启动不起来。后来还是在LXC的subvol上面关了zfs的sync(i.e standard -> disable)才能跑起来。而一个Nginx Proxy Manager,跑起来需要大概20GB的空间。如此巨大的空间消耗,和如此慢的磁盘性能,居高不下的
Proxmox 7.4 GPU Passthrough 显卡直通
近期AI题材火爆,看着家里一堆闲置吃灰的显卡,想想也应该让他们起来干活了,于是想起来组建一个新的PVE服务器,把显卡用上。又因为显卡虚拟化的支持目前应该还是不太稳定的状态(想来老黄是不可能给消费级显卡官方虚拟化的能力的),而且即使服务器端驱动搞定了,License的问题应该还是会成为绊脚石,所以还是选择了更为稳妥的直通方案。计划是直通显卡给一个Ubuntu server,然后在其上通过Docker部署一些简单的应用。

虽然在在之前的文章中提到过不建议在 LXC 里面跑 Docker,但是为了能够复用 消费级的 GPU,在LXC 上面跑 Docker 基本上是跑不掉了。所以这里就建议 Proxmox 的 LXC 跑在 EXT4 这种简单的 FS 上面,如果是 ZFS,那大概需要 NVME 才能运行良好了。

这种折腾从某个角度来看是完全没有必要的。如果就是在一个 Ubuntu box 上面跑多个 Container,既有 Ollama,也有 Steamheadless docker,这完全不足为奇。这么折腾的原因仅仅是因为想要保持不同 Application 之间的“独立性”,保持 Proxmox 上面针对每个 GPU Application 的 Snapshot 和 Backup/Recovery 的能力。如果我们只是进行 GPU Passthrough (这篇文章),那么自然可以使用单独一个 VM 跑多个 Docker。但是这样就限制了使用 Proxmox 来单独对于每个 GPU Application 管理的的能力,而且也导致未来所有的 GPU 使用都要在这台 VM 上面进行,这种限制有时候还是挺麻烦的。

另外,如果想真的玩好,还是强烈建议给这个 GPU 接上显示器,或者接上一个 Dummy Display Plug。否则的话,Steam-headless 里面需要模拟一个 Display 设备,这样会导致一些设置不可用,而且极大(非常大)限制 GPU 性能的发挥。Amazon 上面搜 "display port dummy plug" 就可以了。

Set up Steam-Headless

这个实际上已经有现成的了。这次的远程玩游戏的功能就是由这个 project 提供的。

GitHub - Steam-Headless/docker-steam-headless: A Headless Steam Docker image supporting NVIDIA GPU and accessible via Web UI
A Headless Steam Docker image supporting NVIDIA GPU and accessible via Web UI - Steam-Headless/docker-steam-headless

然后这篇.md文档还是要好好看看的,这里面的各种 Directory 呀,还是建议老老实实的按照文档都创建好,毕竟这个 Docker Container 的复杂度确实比较高。另外,很多相关的设置都在这个.env文件里面,需要仔细阅读。

最终跑通的版本是这样的:

标签