一种比网吧便宜的云游戏解决方案

背景

最近一段时间,中午吃完午饭,跟同事一起散步的时候,有聊到很多游戏的话题。

一般的家庭游戏解决方案都是,自己组装一台高配台式主机(CPU顶配,显卡拉满,etc.)来玩一些大型游戏。但是这种方案预算说实话有点高,对于我这种打工幼仔来说,还是有点难以接受的。

我的游戏需求并不是那么强烈,偶尔想打游戏就去外面的网吧呗,没有必要为了一丁点的游戏需求就花费那么多钱组装一台主机吧。但上次去了次网吧,感觉现在网吧也不便宜了,价格都要10~30/h,还没玩2-3个小时,我卡内50多块钱的余额就没了。。。

这几天又由于公司内部考试的缘由,了解到了一些“云”的概念,诸如IaaS、PaaS、SaaS 。既然“云”那么nb,是互联网的未来十年的发展趋势之一,那我就在想,我能用“云”来打游戏吗?

IaaS:卖地皮(基础设施)的,其他公司可以在地皮上自建大楼来外售产品和服务

PaaS:卖毛坯写字楼(平台)的,其他公司可以租下写字楼来开展公司业务

SaaS:卖精装修的店铺(软件)的,其他公司可以直接买店铺来对外做生意

其实,我之前也有尝试过一些云游戏解决方案,例如Geforce NowStart云游戏 ,以及若干个小公司的一些云游戏服务。但是效果都不是很理想:

  • 英伟达自己的云游戏服务Geforce Now不能在中国使用,只能连一些新加坡之类的服务器,延迟就很高,鼠标按一下,至少要500ms画面才回来。。。
  • 腾讯的Start云游戏,之前还是免费的,后来就开始会员制了,一个月要25(其实价格还算良心的了)。Start最难受的是,里面只支持腾讯自己的一些游戏,而且数量还比较少(虽然后续有新增一些,但我都不玩那些游戏啊),不能玩一些steam里的3A大作。之前用Start也主要就是跟朋友偶尔一起LOL开开黑,但经常卡顿、还要排队,画质也最多1920*1080,都不能完全施展出自己的真实实力,玩一把游戏约等于4.5打5.5,体验极差。
  • 其他的一些小厂商云游戏也都试过,大多都有延迟高、游戏少、画质低、价格贵等毛病。

从定义上来看,上述的这些云游戏解决方案都属于是SaaS。云游戏服务提供商用他们的基础设施(服务器、GPU)搭建起了云游戏平台,并提供云游戏服务给玩家使用。SaaS就会使得玩家只能在云游戏服务提供商框架下玩游戏,而不能随心所欲地自己想玩什么就能玩什么。

本文则从IaaS的角度提供了一种云游戏的解决方案:通过购买云服务器厂商的廉价GPU服务器,自己搭建相关的云游戏环境,来获得高分辨率、稳定帧率、低延迟、超高自由度的云游戏体验。

前期探索

国庆前一天在快下班的时候,突发奇想,能不能用GPU云服务器来打游戏?

为了验证这个想法,直接就租了一台带A10显卡的GPU竞价实例来做实验。

上网冲浪找了一些网上的文章,学习如何在云服务器上搭云游戏环境。然而。。。中间走了很多弯路,弄到当天半夜12点多,还是以失败告终。

国庆前两天没啥事干,后续也还有一些零星思路,就继续折腾了两天,最终搭建成功了云游戏环境,非常舒服。

一般来说,云服务器里面的GPU实例都是不太能用来打游戏的。首先需要系统支持,所以不能再选Ubuntu系统了,要选Windows,云服务器厂商默认支持的只有Windows Server的系统镜像。

但即使用了Windows Server系统,也还是不太能打游戏,需要解决以下几个问题:

  • 显卡不支持,云服务器厂商提供的那些显卡都不是专门用作游戏用途的,如果想打游戏就要要用一些特殊的手法把显卡“解封”了才行
  • 游戏需要高帧率、低延迟的推流方案,像微软自带的RDP以及一些远控软件是不太行的,需要更为优秀的推流方案

显卡解封

英伟达的显卡一般分为以下几种类型:

  • 消费级显卡,GeForce系列显卡,RTX 4090、RTX 3090、RTX 2080、GTX 1080Ti等,主要是给玩家打游戏娱乐用的显卡
  • (数据中心)专业级显卡
    • Quadro系列显卡,Quadro P4000、Quadro RTX 6000、Quadro RTX 8000等,主要是用来专业可视化设计和创作(工业渲染、影像剪辑、动画制作)
    • Tesla、Ampere系列显卡,Tesla T4、Ampere A10、Ampere A100等,主要是用在数据中心(大型机房)的显卡,卖给企业用的

云服务器厂商的GPU都是数据中心类型的,这些显卡一般都要安装相关的驱动和CUDA SDK,来跑一些炼丹算法之类的东西,主要适用于深度学习、人工智能和高性能计算这些场景,并不适合用于图形处理(打游戏)。

如果一定要用这些显卡来打游戏的话,就得给这些数据中心类型的vGPU显卡装上Grid Driver(可用于图形处理等功能的显卡驱动)才行。而安装Grid Driver,是需要Nvidia的License授权的。所以,我们必须要先搞到对应的License,并安装对应的Grid Driver,才能愉快地解封打游戏这个功能。

据我所知,获取License有以下几种渠道:

  • 直接找Nvidia官方申请90天的vGPU试用License 。这个试用License是一定要用企业邮箱账号才能申请,而且申请的时候最好不要填中国的地址,亲测填了中国地区之后,7+天都没批下来。申请下来后,可以根据腾讯云的这篇文档 来配置。
  • 找Nvidia的渠道商买License,不过我没啥渠道能找到这些渠道商。。
  • 二手海鲜市场上有卖License的,价格还行,几百块钱就能买到,据说是永久授权,但没试过。
  • 腾讯云的GN7vw服务器,自带vDWS License,开一台服务器自己就安装好Grid Driver了。不过需要先去官网上开通一下权限 ,直接秒批,然后就能开GN7vw类型的GPU实例了。
  • 开GPU实例的时候,选择带Grid Driver的镜像。阿里云的镜像市场里就有“Windows Server 2019 中文版预装GRID 13驱动镜像 ”,腾讯云也有"Windows Server 2019中文版GPU基础镜像(预装GRID 11驱动) "。在创建GPU实例的时候,选择这些镜像,实例创建完毕后也会自带Grid Driver和对应License的,但就是会收几毛钱/小时的镜像费用。

各方案综合考虑之后,为了省事,我这边选择的是直接租自带Grid Driver的云服务器。

远程串流

云游戏是这样的:云服务器(host)上的GPU渲染游戏画面,并且通过互联网将游戏的音视频传输给本地电脑(guest),本地电脑再显示出来,玩家在本地电脑的画面上操作鼠标、键盘,然后本地电脑再通过互联网把这些键鼠操作传输给云服务器上的游戏进行反馈处理,这样就相当于玩上了“云游戏”。

现在虽然有很强力的GPU可以在云端帮我们渲染好游戏画面,但是怎么去解决远程串流的问题呢?

我一开始用的是微软自带的RDP(Remote Desktop Protocol,远程桌面协议)来连接云服务器的,但是这种连接方式无法提供高帧率、低延迟的游戏远程串流,打起游戏很卡,体验不是很好。

RDP可以简单地理解为:带有图形界面的ssh

后来上网找了一些解决方案 ,有:

  • Steam Link : Steam自带的串流方案,串流非steam游戏会限30帧
  • Moonlight :在N卡开源游戏串流协议之上构建起来的一个串流软件,但只支持GeForce/Quadro系列的显卡,不支持数据中心级别的显卡
  • Sunshine :Moonlight的host端实现,可以支持除N卡其他类型的显卡(例如A卡),但是实测好像也不太支持数据中心级别的显卡
  • Parsec :p2p模式的串流,host端直接用GPU压缩桌面显示的视频流,传输给guest做解码,内置各种强大的串流功能,是一款专为远程游戏而生的远程串流软件

Steam Link没怎么试过。

Moonlight和Sunshine都试着搭过,对数据中心级别的显卡极其不友好。

Parsec体验很不错,官方提供了傻瓜式的一键安装脚本,会自动配置远程游戏串流的各种环境。我也是用Parsec才成功搭好了云游戏环境,并且游戏体验很不错。

Parsec还支持多人(guests)同时连一个串流主机(host),可以做到多人一起玩游戏

具体步骤

环境:

  • 本地电脑:mbp + 插网线连接的电信300M网络(wifi有的时候会飘,为了网络稳定,最好还是插网线)
  • 远程GPU云服务器:腾讯云GN7vw云服务器

0x00 选购云服务器

云服务器的选购还是有好几种选项的:

  • 国内云厂商:阿里云腾讯云 等等,腾讯云有一个8.8元购200代金券的GPU优惠

  • 国外云厂商:AWSAzureGCP 等等,不过需要有外国信用卡才能白嫖免费试用计划

  • 还有发现的一个专门卖GPU云服务器的恒源智享云 ,价格也都很便宜

我这边是用腾讯云GN7vw云服务器来搭建的。

在选购云服务器的时候,要选择“GPU机型”,并且选择GN7vw类型,在南京地区可以时常刷到有可售的竞价实例,配置高达16c64g + 一颗T4显卡(打游戏相当于Geforce GTX 1660),基本上能满足大部分游戏需求了。

在租云服务器的时候,地区最好选离自己最近的,这样网络延迟可以做到最低,游戏体验也会更好一点。

系统镜像需要选择Windows Server。

如果没有GN7vw类型的服务器了,或者想要追求比T4性能更高的显卡,选择其他类型的GPU实例也是可以的,但这个时候就要选择镜像市场里的带Grid Driver的Windows Server系统镜像了。

存储用的云硬盘容量可以适当增大一点,可以选择几百GB,因为有些游戏比较大,默认的50GB可能到时候就不够装了。

image-20221002175326308

流量选择“按使用流量”计费,并且直接把外行带宽拉到100Mbps,对外串流还是需要比较大的流量带宽的。

安全组默认的就可以,一定要开放3389端口,不然等会儿RDP远程连不上去了。

image-20221007224254369

这样,最终这台16c64g + 500GB + T4的云服务器的费用只需1.72/h就可以租下来。

image-20221007231301121

0x01 RDP连接

创建好云服务器后,就可以开始远程连接这台云服务器来做一些操作了。

mbp上需要下载一个Microsoft Remote Desktop软件,才能连上云上的Windows Server服务器。

在Microsoft Remote Desktop里新建一个远程主机,并且输入对应的公网IP地址,以及相关的administrator管理账号。

Screen Shot 2022-10-07 at 23.07.25

再双击配置好的远程主机,就能实现RDP远程桌面连接。

0x02 配置全局代理

因为后续运行Parsec一键安装脚本的时候,会请求一些google的域名,为了防止中途出错,要先挂一个全局的代理。

我这边用的是Clash ,可以用一些法子把Clash传到云服务器上,安装后导入代理配置,开启系统代理。

image-20221007234021907

0x03 Parsec环境

打开powershell,输入一键安装脚本 :

1
2
3
4
5
6
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
$ScriptWebArchive = "https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool/archive/master.zip"
$LocalArchivePath = "$ENV:UserProfile\Downloads\Parsec-Cloud-Preparation-Tool"
(New-Object System.Net.WebClient).DownloadFile($ScriptWebArchive, "$LocalArchivePath.zip")
Expand-Archive "$LocalArchivePath.zip" -DestinationPath $LocalArchivePath -Force
CD $LocalArchivePath\Parsec-Cloud-Preparation-Tool-master\ | powershell.exe .\Loader.ps1

上述脚本会自动去下载并且执行Parsec的GitHub仓库里ps脚本,完成Parsec远程推流所需的环境配置、Chrome安装、Parsec安装等操作。

image-20221007234235015

脚本大概会跑个几分钟,然后会弹出来一个Cloud GPU Updater的界面,问我们要不要去安装相应的GPU驱动,由于系统镜像里自带了Grid Driver,所以这一步选择“N”退出。

image-20221007235140182

脚本运行完毕后,就会发现系统应用里多了一个Parsec。

image-20221007235209748

打开,注册一个Parsec账号,并登陆。

这样,游戏串流的Host主机就成功上线了。

0x04 Parsec连接

回到本地主机,本地主机也需要安装Parsec软件,并且登陆同一个账号。

登陆之后,就会发现多了一台远程的腾讯云主机,点击“Connect”就可以远程连接上去。

image-20221007235738739

此时,可以先把RDP的连接断掉,然后再用Parsec来连接。

用Parsec连接之后,就可以通过左上角悬浮的一个Parsec图标来调整分辨率和网络带宽限制。

image-20221007235518004

image-20221007235536385

这样就成功完成了Parsec远程推流。

接下来,只要去下载游戏,开始愉快地玩耍即可~

游戏体验

尝试了一下串流2k分辨率的荒野大嫖客2,Parsec显示整个串流的延迟有:远端视频编码8.33ms + 网络传输10.81ms + 本地视频解码13.40ms = 32.54ms。

image-20221007232811918

可以看到,用Parsec来远程串流,是可以实现超低的延迟的,而且帧率稳定在60帧,分辨率也最高能达到4k,体验真的跟本地主机打游戏基本没啥区别了。


为了测试数据中心级别显卡打游戏的性能,我又租了个一台A10显卡(等价于RTX 3070?),测试了一下。

2077,4k分辨率+“超级”特效,平均帧率在35左右。

2077-4k

全战三国,2k分辨率+高画质,平均帧率可以达到80;但是4k分辨率+最高画质,平均帧率就只有30。

threekingdom-2k

threekingdom-4k

荒野大嫖客,4k分辨率本地解码跟不上。。测了一下2k+最高画质,平均帧率在57。

red_dead_redemption-2k

大概就测了这么几个游戏,可以看到A10显卡还是挺能打游戏的,4k分辨率的条件下,基本上绝大多数3A大作都能拿下。


这样一套云游戏解决方案,搭建下来,大概一小时只需要小几块钱的服务器租用费用+一点点流量费用,就可以实现在配置很一般的电脑上玩上3A大作,确实要比去网吧便宜很多。

云服务器也不必一直租着,不想玩的时候,就可以把配置好的云游戏环境制作成镜像,等下次想要再玩的时候,直接启动预存的镜像,就能直接开玩,

彩蛋

既然Parsec的远程推流体验这么好,那是不是也可以用来干一些其他的事情呢?

就比如说异地的情侣,之前可能就只能用腾讯会议之类的软件来一起远程看电影,但腾讯会议会限制分辨率和帧数(大概1440*900分辨率+25帧),观影体验其实也就一般般。

那么,现在就可以转用Parsec来一起远程看电影:先租一台廉价的云服务器,云服务器上搭好Parsec环境,并且登陆账号开启远程串流;两个人再在各自本地电脑/手机/平板上登陆同一个Parsec账号,然后连接这台云服务器,就可以实现双方画面音频一致,并且获得超高分辨率(最高4k)+稳定60帧的观影体验。

而且也不会受到腾讯会议对视频内容的安全审查,两个人想看什么就看什么