新思路!巧用 GPU 算力服务器,畅玩 3A 大作云游戏
1. 背景
云游戏相信大家都不陌生,其主要受众是受电脑性能限制或者客观条件限制,无法用自家电脑流畅游玩各种大作的群体。国内外云游戏服务近年来形势日新月异,竞争十分激烈,国外主要有 Xbox Game Pass 和 NVIDIA GeForce Now 两个大厂商把持,国内厂商则如春笋般涌现,无论是大厂还是小厂都有许多可行的选择。
现有云游戏厂商的优点就不多说了,说说体验下来的缺点:
- 游戏库不全
- 排队
- 很多平台无法取出存档,或者存档到自己的 Steam 中
- 客户端体验不佳,或者不提供全平台的跨平台支持
还有最重要的一点:价格通常比较贵。
云游戏服务商成本的大头在网络带宽和 GPU 算力上,在如今这种受众群体有限,且 GPU 价格居高不下的环境中(老黄吃刀!),云游戏厂商在前期会通过打折吸引用户,但是后期服务大涨价绝对是在所难免的。
且不说单位小时涨价的问题,很多厂商都会提供较为优惠的 “月卡”“年卡” 等来吸引用户。这些所谓的卡看起来似乎非常优惠,但是往往都有各种限制,比如:
- 限制每日只能游玩 X 小时(我草,还没玩尽兴呢,怎么时间已经到了!)
- 卡券中的小时数拥有有效期,到期后即使时间剩余很多也无法继续使用(今天没玩,又过期了 X 小时,感觉好亏!)
种种限制,让玩家们总是难以满足。
2. 新思路
我们来做个梦吧:有没有一种,既可以实现舒适的云游戏体验,又可以拥有足够的性价比的云游戏方案呢。其基本要求如下:
- 游戏库必须够全,至少各厂商的 3A 大作都必须要有
- 存档可以导入导出,或者保存到自己的 Steam 账号中
- 不存在每日游玩时间限制
- 按用量(小时数)计费,拒绝卡券有效期限制,想玩就玩
- 支持 PC / 手机 / 平板等跨平台游戏,移动设备必须支持屏幕按键映射、外键键鼠操作
- 各平台上的显示清晰度至少要有 1080P 60 帧,支持所有 3A 大作至少以 60 帧稳定运行
- 价格适中
。。。。
这真的可能吗?
下面提供一种新颖的思路,也许真的可以达到这些目的:
随着 AI 时代兴起,炼丹对算力的大规模需求也让各云厂商一夜之间发掘出一条新赛道:GPU 算力服务器。其通常都可以按量租用,内置 CUDA SDK 和各种常见的炼丹模型框架,并提供强大的 GPU 算力以加速 AI 模型训练。由于赛道竞争激烈,各厂商都会给出非常有诚意的价格,尽可能地从其他平台口中争夺用户,其 GPU 单位时间价格往往大大低于同类云游戏厂商给出的价格。
那么,同样都是 GPU 算力,有没有可能借助云厂商的这些数据中心级显卡,让我们玩上 3A 大作呢?欸,事实上,还真的可以这样。
一般来说,英伟达的显卡分为消费级 GeForce 系列显卡(如 RTX 4090、RTX 3090、GTX 1080Ti 等),以及主要终于企业和数据中心的专业级显卡(如 Quadro 系列显卡、Tesla 系列显卡、Ampere 系列显卡等)。前者主要在消费市场出售,用于个人消费级电子设备的游戏娱乐和 GPU 计算,而后者往往出售给企业用于专业级别的科学计算、建模渲染、AI 模型训练等等。云服务厂商提供的 GPU 算力,往往都是后者这些专业级显卡。
和消费级显卡不同的是,数据中心级显卡的驱动默认用于计算用途,不支持 DX、OpenGL 等图形 API。如果要进行图形处理(比如云游戏、云渲染等),需要为这些 vGPU 装上支持图形处理的 Grid Driver,并且获得 NVIDIA 的 License 授权才行。当然,目前对我们来说这个授权不是问题,可以通过自行搭建社区的授权服务器来绕过官方验证。
安装驱动并获得授权之后,就可以像普通家用消费级 GPU 一样使用算力服务器的 GPU 了。
3. GPU 服务器选购
话不多说,实践时间到。
既然理论上的问题解决了,那么如何选购合适的 GPU 算力服务器就成了最重要的问题。由于我们需要通过串流的手段进行云游戏,因此所购买的 GPU 服务器必须满足下面这些条件:
- 拥有足够的网络带宽(建议至少 20Mbps 以上)
- 服务器的网络延迟需要在可接受的范围内
- 服务器上需要有足够的硬盘空间来储存游戏,关机后硬盘数据不清空
- 服务器的系统支持使用 Windows(或 Windows Server),这样不用任何折腾就可以直接玩上 Steam 中的海量游戏
- 服务器需要支持对外暴露端口
- 建议选择按量计费的服务器,且单位时间价格适中
下面,推荐几款国内大厂云服务商的 GPU 算力服务器:
⚠ 此处服务器信息统计于 2024.10,可能过时
3.1. 腾讯云 GPU 机型 GN7vw/GNv4 等
这些机型为渲染型机器,自带已授权的 Grid Driver,可以说是开箱即用。购买时,可以选择竞价型实例,价格差不多 1-2¥/ 小时。唯一一点缺点就是,竞价 / 按量型实例有出向流量费用,每 GB 流量 0.8¥,这对我们的串流需求来说似乎不太友好(但是也不是无法接受)。不知道有没有打折的流量包可以买(?)
3.2. 腾讯云 GPU 机型 GN7/GN10x 等
这些机型为计算型,不自带 Grid Driver,需要手动安装驱动后进行授权。由于有自助免费授权的项目存在,因此跟上面的机型区别也不是很大。同样选竞价 / 按量型实例实例,不过 0.8¥/GB 的流量费仍然略有些蛋疼。
3.3. 腾讯云 高性能应用服务 GPU 算力机型
这边的算力机型主要面向非专业用户,进行 AI 模型训练、对话模型搭建、AI 文生图等等。GPU 基础机型 1.2¥/ 小时,已经完全足够支撑 3A 游戏的运行。这边机型最大的优势是:自带 10Mbps 公网带宽,每月免费 500GB 流量,而且可以通过关机来停止 GPU 部分计费,仅需支付每天几毛的云硬盘费用,可以说是非常划算了。唯一的缺点是公网带宽略小,导致串流时画面质量会有损失(后面有说)。
3.4. 阿里云 GPU 共享型 sng6i
这款入门级机型是 “按量” 而不是 “抢占 / 竞价式机型”,不用担心实例被释放的风险。其提供的也是英伟达 T4/T8 计算卡,型号名称中带了 vws 标识,估计应该自带 Grid Driver 和授权。此机型建议搭配阿里云 CDT 云传输作为带宽计费模式,目前每月免费赠送国内 20GB,国外 180GB 流量,超出部分按阶梯计价,也是 0.8¥/GB,但是带宽就可以按需求拉到 20Mbps 及以上,充分满足串流所需要的带宽需求。
缺点是机型的显存很小只有 2GB,不过新版的英伟达驱动似乎已经支持内存融合,在显存不足的情况下自动使用系统的共享内存,这个特性对整体性能表现的影响还有待观察,但是至少应该不用担心显存不足的问题了。
3.5. 还有别的机型推荐吗?
事实上,符合要求的算力服务器不太好找,很多提供 GPU 算力的小厂商提供的都是基于容器的解决方案,这些平台上无法安装 Windows,自然也没法为我们所用。
或者,也有些厂商的公网带宽过小,或者不支持对外暴露端口,或者有公网 IP 但是需要额外付费(很贵),或者有的各方面都符合要求但是单位价格过高。。。很多因素都可能导致我们淘汰这家厂商。
其他优秀的机型,还有待你自行去寻找发掘~
4. Grid Driver 图形驱动:安装与授权
买完服务器之后,第一件事情就是要把图形驱动配上。
正如前面说的,算力厂商们所提供的 GPU 往往不是传统的消费级产品(像 RTX 30 系 / 40 系等),而是数据中心级产品,这些 GPU 默认用于计算用途,并不支持常见的图形 API。我们既然需要将其用于游戏渲染,就需要安装对应的 Grid Driver,并通过授权之后才可以成功运行游戏。
一般来说,有如下几种方法获取驱动的 License:
- 直接找 NVIDIA 官方申请 90 天的 vGPU 试用 License(需要企业邮箱账号)
- 找渠道商购买 License,或者闲鱼二手市场买 License
- 购买自带 vDWS License 并出厂就安装好 Grid Driver 的 GPU 算力服务器
- 使用自带 vDWS License 并出厂就安装好 Grid Driver 的系统镜像(可能要额外付费)
另外,还有一种更为简单,且不花钱的办法:有开发者通过逆向工程搞出了类似 KMS 的第三方自部署 DLS 授权服务器 fastapi-dls
,让我们可以不用花一分钱就实现 Grid Driver 的自助授权激活。
下面,介绍授权服务器搭建和驱动安装配置的流程。
如果你选购的是默认自带 Grid Driver 和授权的机器,可以跳过本节
4.1. 自建 fastapi-dls 授权服务器
通过开源项目 fastapi-dls
,我们可以搭建私有的 DLS 授权服务器,绕过 NVIDIA 的付费授权验证。具体流程如下:
- 找一台有对外开放端口,且已安装 Docker 的 linux 服务器
- 创建一个空目录用于保存配置。在目录中跑如下命令,生成有效期十年的自签名证书:
- 在当前目录下编写
docker-compose.yml
:
- 执行
sudo docker compose up
,等待容器启动即可。 - 配置完后,尝试用自己的浏览器访问
https://<服务器域名/IP地址>:<工作端口>/-/client-token
,如果可以成功下载到一个 token 文件,表示授权服务器已经配置成功。
4.2. Grid Driver 安装
安装驱动没有什么难的。Google Cloud 在以下网站整理了各版本 Grid Driver (vWS Driver) 的 Windows 版安装包,根据 nvidia-smi -q
命令输出的驱动版本号,寻找对应版本的 Grid Driver (vWS Driver) 下载到服务器上,直接安装即可:
https://cloud.google.com/compute/docs/gpus/grid-drivers-table?hl=zh-cn#windows_drivers
也可以按 fastapi-dls
项目 README 中说明的方法,寻找合适的 Grid Driver (vWS Driver) 安装。
4.3. 配置 Grid Driver 授权
安装好 Grid Driver 后,在重启之前,先把驱动 License 相关的配置搞定。步骤如下:
- 运行
nvidia-smi -q
命令,检查输出内容中的条目vGPU Software Licensed Product
中的License Status
,如果此其内容为Licensed (Expiry: xxxxxx)
,则表示此机器已拥有授权,无需重新安装 - 如果未拥有授权,用 Powershell 执行如下命令,从刚刚搭建的 DLS 授权服务器下载授权文件,并重启英伟达服务
- 重启云服务器,再运行
nvidia-smi -q
命令,可以看到License Status
已经变为 Licensed 了,授权成功
5. 配置串流:Sunshine 服务端安装
图形驱动配置完毕了。接下来,就要进行串流服务的配置。
串流部分,目前建议使用广为人知的开源串流平台 Sunshine-Moonlight 组合:
- Sunshine 在 GPU 算力服务器上部署,作为服务端提供串流服务
- Moonlight 客户端可以安装在 PC、手机、平板、电视等各种平台上,串流连接到 GPU 算力服务器上游玩游戏
Sunshine、Moonlight 端配置的教程非常之多,这里就不再赘述了,请自行在互联网搜索教程学习。只简单说下几个注意点:
5.1. 虚拟显示器
GPU 算力服肯定没有显示器,必须要配合虚拟显示器驱动才能使 Sunshine 正常捕获到视频流。
Sunshine 目前笔者使用的是国内修改版分支 - 基地版(Sunshine-Fundation),其相较于原版自带了 IddSampleDriver 虚拟显示器驱动,当客户端连接时支持自动启动虚拟显示器并设置为对应分辨率,这使我们可以开箱即用,相当省心。
当然,你也可以使用原版 Sunshine,配合 parsec-vdd 等虚拟显示器驱动自行实现自动化操作
5.2. Sunshine 设置
在 Sunshine 的 Audio/Video 设置中,建议如下配置(这里是基地版的设置项):
- 手动指定” 适配器名称 “为服务器上安装的 GPU
- ” 输出显示器指定 “设置为
就要使用虚拟显示器
- ” 串流时显示器组合状态指定 “设置为
禁用其他显示器,只启用指定显示器
另外,如果你的系统是 Windows Server,需要在 Input 设置中将” 模拟游戏手柄类型 “设置为 DS4
,使手柄可以正常工作。
5.3. 低带宽环境下的串流配置
moonlight 串流客户端的设置中,头几个就是视频分辨率、帧率和视频码率的设置项,这些是影响串流体验最重要的几个参数。按照软件中设定的默认值,一般 720p-60 帧流畅串流至少需要 10Mbps 的带宽,而 1080p-60 帧则需要 20Mbps。
对于笔者使用的 10Mbps 腾讯云服务器来说,带宽限制成了比较大的问题。如果使用默认配置 1080p-60 帧 20Mbps 码率的设置,会产生极大的丢包,完全无法进行正常串流;直接将分辨率修改成 720p 或者帧率改成 30 都可以暂时解决问题,但是游戏体验会产生严重的下滑;直接把码率改成 10Mbps,则会出现满屏模糊,游戏体验很差的情况。
对于这种低带宽条件下的串流,就必须要通过调节 moonlight 和 sunshine 的参数,尽可能以有限的带宽求得最好的效果。基本上调整参数的思路如下:
- 提高视频流的压缩率,以延迟略微增加为代价,换取画面质量的提高
- 画面清晰度必须要得到保证,相较而言帧率可以适当降低,只要在可接受的范围内
可以从以下几个点入手进行配置调节:
- Moonlight 设置中,在可接受的范围内调整” 视频帧数 “,并同时把” 视频码率 “调节到云服务器最大带宽值(笔者这里是 10Mbps)。如果服务端限制不严的话,甚至可以尝试将码率调节到略大于最大带宽值,只要串流时不发生丢包即可。
- Sunshine 设置的 Advanced 中,可以适当降低”FEC 前向纠错参数 “,以减少冗余数据包数量,提高带宽利用率。
- Sunshine 设置的 NVIDIA NVENC Encoder 中,可以将” 性能预设 “调整为
P7(最慢)
,以尽可能提高视频压缩率,提升画面质量。
经过一些调整并重启 Sunshine 后,画面质量应该有了一定的提高。
不管怎么说,有限的带宽总会使串流游戏的体验大打折扣。因此在 GPU 服务器选购时,就要尽量选择带宽足够的服务器,以免一通操作之后发现画质低于预期,导致玩起来十分难受。
6. 其他细节
安装配置流程已经到此为止了。还有一些其他方面的小细节,在这里罗列一下:
- 有些服务器上,每次使用远程桌面连接过 Windows Server 服务器后,服务器上的虚拟显示器就会创建失败,导致后续无法再进行串流。对于这些服务器,在配置完 Sunshine 服务端后可以顺便设置开机启动,以后每次开机完直接使用 moonlight 串流连接到服务器进行操作,这样就不再需要远程桌面了。
- 很多 GPU 算力机型不提供固定公网 IP,每次关机后再开机,公网 IP 都会变化。对于这种 IP 会动态变化的机型,要么每次在开机时注意复制一下公网 IP 地址,要么可以尝试 DDNS 等技术动态更新域名注册商处记录的服务器 IP 地址。
- 安装完图形驱动后,服务器也可以像普通的家用电脑一样,安装英伟达 Geforce Experience / NVIDIA App 来优化游戏性能设置 / 配置画面滤镜等。
- 不想玩的时候,记得到云服务器控制台把 GPU 服务器关机,避免发生不必要的扣费。
7. Q&A
7.1. 音频无输出,右下角音量显示红叉图标
原因:Windows Server 默认不启用音频服务
解决办法:打开services.msc
,启动如下服务并设置为自动:
- Windows Audio
- Windows Audio Endpoint Builder
7.2. Moonlight 手机端虚拟手柄无法工作
原因:Windows Server 似乎不支持默认模拟的 Xbox 手柄
解决办法:在 Sunshine 的 Input 设置中,指定强制模拟为 DS4 手柄
7.3. 开机需要按 Ctrl+Alt+Del 登录,但是串流客户端无法发送
原因:Windows Server 特有的安全登录
解决办法:执行 gpedit.msc
打开组策略,修改:
选择启用
7.4. 每次开机都要输密码登录,麻烦死了
解决办法:下载 Sysinternals 工具 Autologon,双击运行,在弹出的对话框中输入当前账户的用户名和密码,点击 Enable 按钮保存。用户名密码会加密储存在本机中,开机时将自动使用此账户密码登录。
7.5. 找不到 wlanapi.dll,导致某些程序无法运行
原因:Windows Server 默认缺失无线 LAN 服务组件
解决办法:
1、打开服务器管理器
2、添加角色和功能
3、在 “功能” 页面选择 “无线 LAN 服务”,安装
7.6. ViGEmBus 虚拟手柄驱动无法安装
报错:ViGEm Bus Driver cannot be installed on the following Windows versions: …
原因:项目原作者不想让云服务商内置他的软件来白嫖却不付钱,因此不允许安装程序在 Windows Server 上运行
解决办法:见 GitHub Issue:
Remove the Windows Server restrictions from the ViGEmBus installer · Issue #153 · nefarius/ViGEmBus
按其中的逐步教程安装即可。
8. 实机效果
Steam,启动!