具有图形计算能力的云服务器,指搭载了图形计算卡(GPU),可以被使用者通过互联网访问,并且使用GPU进行图形运算的各种驱动、许可、环境均就绪的云服务器。一般来说需要的关键资源如下:

  • 搭载GPU的云主机
  • 安装了GRID驱动的操作系统
  • (可选)推流高品质音视频的软件
  • (可选)允许P2P推流的网络环境

下面详细记录具体的步骤和注意事项:

1. 创建搭载GPU的云主机

——由云服务供应商提供,收费。

搭载GPU(本文以Nvidia GPU为例)的云主机,应该同时具有运行操作系统所需的各种硬件如CPU、RAM等。一般由云服务器供应商一揽子提供,根据供应商的不同,命名可能为:“云服务器”、“弹性计算服务器”、“实例”、“Instance”、“EC”等。这种类型的资源一般是云服务器供应商最重要的产品,因此应该不难找到。

图形计算一般需要整颗GPU,因此部分提供1/4颗、1/2颗GPU的计算加速型云服务器并不能实现本文所述的功能,需注意避免。

所谓“云服务器供应商”,主流供应商包括但不限于:AWS(Amazon Web Services)、Google Cloud、阿里云、腾讯云。前两者主要在海外使用,后两者主要供在国内、以及在海外但不能适应海外供应商服务特点的用户使用。不建议使用非主流供应商,因为搭建过程中可能会出现与供应商具体硬件提供方式特点而产生的问题,而非主流供应商的用户社区太小,往往不能为这些问题提供解决方案。

其他重要资源如公网IP、带宽、云硬盘等一般供应商都会默认提供,不再详述。

2. 安装具有GRID驱动的操作系统

——由云服务供应商提供,免费或收费。

操作系统,如Windows Server和Linux。本文以Windows Server为例。在云服务器供应商一般以“镜像”(“Mirror”、“AMI”、“系统映像”)形式提供,省去了系统的安装时间,直接以硬盘拷贝形式分发。该镜像的选择非常重要,但若要按本文推荐的方式搭建云服务器,则此处不能直接选择普通操作系统镜像,下文详述原因。

GRID驱动非常重要,云服务器上的GPU与本地计算机的GPU不同,因为云主机并不是整机而是虚拟机,所以尽管GPU是整颗GPU,在云主机上仍然以虚拟GPU(即vGPU)形式存在。与CUDA不同,若要使用vGPU进行图形计算,必须要获得Nvidia的许可(licensing)。该许可虽然可以免费申请,但需要若干天数的人工审核,免费期间也有限,手续也未必不繁杂,因此笔者非常不建议从Nvidia获取该驱动和许可。此时,有两种曲线救国的方案:

下载第三方安装包:(未经验证)https://cloud.google.com/compute/docs/gpus/grid-drivers-table

使用云服务器供应商的预装GRID驱动的镜像:(推荐的方法)
主流云服务器供应商意识到了用户安装grid驱动和申请license的不便,往往提供了预装GRID驱动的系统镜像。直接安装这类镜像可以省去解决驱动问题的时间,避免和Nvidia发生关系。

需要注意的是,安装好GRID驱动后,不要再更新或安装GPU驱动了。

部分供应商(如腾讯云)的此类镜像为收费镜像,可能在新建云主机页面不能直接选择,需要找到镜像市场中该镜像的页面,点击购买,就能自动跳转到新建云主机页面并选中所需的镜像。

↓腾讯云购买预装GRID驱动镜像的页面示例

↓AWS选择预装GRID驱动镜像的页面示例

3. 选择和安装推流软件

为了将云服务器渲染的画面低延迟地推流到本地计算机,需要专用的推流软件

  • 微软远程桌面(可以用作初始搭建环境的工具,不推荐用于推流。)
  • 向日葵(似乎不支持P2P,国内软件,不赘述,不推荐。)
  • Nvidia推流搭配Moonlight(Nvidia没有为专业卡提供推流软件,在Geforce Experience中提示显卡型号不支持推流,因此Moonlight方案可能行不通。欢迎建议。)
  • Steam流式传输(P2P,并不稳定,似乎兼容性也不是很好,有Bug)
  • Parsec(国外软件,注册和登录时需连接国外服务器,连接很脆弱。但是建立P2P连接后连接非常稳定,软件提供的各种功能非常完备,并且提供了安装脚本。)

以下是采用Parsec的步骤:

首先通过微软远程桌面连接服务器,前往Parsec官网下载安装Parsec:https://parsec.app/。安装后启动一次并登录/注册账号。

然后到Parsec的运行环境搭建指导页,复制脚本到Power Shell运行:https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool

该脚本长得像这样:

[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  

有两点需要特别注意:1、因为要从Google服务器获取文件,国内运行该脚本时请科学上网;2、运行到GPU Updater时,因为我们已经使用了安装GRID驱动的镜像,在询问是否安装GPU驱动时回复N,切记。

脚本运行完成后重启服务器,Parsec应该已经在自动运行了。在本地计算机上也安装Parsec:https://parsec.app/(因为是客户机,无需执行脚本)。如果互联网环境较好(客户机也拥有公网IP),此时登录账号应该可以看到服务器已经在线,可以连接。

如果已经登录了Parsec但看不到服务器,则有两种可能:

  • 服务端出了问题,Parsec没有如愿运行。——用远程桌面登录服务器排障。出现该问题很可能是之前的安装脚本没有完整成功地运行。
  • 服务端和客户端网络不能连通。——进入下一步搭建虚拟局域网。

4. 虚拟局域网工具Zerotier,使P2P推流成为可能

由于国内互联网供应商提供的网络多数覆盖有多层NAT,也没有公网IP,裸连实现P2P几乎不可能,更不用谈稳定。即便是中国电信优质网络也未必能实现。好在虚拟局域网技术提供了解决方案。Zerotier便是虚拟局域网解决方案中的佼佼者。

Zerotier的安装非常简便,首先登陆官网:https://www.zerotier.com/,在官网注册账号,在官网创建网络,在服务端(云主机)和客户端(本地机)都下载zerotier软件,然后在服务端和客户端都运行Zerotier,并连接到同一网络,能互相ping通对方在虚拟局域网里的ip地址(通常为172.23.*.*)即为搭建成功。

通过ipconfig -all查看本机在虚拟局域网里的ip地址
从本地机Ping云主机,平均延迟仅为8.9ms,非常优秀

完成这些步骤之后,Parsec应该就能顺利建立P2P连接了

5. 成功连接!

在环境搭建完成并成功连接后,可能还会遇到诸般问题,下面一一解决:

  1. 全屏连接后不知道怎么切换断线、更改推流参数。
    ——连接后画面左上角有一个Parsec Logo形状的按钮(Overlay),点击即可看到菜单、连接延迟等信息。
  2. 连接后分辨率为1024*768,调整Parsec中的分辨率无效。
    ——服务端右键桌面 → Nvidia控制面板 → 更改分辨率。
  3. 画面卡顿。
    ——在Overlay菜单中调低Bandwidth Limit。
  4. 画面模糊。
    ——在Overlay菜单中调高Bandwidth Limit。
  5. 画面要么卡顿、要么模糊、要么既卡顿又模糊。
    ——带宽不足,检查本地网络带宽和服务器带宽。网络质量很重要。至少保证服务端10Mbps上行带宽和客户端10Mbps下行带宽。
  6. 延迟高。
    检查Overlay上方显示的Decode(客户端解码,客户端性能决定)、Encode(服务端编码,服务端性能决定)、Network(网络连接,网络基建环境决定),哪个高就针对性地解决。
连接时的Overlay菜单

后记:

  1. 本文省略了搭建普通CPU计算型云服务器的步骤细节,但这类操作非常简单,且云服务商提供了明确的指引。如果读者不能独立完成搭建普通云服务器的步骤,建议不要尝试本文记载的方法,以免浪费时间和金钱。
  2. 笔者国内住所本地网络环境极差,ISP臭名昭著,身处上海但网络出口时常跳转到周边省市。但在Zerotier搭建虚拟局域网后发现延迟并不高,因此各种坑爹ISP受害者通过正确配置Zerotier也能尝试低延迟P2P连接。
  3. 笔者在AWS和腾讯云都实现了云上的图形计算并低延迟推流音视频。AWS使用大型GPU实例需要写申请,比较麻烦且价格教贵,但在国外,腾讯云和阿里云并不好用。在上海时使用腾讯云效果不错。