

Building a GPU workstation for visual effects with AWS
source link: https://www.tuicool.com/articles/hit/NfmuYfV
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Contributed by Mike Owen, Solutions Architect, AWS Thinkbox
The elasticity, scalability, and cost effectiveness of the cloud value proposition is attractive to media customers. One of the key design patterns in media and entertainment (M&E) workloads is using the cloud as a content lake and bringing the underlying processes closer without having to synchronize data. In this high-end graphics visualization business, a pixel-perfect, color-accurate, fully interactive native desktop experience is required for both Windows and Linux platforms. Visual effects (VFX) artists also require input peripherals such as latest-generation Wacom 8K pressure-sensitive tablets and Wacom Cintiq monitors to work as seamlessly as they do on-premises.
AWS offers Amazon EC2 G3 instances backed by NVIDIA Tesla M60 GPUs with powerful graphics capabilities: OpenGL 4.6, DirectX 12, CUDA 9.2, GRID 6.1. You can combine these instances with the Teradici streaming protocol via their Cloud Access Software (CAS) agent to enable a high-end desktop experience on either Windows or Linux with an on-demand pricing model to fit your business needs. Teradici PCoIP is a popular protocol in the M&E industry, where Teradici have delivered a custom silicon accelerated zero-client hardware device to deliver secure pixel streaming to on-premises monitors. AWS also enables customers to create managed virtual desktop environments with Amazon WorkSpaces Graphics bundles (Windows and Linux) orAmazon AppStream 2.0 (Windows). Both solutions offer a managed environment with GPU-backed instances. This blog describes how you can set up an unmanaged VFX desktop using Amazon EC2 G3 instances combined with high-performance storage and scalable compute options such as Amazon EC2 Spot Instances .
Configuration
The following diagram describes a typical Windows and Linux configuration. In this setup, you use a Teradici PCoIP Zero Client over a dedicated network connection from your on-premises location via your chosen network provider to their nearest AWS Region containing an Amazon EC2 G3 instance.AWS Direct Connect provides a low-latency, high-bandwidth dedicated connection that doesn’t traverse the public internet. With the Windows instance, you might use a creative pen display such as a Wacom Cintiq monitor or, on a Linux instance, the latest generation of Wacom 8K pressure-sensitive tablets. You can connect both types of environments to dual 2K monitors and be ready for film VFX work.
Once built, the g3.4xl instance runs your custom Amazon Machine Image (AMI) with encrypted volume(s) in Amazon Elastic Block Storage (EBS) containing all your software, pulling floating licenses from your on-premises license servers where necessary. For Linux, you have the option of centrally installing your software via a fast NVMe SSD–based i3 instance type and building a minimal-sized boot AMI. In both cases, you can add encrypted Amazon EBS SSD volumes for increased local storage. The Teradici CAS agent runs on each individual G3 instance and can be provisioned, brokered, and managed by the optional Teradici Cloud Access Manager (CAM) solution. Finally, Amazon WorkSpaces Graphics bundles are compatible with a Teradici zero client, providing easy access to a fully managed Windows desktop. This might be useful for Linux-based studios that require ad hoc Windows usage such as Adobe Creative Cloud.
In this configuration, a Teradici zero client interacts with the provisioned desktop (served on a G3 instance) in the cloud. The Teradici CAS agent captures the frame buffer and sends it in real time to the zero client over the network via UDP using the PCoIP protocol. A smooth, reliable experience depends on a low-latency and high-bandwidth connection to the Amazon EC2 instance hosting the desktop. Bandwidth requirements depend on the number of monitors used, resolution, frame rate, and lossless quality of the desktop experience. For Wacom tablet support, Teradici CAS 2.12 requires the latency level to be less than 25 ms. You can use ping.psa.fun or cloudping.info to check the latency time of public pings between your location and your closest AWS Region. Ideally, you will provision an AWS Direct Connect connection for private (doesn’t traverse the public internet) and fast (low-latency) connectivity to the AWS Region from your location. You can also use a public internet connection for initial testing. In both cases, you can route traffic over a VPN for added security.
Shortcut
Instead of doing a manual build, you can visit theAWS Marketplace and subscribe to a Teradici-provided pre-built AMI. It already has the NVIDIA GRID driver and Teradici CAS software installed, configured, and licensed as part of the overall usage cost. See the following offerings on AWS Marketplace:
- Linux: Teradici Cloud Access Software for CentOS 7
- Windows: Teradici Cloud Access Software for Windows 2016
Prerequisites
Make sure that everything in the following list is in place before deploying to either platform:
- Create anAWS account.
- Ensure that your AWS account has an EC2 key-pair associated with it by going to the AWS Management Console and checking Key Pairs under Network and Security in the applicable AWS Region.
- Set up an AWS account <ACCESS KEY> and <SECRET ACCESS KEY> to access the NVIDIA GRID driver from an Amazon S3 bucket. The deployment instructions explain how to install and set up the AWS Command-Line Interface (AWS CLI).
- Minimum version: CentOS 7.2 or Windows 2016.
- Recommended Teradici PCoIP Zero Client firmware version: 6.0. Contact Teradici to download.
- Contact Teradici who will provide a 60-day trial license : <TERADICI LICENSE CODE> for Cloud Access Software. You should receive your license within 1 business day. If you don’t receive your license, please contact [email protected] .
- You must have superuser (root) or Administrator privileges to the AMI.
- The Amazon EC2 security group provides a stateful firewall on each instance via a set of rules. The following inbound ports must be available on the Amazon EC2 instance from a specific client’s source IP address (restrictive access).
Deploying the desktop on Linux
For our Linux deployment, we use the latest CentOS 7.5 AMI from AWS Marketplace and install the NVIDIA/Xorg/KDE/Wacom stack to create a fully functioning VFX Linux desktop environment. This stack contains the following components:
- CentOS 7.5.1804_2 AMI
- NVIDIA Grid 6.1 (390.57 May 2018) driver
- Teradici CAS 2.12
- Wacom 0.40 driver
Feel free to use your own CentOS 7.2+ AMI and modify the step by step instructions accordingly.
Setting up the desktop on Linux
To launch a g3.4xl instance in the closest AWS Region in your AWS account using the created key-pair and security group, use an AMI ID from the ones in the following table. For reference, search for the AMI using the keywords CentOS Linux 7 x86_64 HVM EBS 1804_2 .
AWS Region AWS Region ID AMI ID US East (N. Virginia) us-east-1 ami-d5bf2caa US East (Ohio) us-east-2 ami-77724e12 US West (N. California) us-west-1 ami-3b89905b US West (Oregon) us-west-2 ami-5490ed2c EU (Frankfurt) eu-central-1 ami-9a183671 EU (Ireland) eu-west-1 ami-4c457735 Asia Pacific (Tokyo) ap-northeast-1 ami-3185744e Asia Pacific (Singapore) ap-southeast-1 ami-da6151a6 Asia Pacific (Sydney) ap-southeast-2 ami-0d13c26fOnce the g3.4xl instance has passed its EC2 instance 2/2 status checks, we can build in true AWS style.
First, log in to the instance and set up the environment.
# ssh into running Amazon EC2 instance ssh centos@ec2-<IP-ADDRESS>.<AWS-REGION>.compute.amazonaws.com # yes # set a password for your user sudo passwd centos # disable selinux sudo sed -ir 's/SELINUX=\(disabled\|enforcing\|permissive\)/SELINUX=disabled/' /etc/selinux/config # install the EPEL repository sudo yum install wget -y sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -i epel-release-latest-7.noarch.rpm # run yum update to make sure all packages are up-to-date sudo yum update -y # install the "Server with GUI" group sudo yum groupinstall "Server with GUI" -y # prefer KDE desktop? (optional) sudo yum groupinstall -y "KDE Plasma Workspaces" sudo systemctl set-default graphical.target echo "exec startkde" >> ~/.xinitrc startx # uninstall KDE (optional) # sudo yum groupremove -y "KDE Plasma Workspaces" # sudo yum autoremove -y # sudo reboot # reboot to make sure the latest installed kernel is running sudo reboot # install kernel-devel sudo yum install kernel-devel -y
Next, install and register the Teradici CAS 2.12 software.
# import the Teradici signing key sudo rpm --import https://downloads.teradici.com/rhel/teradici.pub.gpg # grab the PCoIP repo file sudo curl -o /etc/yum.repos.d/pcoip.repo https://downloads.teradici.com/rhel/pcoip.repo # install PCoIP agent package sudo yum install pcoip-agent-graphics -y # load vhci-hcd kernel modules sudo modprobe -a usb-vhci-hcd usb-vhci-iocifc # register with the licensing service pcoip-register-host --registration-code=<TERADICI LICENSE CODE> # set up PCoIP agent config to enable USB echo """pcoip.grid_diff_map = 0 pcoip.enable_usb = 1 pcoip.usb_auth_table = "23XXXXXX" pcoip.usb_unauth_table = "" """ | sudo tee /etc/pcoip-agent/pcoip-agent.conf # make sure you're running latest pcoip-agent version sudo yum update pcoip-agent-graphics
Then install the NVIDIA GRID graphics driver and apply performance optimization to its configuration.
# NVIDIA GRID driver # https://docs.nvidia.com/grid/index.html # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html # install nano editor sudo yum install nano -y # remove any old NVIDIA drivers/CUDA sudo yum erase nvidia cuda # disable the nouveau open source driver for NVIDIA graphics cards sudo touch /etc/modprobe.d/blacklist.conf # paste the following lines in one go into your shell cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv EOF # edit the /etc/default/grub file and add the line: sudo nano /etc/default/grub GRUB_CMDLINE_LINUX="rdblacklist=nouveau" # rebuild grub2 config sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo reboot # install pip curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.py --user # install AWS CLI pip install awscli --upgrade --user # configure AWS CLI credentials aws configure # AWS Access Key ID [None]: <ACCESS KEY> # AWS Secret Access Key [None]: <SECRET ACCESS KEY> # Default Region name [None]: <AWS REGION> # Default output format [None]: <enter> # 390.57 driver aws s3 cp --recursive s3://ec2-linux-nvidia-drivers/latest/ . chmod +x NVIDIA-Linux-x86_64-390.57-grid.run sudo /bin/bash ./NVIDIA-Linux-x86_64-390.57-grid.run # respond to the NVIDIA installer prompts as follows: # <accept> the EULA # <Yes> to register kernel module sources with DKMS # <No> to installing 32-bit libraries # <No> to modifying the x.org file at end of install # <OK> to complete the installer # check driver installed nvidia-smi -q | head # g3/NVIDIA optimization settings # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/optimize_gpu.html sudo nvidia-persistenced sudo nvidia-smi --auto-boost-default=0 sudo nvidia-smi -ac 2505,1177 sudo reboot
Install CUDA if required by any of your VFX software such as Autodesk Maya or SideFX Houdini:
# install CUDA and OpenCL # https://developer.download.nvidia.com/compute/cuda/9.2/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf # https://developer.nvidia.com/cuda-downloads?target_os=Linux⌖_arch=x86_64⌖_distro=CentOS⌖_version=7⌖_type=runfilelocal wget https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux mv cuda_9.2.88_396.26_linux cuda_9.2.88_396.26_linux.run # don't install the actual graphics driver, just CUDA 9.2 toolkit, sym-link sudo /bin/sh cuda_9.2.88_396.26_linux.run ######################################### Do you accept the previously read EULA? accept/decline/quit: accept Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.26? (y)es/(n)o/(q)uit: n Install the CUDA 9.2 Toolkit? (y)es/(n)o/(q)uit: y Enter Toolkit Location [ default is /usr/local/cuda-9.2 ]: Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y Install the CUDA 9.2 Samples? (y)es/(n)o/(q)uit: n Installing the CUDA Toolkit in /usr/local/cuda-9.2 ... ######################################### # CUDA Patch 1 (Released May 16, 2018) wget https://developer.nvidia.com/compute/cuda/9.2/Prod/patches/1/cuda_9.2.88.1_linux mv cuda_9.2.88.1_linux cuda_9.2.88.1_linux.run sudo /bin/sh cuda_9.2.88.1_linux.run # Ensure these ENV VARs are present: /etc/profile.d export PATH=/usr/local/cuda-9.2/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
Finally, install Wacom drivers.
# install Wacom driver # https://github.com/linuxwacom/input-wacom/releases cd ~ wget https://github.com/linuxwacom/input-wacom/releases/download/input-wacom-0.40.0/input-wacom-0.40.0.tar.bz2 tar jxf input-wacom-0.40.0.tar.bz2 cd input-wacom-0.40.0 sudo su ./configure make && make install modprobe wacom dracut --force sudo touch /etc/X11/xorg.conf.d/99-wacom-pressure2k.conf # edit Wacom conf file as follows sudo nano /etc/X11/xorg.conf.d/99-wacom-pressure2k.conf Section "InputClass" Identifier "Wacom pressure compatibility" MatchDriver "wacom" Option "Pressure2K" "true" EndSection # check Elastic Network Adapter (ENA) is running on your instance modinfo ena ethtool -i eth0 aws ec2 describe-images --image-id <AMI-ID> --query 'Images[].EnaSupport' # if that command returns false, proceed to enable it # make sure that you have AWS CLI installed with AWS credentials on your local machine sudo shutdown now aws ec2 modify-instance-attribute --instance-id <CURRENT EC2 INSTANCE ID> --ena-support # if you're using a pre-existing Linux AMI, you need to install the ENA driver yourself # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#enhanced-networking-ena-linux sudo reboot
Deploying the desktop on Windows
We use the latest AWS-provided Windows 2016 AMI for our deployment and install the NVIDIA/Teradici/Wacom stack to create a fully functioning VFX Windows desktop environment. This stack contains the following components:
- Windows Server 2016 Base 2018.04.11
- NVIDIA Grid 6.1 (391.58 May 2018) driver
- Teradici CAS 2.12
- Latest Wacom driver
Feel free to use your own Windows 2016 AMI and modify the step by step instructions accordingly.
Windows Instructions
To launch a g3.4xl instance in the closest AWS Region in your AWS account using the created key-pair and security group, use an AMI ID from the ones in the following table. For reference, the AMI name is Microsoft Windows Server 2016 Base 2018.04.11 .
AWS Region AWS Region ID AMI ID US East (N. Virginia) us-east-1 ami-3633b149 US East (Ohio) us-east-2 ami-5984b43c US West (N. California) us-west-1 ami-3dd1c25d US West (Oregon) us-west-2 ami-f3dcbc8b EU (Frankfurt) eu-central-1 ami-b5530b5e EU (Ireland) eu-west-1 ami-4cc09a35 Asia Pacific (Tokyo) ap-northeast-1 ami-0e809272 Asia Pacific (Singapore) ap-southeast-1 ami-00a2847c Asia Pacific (Sydney) ap-southeast-2 ami-7279b010Once the g3.4xl instance has passed its Amazon EC2 instance 2/2 status checks, let’s go build:
# use AWS Management Console to right-click EC2 instance and "Get Windows Password" -> <RDP PASSWORD> # RDP into machine # address: ec2-<IP-ADDRESS>.<AWS-REGION>.compute.amazonaws.com # username: Administrator # password: <RDP PASSWORD> # set a password in command prompt # https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-passwords.html net user Administrator <NEW PASSWORD> # configure Powershell - Allow ExecutionPolicy of Powershell scripts Set-ExecutionPolicy -ExecutionPolicy AllSigned A # enable Software Secure Attention Sequence (SAS) setting Open gpedit.msc Expand Computer Configuration > Administrative Templates > Windows Components Select Windows Logon Options Double-click Disable or enable software Secure Attention Sequence Select Enabled Select Services from the drop down list in the bottom left pane Click OK # install AWS CLI # https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html # download and install: https://s3.amazonaws.com/aws-cli/AWSCLI64.msi # configure AWS CLI credentials in Powershell aws configure # AWS Access Key ID [None]: <ACCESS KEY> # AWS Secret Access Key [None]: <SECRET ACCESS KEY> # Default Region name [None]: <AWS REGION> # Default output format [None]: <enter> # download NVIDIA GRID driver from Amazon S3 # right-click Powershell, Run As Administrator, paste following into Powershell $Bucket = "ec2-windows-nvidia-drivers" $KeyPrefix = "latest" $LocalPath = "C:\Users\Administrator\Desktop\NVIDIA" $Objects = Get-S3Object -BucketName $Bucket -KeyPrefix $KeyPrefix -Region us-east-1 foreach ($Object in $Objects) { $LocalFileName = $Object.Key if ($LocalFileName -ne '' -and $Object.Size -ne 0) { $LocalFilePath = Join-Path $LocalPath $LocalFileName Copy-S3Object -BucketName $Bucket -Key $Object.Key -LocalFile $LocalFilePath -Region us-east-1 } } # run NVIDIA GRID installer C:\Users\Administrator\Desktop\NVIDIA\391.57_grid_win10_server2016_64bit_international.exe # reboot machine via command prompt cmd shutdown /r # Optimize GPU settings (follow these instructions) # https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/optimize_gpu.html # via Powershell cd "C:\Program Files\NVIDIA Corporation\NVSMI" .\nvidia-smi --auto-boost-default=0 .\nvidia-smi -ac "2505,1177" # go to www.teradici.com, create account, and request access from Teradici via support ticket # download Teradici PCoIP CAS software: PCoIP Graphics Agent 2.12 for Windows or later # install PCoIP graphics agent package via GUI based installer enter <TERADICI LICENSE CODE> via GUI installer reboot machine # download and install latest Wacom drivers from Wacom website # https://www.wacom.com/en/support/product-support/drivers # double-check the Elastic Network Adapter (ENA) is running # ensure you have AWS CLI installed with AWS credentials on your local machine aws ec2 describe-instances --instance-ids <CURRENT EC2 INSTANCE ID> --query "Reservations[].Instances[].EnaSupport" # if the check returns false, install ENA drivers # https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking-ena.html # if you're using a pre-existing Windows AMI, you need to install the ENA driver yourself # https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking-ena.html
Validating the desktop
Finally, take your new Linux or Windows VFX workstation for a spin. Using a zero client:
# connect Wacom tablet to zero-client and start a PCoIP session... # ensure you configure zero-client to connect via: # “Auto-Detect” in local z/c connection settings # install any other software you need... # don't forget to configure your floating license servers... # finally, create a new AMI to capture your new custom VFX workstation image in your account
Teradici provides a software client for Windows and macOS that you can use to validate the setup of your Windows or Linux desktop. It’s also handy for system administrators who need to access a graphics workstation for artist technical support.
Testing the desktop
For testing, let’s run Autodesk 3ds Max on Windows and Autodesk Maya on Linux.
In 3ds Max, we have a 35-million-poly scene from the GPU-accelerated renderer Redshift, fully interactive and able to use the NVIDIA card to perform CUDA-based GPU final rendering.
In Maya, we show the 16 vCPUs and 120 GB of RAM available to this 3D scene file. The file takes 10 minutes to final render at HD resolution on a g3.4xl instance or, if you decide to offload the CUDA rendering to the Amazon EC2 P3.16xl instance type , just 19 seconds!
Conclusion
The Amazon EC2 G3 instance type is purpose-built to provide a high-end professional graphics infrastructure for visual computing applications. With remote protocols like Teradici PCoIP, G3 instances are the next-generation VFX cloud desktops that can deliver outstanding performance. With many studios already taking advantage of elastic cloud scaling for rendering, now is a great time to deploy cloud desktops for your business.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK