非GPUインスタンスのEC2(Ubuntu)へNICE DCVでリモート接続設定

非GPUインスタンスにNICE DCVをインストールしてリモート接続までの手順です。
2021.04.23

AWS ParallelClusterや、AWS Batchで計算したデータをクラウド上でデータを確認、可視化したいことはないでしょうか。 理由はさまざまあるかと思います。

  • クラウドからオンプレミスまでデータ転送に時間がかかる
  • オンプレミスのストレージ容量にも限りがある
  • ローカルに計算したデータを持ちたくない、持ってきたくない

Icons made by Freepik from www.flaticon.com

AWS上の端末へリモート接続できれば話が早いですよね。 AWSではAmazon WorkSpaces、Amazon AppStream 2.0などの仮想デスクトップサービスが提供されています。

今回はGPUを必要としないLinuxの仮想デスクトップ端末を1台だけ用意したかったです。 NICE DCVを利用してEC2インスタスを仮想デスクトップとして利用しましたので作成方法をご紹介します。

NICE DCVとは

HPC分野のシミュレーションや可視化はハイエンドなグラフィックが必要になる場合が多くあります。その様な場合に必要となる、ハイエンドグラフィック向けに最適化された2D/3DインタラクティブアプリケーションにリモートでアクセスできるソフトウェアがNICE DCVです。

AWS Marketplace

NICE DCVインストール済みのAMIがMarketplaceで公開されています。

しかし、求める条件を満たすものはありませんでした。一からNICE DCVサーバをセットアップすることにしました。

  • 非GPUインスタンスで十分、メモリは欲しい
  • OSはUbuntuを使いたい
  • AMDのプロセッサを使いたい

EC2インスタンスとIAMロール

パブリックサブネットにパブリックIPを持つEC2インスタンスを作成しました。

項目
OS Ubuntu 20.04 LTS
AMI ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210223
InstanceType t3a.xlarge(vCPUs: 4, Memory: 16GB)

セキュリティグループ

インバウンドルールはNICE DCVでTCP/UDP8443ポートを使います。また、SSH接続して設定が必要なため22ポートも許可しています。

IAMロール

EC2インスタンスはNICE DCVのライセンス確認のため定期的にS3バケットへアクセスします。そのため、特定のS3バケットへアクセス権限のあるIAMロールを設定する必要があります。

Icons made by Freepik from www.flaticon.com

以下のIAMポリシーを作成します。利用するリージョンに応じてap-northeast-1の箇所を変更してください。I

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dcv-license.ap-northeast-1/*"
        }
    ]
}

IAMロールとして対象のEC2インスタンスへ設定してください。

NICE DCVのインストール

非GPUインスタンスを対象に必要なコマンドを流し込めるようにまとめました。今回インストールしたバージョンは NICE DCV 2021.0です。

$ dcv version

NICE DCV 2021.0 (r10242)
Copyright (C) 2010-2021 NICE s.r.l.
All rights reserved.

This product is protected by copyright and
licenses restricting use, copying, distribution, and decompilation.

前提条件

sudo apt update
sudo apt install ubuntu-desktop -y
sudo apt install gdm3 -y
sudo apt upgrade -y
sudo sed -i -e "s/^#WaylandEnable=false/WaylandEnable=false/g" /etc/gdm3/custom.conf
sudo systemctl restart gdm3
sudo apt install mesa-utils -y

確認作業

確認コマンド1

cat /etc/X11/default-display-manager

出力結果

/usr/sbin/gdm3

確認コマンド2

sudo DISPLAY=:0 XAUTHORITY=$(ps aux | grep "X.*\-auth" | grep -v grep | sed -n 's/.*-auth \([^ ]\+\).*/\1/p') glxinfo | grep -i "opengl.*version"

出力結果

OpenGL core profile version string: 4.5 (Core Profile) Mesa 20.2.6
OpenGL core profile shading language version string: 4.50
OpenGL version string: 3.1 Mesa 20.2.6
OpenGL shading language version string: 1.40
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

一度再起動が必要です。

sudo reboot

インストール

mkdir nicedcv && cd $_
wget https://d1uj6qtbmh3dt5.cloudfront.net/NICE-GPG-KEY
gpg --import NICE-GPG-KEY
wget https://d1uj6qtbmh3dt5.cloudfront.net/2021.0/Servers/nice-dcv-2021.0-10242-ubuntu2004-x86_64.tgz
tar -xvzf nice-dcv-2021.0-10242-ubuntu2004-x86_64.tgz && cd nice-dcv-2021.0-10242-ubuntu2004-x86_64
sudo apt install ./nice-dcv-server_2021.0.10242-1_amd64.ubuntu2004.deb -y
sudo usermod -aG video dcv
sudo apt install ./nice-xdcv_2021.0.380-1_amd64.ubuntu2004.deb -y
sudo apt install ./nice-dcv-simple-external-authenticator_2021.0.134-1_amd64.ubuntu2004.deb -y

確認作業

確認コマンド1

sudo systemctl isolate multi-user.target
sudo systemctl isolate graphical.target
sudo DISPLAY=:0 XAUTHORITY=$(ps aux | grep "X.*\-auth" | grep -v grep | sed -n 's/.*-auth \([^ ]\+\).*/\1/p') xhost | grep "SI:localuser:dcv$"

出力結果

SI:localuser:dcv

サービス起動

sudo systemctl start dcvserver
sudo systemctl enable dcvserver
sudo systemctl status dcvserver

自動コンソールセッション有効化

EC2インスタンス起動時に自動的にセッションを作成する設定をします。EC2インスタンス起動の度にNICE DCVのセッションを作成しないとリモート接続ができないのです。

セッションにはコンソールセッションと、仮想セッションの2種類あります。コンソールセッションは自動有効対応しており、仮想セッションは自動有効には対応していませんでした。

sudo sed -i -e "s/^#create-session/create-session/g" /etc/dcv/dcv.conf
sudo sed -i -e "s/^#owner = \"\"/owner = \"ubuntu\"/g" /etc/dcv/dcv.conf
sudo systemctl restart dcvserver

その他

NICE DCVでリモート接続するユーザにパスワードが必要です。デフォルトユーザのubuntuにはパスワードは設定されていません。ubuntuユーザでリモート接続する場合はパスワードを設定する必要があります。

sudo passwd ubuntu

NICE DCVクライアント

下記リンクからリモート接続元のOSに応じてNICE DCVクライアントをダウンロード・インストールしてください。

リモート接続

macOSのNICE DCVクライアントを例に作成したインスタンスへリモート接続します。

EC2インスタンスのパブリックIPを入力します。

ユーザ名、パスワードを入力します。

ユーザ名をクリックし再度パスワードを入力します。

Ubuntuのデスクトップ画面を確認できました。

YouTubeを見てみましょう。動画はカクつくことなく音声も聞くことができます。NICE DCVのStreamingMode選択画面からトラフィックを確認できます。

画像から文字が読み取れませんでした。StreamingModeの画面部分の拡大画像です。

おわりに

MarketplaceのAMI使わなくても簡単に作成できました。ライセンス確認のためのIAMロール設定し忘れには気をつけてください。

Windows端末の作成方法はこちらをご覧ください。