创建 GPU 加速的 Linux 虚拟工作站

本教程介绍如何创建具备以下特点的 Linux 虚拟工作站:运行 CentOS,且挂接了具备显示能力的 GPU。(如需创建 Windows 工作站,请参阅有关创建 GPU 加速的 Windows 虚拟工作站的教程。)Google Cloud 提供三种具备显示能力的 GPU:NVIDIA T4、NVIDIA Tesla P4 和 NVIDIA Tesla P100。

创建虚拟工作站后,您将学习如何使用 Teradici PC-over-IP (PCoIP)(一种广泛应用于媒体和娱乐行业的远程桌面协议)对其进行远程访问。PCoIP 提供了对媒体制作工作负载至关重要的功能,例如色彩精确度以及对无损显示的支持。

目标

  • 创建带有 GPU 的 Compute Engine 实例。此实例是虚拟工作站的基础。
  • 在虚拟工作站上安装 NVIDIA 驱动程序。
  • 在虚拟工作站上安装 Teradici Cloud Access Software。
  • 使用 PCoIP 软件客户端或 Zero Client(一种硬件端点)从 Mac 或 Windows 计算机连接到虚拟工作站。要从 Linux 计算机访问虚拟工作站,请与您的 Teradici 代表联系。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计用量来估算费用。截至撰写本文时,本教程中所述的典型媒体工作站配置的费用约为每小时 US$1.36。

虚拟工作站的构成资源以及影响本教程中所述费用的因素包括:

互联网出站流量表示从虚拟工作站流向本地显示客户端的数据量,按互联网出站流量费率计费。 影响 PCoIP 会话期间数据出站流量的变量包括带宽、屏幕分辨率、显示器数量、使用的应用以及每个显示器上的活动类型。 此示例中的费用是按 10 Mbps 的平均用量来计算的。如需了解其他工作负载要求,请参阅 Teradici 的工作流规划指南

准备工作

本教程使用 gcloudgsutil 命令,您可以通过从 Cloud Console 启动的 Cloud Shell 实例运行这些命令。如果要在本地工作站上使用 gcloudgsutil,请安装 Cloud SDK。本教程将向您介绍如何在 Cloud Shell 中运行命令;如果您在工作站上使用 Cloud SDK,请相应地调整指令。

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Compute Engine API。

    启用 API

此外,请确保满足以下条件:

  • 一个 Google Cloud 项目,该项目在您所选地区拥有虚拟工作站 GPU 配额。您可以使用 gcloud compute accelerator-types list 命令获取 GPU 可用性信息列表。
  • Google Chrome 浏览器(用于访问 Cloud Console)。
  • Teradici Zero Client 或者适用于 Windows、Mac 或 Linux 的最新 Teradici 软件客户端(用于访问虚拟工作站)。
  • Teradici Cloud Access Software 许可。您可以注册试用版许可,或联系您的 Teradici 代表。您将获得一个用于此虚拟工作站的试用注册码,有效期为 30 天。

了解架构

下图显示了按照本教程部署单个虚拟工作站需要用到的组件。图中显示的可选组件包括用于连接到虚拟工作站、对象和共享存储空间的几种不同方式,以及用于提供第三方许可的另外一个实例。

虚拟工作站架构。

选择加速器

部署虚拟工作站时需要考虑的一项重要因素是您的位置与您创建的实例之间的延迟时间。延迟时间越短,体验越好。因此,您最好选择与您的地理位置最近的地区。如需详细了解区域和地区,请参阅地理位置和区域

  1. 打开 Cloud Shell。(如果您使用的是 Cloud SDK,请在计算机上打开终端窗口。)

    转到 Cloud Shell

  2. 获取可使用 GPU 的地区的列表:

    gcloud compute accelerator-types list

    记下距您的地理位置最近的地区。

  3. 设置您要使用的地区:

    gcloud config set compute/zone zone

    zone 替换为您所使用的地区的名称,例如 us-west2-b

选择机器类型

您可以将 P4 GPU 挂接到任何机器类型,但添加到虚拟工作站的每个 GPU 都必须至少对应一定数量的 vCPU。这可以防止其中任一项资源超额预配。对于 NVIDIA Tesla P4,最多可将 24 个 vCPU 连接到 1 个 GPU。要为虚拟工作站添加 24 个以上的 vCPU,每增加 24 个 vCPU,就必须再添加一个 P4 GPU。例如,对于拥有 48 个 vCPU 的虚拟工作站,您需要挂接 2 个 P4 GPU。

在本教程的示例中,虚拟工作站拥有 24 个 vCPU,这是每个 NVIDIA Tesla P4 GPU 允许的 vCPU 数量上限。

创建虚拟工作站

为了使用 Teradici Graphics Agent(在本教程的后面部分,您将在虚拟工作站上安装该代理),您必须在创建虚拟工作站期间启用 IP 转发并允许 HTTPS 服务器流量。

  1. 在 Cloud Shell 中,创建 Compute Engine 虚拟工作站实例。您必须为 name 等占位符提供值。

    gcloud compute instances create name \
        --machine-type machine-type \
        --accelerator type=accelerator,count=num-gpus \
        --can-ip-forward \
        --maintenance-policy "TERMINATE" \
        --tags "https-server" \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size size

    例如:

    gcloud compute instances create test-vws \
        --machine-type custom-24-32768 \
        --accelerator type=nvidia-tesla-p4-vws,count=1 \
        --can-ip-forward \
        --maintenance-policy "TERMINATE" \
        --tags "https-server" \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size 100

    创建虚拟工作站后,系统将显示机器状态。输出类似于以下内容:

    Created https://www.googleapis.com/compute/v1/projects/project/zones/us-west2-b/instances/test-vws.
    NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS test-vws us-west2-b custom (24 vCPU, 32.00 GiB) 10.168.0.3 XX.XXX.XX.XXX RUNNING

    虚拟工作站是在项目的默认 VPC 网络中创建的。如果要在其他 VPC 网络中创建虚拟工作站,请在命令中添加以下标志:

    --network=network
    

    network 替换为要使用的网络的名称。

  2. 记下虚拟工作站的外部 IP 地址。在本教程的后面部分,您将用到该地址。

登录虚拟工作站

创建虚拟工作站后,请登录机器来配置该工作站。

  1. 在 Cloud Shell 中,连接到新建的虚拟工作站:

    gcloud compute ssh test-vws
  2. 设置帐号密码。Teradici PCoIP 需要设置用户密码。

    sudo passwd `whoami`

    出现提示时,输入一个密码。在本教程的后面部分,当您通过 Teradici PCoIP 客户端登录您的虚拟工作站,将会用到这个密码。

安装图形库和窗口管理器

默认的 Google Cloud CentOS 7 映像是 CentOS 7.x 的极简安装。接下来,安装运行虚拟工作站(用作图形工作站)所必需的库。在本教程中,您还要安装 KDE 窗口管理器。

  1. 安装所需的组件:

    sudo yum -y update
    sudo yum -y install kernel-devel
    sudo yum -y groupinstall "KDE desktop" "X Window System" "Fonts"
    sudo yum -y groupinstall "Development Tools"
    sudo yum -y groupinstall "Server with GUI"
  2. 重新启动工作站:

    sudo reboot

    您通过 Cloud Shell 建立的连接将会关闭。

安装 NVIDIA 驱动程序

对于计算和显示工作负载,Google Cloud 上的 NVIDIA T4、NVIDIA Tesla P4 和 NVIDIA Tesla P100 GPU 仅当搭配符合条件的 NVIDIA Quadro Virtual Data Center Workstation (vWS) 驱动程序时才能正常运行。您可以从一个公共存储分区下载这些驱动程序。

  1. 重启虚拟工作站后,在 Cloud Shell 中重新连接到该虚拟工作站:

    gcloud compute ssh test-vws
  2. 在虚拟工作站上,使用 gsutil 获取最新驱动程序列表:

    gsutil ls gs://nvidia-drivers-us-public/GRID

    在本教程中,您将使用在撰写本文时可用的最新图形驱动程序,即 GRID8.0 Linux 驱动程序(版本 418.70)。您随时可以在 GRID 目录下查找最新的合格驱动程序(即具有最高的版本号);如果您发现版本更高的驱动程序,请使用更高的版本。

  3. 下载并安装该驱动程序。如果您要使用高于 418.70 版本的驱动程序,请相应地更改以下命令。

    curl -O \
    https://storage.googleapis.com/nvidia-drivers-us-public/GRID/GRID8.0/NVIDIA-Linux-x86_64-418.70-grid.run
    sudo bash NVIDIA-Linux-x86_64-418.70-grid.run

    在安装驱动程序的过程中,您可能会看到一些提示:

    • 如果系统提示您安装 32 位二进制文件,请选择
    • 如果系统提示您修改 x.org 文件,请选择
  4. 验证驱动程序是否已安装以及是否可以正常运行:

    nvidia-smi

    输出类似于以下内容:

    Thu Sep 20 21:58:23 2018
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.70       Driver Version: 418.70       CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla P4            On   | 00000000:00:04.0 Off |                    0 |
    | N/A   34C    P8     7W /  75W |      0MiB /  7611MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    

如果您未看到如上所示的输出内容,请参阅本教程后面的问题排查部分。

安装 Teradici Cloud Access Software

Teradici Cloud Access Software 提供在虚拟工作站上运行的图形代理,可将桌面传输到硬件或软件客户端。

  1. 在虚拟工作站上,添加 Teradici 软件:

    sudo rpm --import https://downloads.teradici.com/rhel/teradici.pub.gpg
    sudo yum -y install wget
    sudo wget -O /etc/yum.repos.d/pcoip.repo \
        https://downloads.teradici.com/rhel/pcoip.repo
  2. 更新软件代码库:

    sudo yum -y update
  3. 安装 Teradici Cloud Access Software:

    sudo yum -y install pcoip-agent-graphics
  4. 将显示状态设置为 graphical

    sudo systemctl set-default graphical.target
  5. 重新启动虚拟工作站:

    sudo reboot

注册 Teradici Graphics Agent

如需使用 Teradici Graphics Agent,您必须拥有本教程前面所述的许可。

  1. 在 Cloud Shell 中,重新连接到虚拟工作站:

    gcloud compute ssh test-vws
  2. 在虚拟工作站上,激活您的 Teradici Cloud Access Software 许可:

    pcoip-register-host --registration-code=registration-code

创建防火墙规则

PCoIP 客户端会使用多个端口与虚拟工作站通信。 您必须设置允许流量进出虚拟工作站的防火墙规则。

  • 在 Cloud Shell 中,创建用于打开所需端口的防火墙规则:

    gcloud compute firewall-rules create allow-teradici \
        --allow tcp:443,tcp:4172,udp:4172,tcp:60443

使用 PCoIP 客户端登录您的虚拟工作站

  1. 在本地计算机上,转到 Teradici 支持页面上的“PCoIP Clients”部分,然后下载、安装并启动适用于您的操作系统的 PCoIP 客户端应用。

  2. 选择新增关联项

  3. Host Address 字段中,输入虚拟工作站的外部 IP 地址。如果需要,可以输入连接名称。

    为虚拟工作站分配外部 IP 地址。

  4. 连接后,输入之前为虚拟工作站创建的用户名和密码,以进行身份验证:

    在虚拟工作站中进行身份验证。

  5. 选择要运行的桌面,然后点击连接 (Connect)。

    选择要连接到的桌面。

    几秒钟后,您会看到您的 Linux 桌面。

    虚拟工作站中的 Linux 桌面。

测试虚拟工作站

部署完虚拟工作站后,您可以使用多种工具来测试其性能和交互性:

  • 运行 glxgearsglmark2 等 GPU 基准测试工具,这些工具是在 Linux 工作站上测试图形性能的简易程序。
  • 安装开源 3D 软件包 Blender
  • 对于 V-RayOctaneMaxon 等常用渲染程序,运行渲染基准测试工具。
  • 使用 Google Chrome 来浏览您喜欢的网站或播放 YouTube 视频。

问题排查

本部分列出了在设置或连接到工作站时可能会遇到的一些问题。

NVIDIA-SMI 失败

问题:NVIDIA-SMI 因无法与 NVIDIA 驱动程序通信而失败。

解决方案:重新安装驱动程序并尝试再次运行 nvidia-smi。如果命令仍然失败,请尝试卸载 NVIDIA 驱动程序并安装 dkms 模块,然后重新安装驱动程序。这么做会将 dkms 模块注册到内核中,如此一来在更新内核时就无需再重新安装图形驱动程序。

X11 无法启动

问题:X11 无法按预期启动。

解决方案:确保系统中没有安装 Nouveau 图形驱动程序。Nouveau 驱动程序是某些 Linux 版本中内置的开源图形驱动程序。要确认是否存在 Nouveau 驱动程序,请在虚拟工作站 Shell 中运行以下命令:

lsmod | grep nouveau

如果您看到任何结果,那么在安装合格的 NVIDIA 图形驱动程序之前,请按照以下步骤禁止加载 Nouveau 驱动程序:

  1. 在虚拟工作站的 Shell 中以超级用户身份打开文本编辑器,然后将以下内容添加到文件 /etc/modprobe.d/blacklist.conf 的最后一行:

    blacklist nouveau
  2. 重新启动虚拟工作站:

    sudo reboot
  3. 虚拟工作站重新启动后,通过 Cloud Shell 重新连接到该工作站:

    gcloud compute ssh test-vws
  4. 以超级用户的身份修改文件 /etc/default/grub

  5. 找到名为 GRUB_CMDLINE_LINUX 的条目(如果不存在,请添加),然后在该条目中添加以下值:

    rd.driver.blacklist=nouveau nouveau.modeset=0

    请务必用引号括起该值。例如:

    GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0,38400n8 rd.driver.blacklist=nouveau nouveau.modeset=0"
  6. 生成新的 grub 配置,以纳入相应更改:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. 再次重新启动虚拟工作站:

    sudo reboot
  8. 虚拟工作站重启后,通过 Cloud Shell 重新连接到该工作站:

    gcloud compute ssh test-vws
  9. 确保 Nouveau 驱动程序已不再存在:

    lsmod | grep nouveau

    空白字符串表示没有安装 Nouveau 驱动程序。如需详细了解 Nouveau 驱动程序,请参阅 NVIDIA 文档中的 Common Problems(常见问题)。

无法连接到虚拟工作站

问题:您使用的是 PCoIP Zero Client,但无法连接到虚拟工作站。

解决方案:在连接虚拟工作站之前,请确保 Zero Client 已安装固件版本 6.1 或更高版本。如需了解详情,请与您的 Teradici 代表联系。

清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

完成本教程后,请清理您在 Google Cloud 上创建的资源,以免这些资源将来产生费用。

停用虚拟工作站

停用的虚拟工作站会产生永久性磁盘使用费。在停用虚拟工作站后,您随时可以重新启用。要停用虚拟工作站,请在 Cloud Shell 中运行以下命令:

gcloud compute instances stop test-vws

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除所有组件

  1. 删除虚拟工作站
  2. 删除防火墙规则

后续步骤