nvidia gpuで作るheadless x11 linux

82
NVIDIA GPU で作る Headless X11 Linux President of REAL TiME XPRESS & RTX1911 demo division Coder, Graphics & Music artist, Director Tomoki Shishikura (@T_SRTX1911) メガデモ勉強会 | SAKURA Internet | Jul 20, 2013 月曜日22713

Upload: tomoki-shishikura

Post on 22-Jun-2015

1.204 views

Category:

Technology


1 download

DESCRIPTION

メガデモ勉強会 http://atnd.org/events/41216 で使用したプレゼンです。 NVIDIA製のGPUを使用したHeadless X11 Linux環境の構築についての解説になります。

TRANSCRIPT

Page 1: NVIDIA GPUで作るHeadless X11 Linux

NVIDIA GPUで作るHeadless X11 LinuxPresident of REAL TiME XPRESS & RTX1911 demo divisionCoder, Graphics & Music artist, Director

Tomoki Shishikura (@T_SRTX1911)メガデモ勉強会 | SAKURA Internet | Jul 20, 2013

月曜日22日7月13年

Page 2: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

月曜日22日7月13年

Page 3: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

SCOTTIE - Nonoil & SystemK

月曜日22日7月13年

Page 4: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

SCOTTIE - Nonoil & SystemK

FPS

月曜日22日7月13年

Page 5: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

月曜日22日7月13年

Page 6: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

月曜日22日7月13年

Page 7: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

月曜日22日7月13年

Page 8: NVIDIA GPUで作るHeadless X11 Linux

最近のデモ

月曜日22日7月13年

Page 9: NVIDIA GPUで作るHeadless X11 Linux

問題点

•モダンなデモを開発するには、僕のMacBook Proでは遅すぎる。(Intel Core2Duo, 8GB RAM, NVIDIA 9400M)

•SCOTTIEは、0 ~ 4 FPSでしか動かなかった。(SCOTTIEはDirectXですが、参考程度に...)

•動かすのですら大変なのに開発となったら...

月曜日22日7月13年

Page 10: NVIDIA GPUで作るHeadless X11 Linux

やりたい事

•外でOpenGLのデモを作るとき、もっと快適に開発をしたい。

•外で重いシェーダー(GLSL)などを開発したい。

•CUDAとかも使いたい

•自宅にそこそこの環境があるし、どうにかならないのか...

月曜日22日7月13年

Page 11: NVIDIA GPUで作るHeadless X11 Linux

解決案

1.WindowsのRDPを使用する。

2.Linux の X11 Forwarding を使用する。

月曜日22日7月13年

Page 12: NVIDIA GPUで作るHeadless X11 Linux

Windowsマシンに

RDP (Remote Desktop Protocol)

で画面を転送してみる

月曜日22日7月13年

Page 13: NVIDIA GPUで作るHeadless X11 Linux

月曜日22日7月13年

Page 14: NVIDIA GPUで作るHeadless X11 Linux

結果

動くには動くが、使えない機能なども結構ある

(DirectXは動くので、そっちで開発する人はこれでいいかも...)

月曜日22日7月13年

Page 15: NVIDIA GPUで作るHeadless X11 Linux

解決案

1.WindowsのRDPを使用する。

2.Linux の X11 Forwarding を使用する。

月曜日22日7月13年

Page 16: NVIDIA GPUで作るHeadless X11 Linux

Linux の X11 Forwarding

を使ってみる

月曜日22日7月13年

Page 17: NVIDIA GPUで作るHeadless X11 Linux

月曜日22日7月13年

Page 18: NVIDIA GPUで作るHeadless X11 Linux

結果

いろんな事が一応できるが、HWの依存関係とかが...

CUDAも微妙 (グラフィカルな物は動かない)...

月曜日22日7月13年

Page 19: NVIDIA GPUで作るHeadless X11 Linux

解決案

1.WindowsのRDPを使用する。

2.Linux の X11 Forwarding を使用する。

月曜日22日7月13年

Page 20: NVIDIA GPUで作るHeadless X11 Linux

解決案

1.WindowsのRDPを使用する。

2.Linux の X11 Forwarding を使用する。

3. Headless X11 な Linux を使用する。

月曜日22日7月13年

Page 21: NVIDIA GPUで作るHeadless X11 Linux

Headless X11って何?

•Headless つまり、頭がない事(直訳)

•マウス、キーボード、モニター等を必要としないLinux環境

•VNC + SSH tunneling で手元のコンピューターへ画面を転送する

•速い、CUDAとかも使える。

月曜日22日7月13年

Page 22: NVIDIA GPUで作るHeadless X11 Linux

メリット•コンピューターに必要なスペースが少ない

•速い、普通のVNCとかより描画などが速い

•VPN などを使えば、外からでも高性能な環境が使える

•OpenGLでデモを作る人はこれで捗るね! (Linuxのウィンドウ周りのコードをかく必要があるけど...) ↑ (デモならGLUT使えばいいんじゃない?)

月曜日22日7月13年

Page 23: NVIDIA GPUで作るHeadless X11 Linux

デメリット

•ネイティブ環境と比べると、遅い

•たまに切れる (致命的、僕の環境ではVNCでターミナルを開くと、切れる)

•セキュリティ的に甘い (VPNなどを通してアクセスするの推奨)

•一人しか使えない (? 調査中)

月曜日22日7月13年

Page 24: NVIDIA GPUで作るHeadless X11 Linux

今回の設定環境

•VPNは、Mac OS X ServerのVPN機能を使用 (L2TP)

• Linux は、CentOS 6.4 を使用 (RHEL系がいい)

• AMD Athlon II X2, 4GB RAM, NVIDIA GTS250...

•設定などに Mac OS X 10.8 のターミナルを使用

月曜日22日7月13年

Page 25: NVIDIA GPUで作るHeadless X11 Linux

必要スキル

•基本的な Linuxスキル (コマンドライン)

• SSHなどを扱えるスキル

•まあトラブルを自己解決できる人なら大丈夫!

月曜日22日7月13年

Page 26: NVIDIA GPUで作るHeadless X11 Linux

VIM or EMACS

• Linuxのことを話すと必ずこれでなんか言う人がいるが...

はっきり言ってどうでもいい!

•GNU nano とか echo とか使えばいいんじゃないの (適当)

• (あ、ちなみに説明ではvimを使います。[not vim教])

月曜日22日7月13年

Page 27: NVIDIA GPUで作るHeadless X11 Linux

早速作ろう!

月曜日22日7月13年

Page 28: NVIDIA GPUで作るHeadless X11 Linux

流れ1. CentOS 6セットアップ

2. 初期設定(sudo)

3. ネットワークを自動起動させる

4. GPU driver setup

4-1. 下準備

4-2.ドライバーインストール

月曜日22日7月13年

Page 29: NVIDIA GPUで作るHeadless X11 Linux

流れ5. リポジストリの編集

6. X環境構築

7. Headless X11 構築

8. CUDA 環境構築

9. x11vnc 構築

月曜日22日7月13年

Page 30: NVIDIA GPUで作るHeadless X11 Linux

1. CentOS 6 セットアップ

•普通にセットアップします

•SSH などのパッケージは、必ず選択する事

•少しの間、キーボード、マウス、ディスプレイが必要

月曜日22日7月13年

Page 31: NVIDIA GPUで作るHeadless X11 Linux

2. 初期設定 (sudo)

•作業効率を上げるため sudo の設定をする。

• $ su

• # visudo

• [アカウント名] ALL=(ALL) ALL を追加

•保存して exit

月曜日22日7月13年

Page 32: NVIDIA GPUで作るHeadless X11 Linux

2. 初期設定 (sudo)

•以上でsudoが使えるようになる。

•以降 ユーザーのコマンドは、先頭に $スーパーユーザーのコマンドは、先頭に # を付けて説明する。

月曜日22日7月13年

Page 33: NVIDIA GPUで作るHeadless X11 Linux

3. ネットワークを自動接続させる•CentOSの起動時にネットワークを自動接続させる

• #vi /etc/sysconfig/network-scripts/ifcfg-[ネットワークデバイス名]

•自動接続させるため ONBOOT を yes にする

•保存した後、ネットワークを再起動する# /etc/rc.d/init.d/network restart

•ここからはSSHを使うとよさげ

月曜日22日7月13年

Page 34: NVIDIA GPUで作るHeadless X11 Linux

4. GPU driver setup

•これより、NVIDIAのドライバーをセットアップするのだが、Windowsなどと比べるといろいろ複雑なので、少し詳しく書く。

月曜日22日7月13年

Page 35: NVIDIA GPUで作るHeadless X11 Linux

4-1. 下準備

•標準では、nouveauドライバーがロードされている。

•Xが起動しているとドライバーの切り替えができないためXを止めるのだが、標準ではXがkillされると自動復帰するので、Xが自動起動しないようにする。

月曜日22日7月13年

Page 36: NVIDIA GPUで作るHeadless X11 Linux

4-1. 下準備

•まずは、自動でXが起動しないように設定をする。

• # vi /etc/inittab

• id:5:initdefault を id:3:initdefault に変更する。

月曜日22日7月13年

Page 37: NVIDIA GPUで作るHeadless X11 Linux

4-1. 下準備

•次にnouveauドライバーがロードされないようにする

• # vi /boot/grub/grub.conf

• kernelで始まる行の終わりに次の文を加える

• nouveau.modeset=0

•保存して # reboot

月曜日22日7月13年

Page 38: NVIDIA GPUで作るHeadless X11 Linux

4-1. 下準備

•以降、起動時のロード画面がかわる

•いったんログイン後にstartxでXをスタートさせ、フォルダの名前を英語にするか聞かれるので、英語に変えておく。

月曜日22日7月13年

Page 39: NVIDIA GPUで作るHeadless X11 Linux

4-2. ドライバーインストール

• $ cd Downloads

• $ wget [NVIDIAのドライバーのダウンロードURL]

•ダウンロード後、実行可能にするパーミッションを与える

• $ chmod +x [ファイル名]

月曜日22日7月13年

Page 40: NVIDIA GPUで作るHeadless X11 Linux

4-2. ドライバーインストール

•スーパーユーザー権限でドライバーをインストールする

• $ sudo ./[ファイル名]

•全部Yesとかの方を選ぶ、WARNINGはOKを押して進める

•インストール後、再起動

• # reboot

月曜日22日7月13年

Page 41: NVIDIA GPUで作るHeadless X11 Linux

5. リポジストリの編集

•今回のやり方はテストのため、セキュリティ的に望ましくない方法をしています。しっかりやりたい人は、自分で調べて...

•まずは、リポジストリを最も速いミラーに設定する。

• $ sudo -i

• # yum install yum-fastestmirror

月曜日22日7月13年

Page 42: NVIDIA GPUで作るHeadless X11 Linux

5. リポジストリの編集

•CentOSPlusを有効にする

• # vi /etc/yum.repos.d/CentOS-Base.repo

• [centosplus] の下にある enabled=0 を 1 にする。

•そして次の二つのリポジストリを追加する

月曜日22日7月13年

Page 43: NVIDIA GPUで作るHeadless X11 Linux

5. リポジストリの編集

[rpmforge]name=RPMforge RPM repository for Red Hat Enterprise Linuxbaseurl=http://ftp.riken.jp/Linux/dag/redhat/el6/en/$basearch/rpmforge/

gpgcheck=0enabled=1

月曜日22日7月13年

Page 44: NVIDIA GPUで作るHeadless X11 Linux

5. リポジストリの編集

[epel]name=EPEL RPM Repository for Red Hat Enterprise Linuxbaseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/gpgcheck=0enabled=1

の二つを追加する。

月曜日22日7月13年

Page 45: NVIDIA GPUで作るHeadless X11 Linux

5. リポジストリの編集

•保存後リポジストリをアップデートする。

• # yum update

月曜日22日7月13年

Page 46: NVIDIA GPUで作るHeadless X11 Linux

6. X環境構築

•保存後リポジストリをアップデートする。

• # yum update

月曜日22日7月13年

Page 47: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

• nvidia-xconfig の --use-display-device=Noneによって、Headless X11 環境を構築する。

• --virtual=WxH で解像度を指定し、 --enable-all-gpus で全てのGPUを使用する。

• # nvidia-xconfig -a --use-display-device=None --enable-all-gpus --virtual=1280x800

月曜日22日7月13年

Page 48: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

•備考:

• udevが起動してなかったり、DeviceセクションにBusIDがないと、Xは起動しない。

• udevを起動させておくか、DeviceセクションにBusIDを記載しておく

月曜日22日7月13年

Page 49: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

•このままでは、ユーザー権限でXを起動しようとしたとき、PAM関連のセキュリティエラーが出て起動できないので、ユーザーでもXを起動できるように書き換える。

• # vi /etc/pam.d/xserver

• auth required の pam_console.so を pam_permit.so に変更

•これで起動できるようになる

月曜日22日7月13年

Page 50: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

• Linuxには、出力画面を選択する DISPLAY変数という物がある、基本的に、GPU0は :0.0 に設定されている。

•現在のDISPLAY変数は、以下のコマンドで確認できる。$ env | grep DISPLAY

•SSHのXForwardingを使用しているときのクライアント側の画面は localhost:10.0 などになってる事が多い.

月曜日22日7月13年

Page 51: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

•Xは以下のようにディスプレイ番号を指定する事もできる$ startx -- :0.0

•また、最後に & を付けるとバックグラウンドで開始できる$ startx -- :0.0 &

•DISPLAY変数を :0.0 にかえるには$ export DISPLAY=:0.0

月曜日22日7月13年

Page 52: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

• $ export DISPLAY=:0.0

• $ glxinfo

•OpenGL vendor string などの項目をみる事で、NVIDIAのドライバーが読み込まれているかどうかを確認する事ができる。

月曜日22日7月13年

Page 53: NVIDIA GPUで作るHeadless X11 Linux

7. Headless X11 構築

• $ glxgears

• 97157 frames in 5.0 seconds = 19431.389 FPS

•HWアクセラレーションがしっかりと効いているため、1万を超えるFPSが出る。

月曜日22日7月13年

Page 55: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

• # rpm -ivh freeglut-2.6.0-1.el6.x86_64.rpm freeglut-devel-2.6.0-1.el6.x86_64.rpm

•これでサンプルをコンパイルする事ができる。

•以降OpenGLが使えるが、古いfreeglutなので、必要なら新しいバージョンを入れる

月曜日22日7月13年

Page 56: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

•これよりCUDA 5.0 をインストールするが、ドライバーはインストールせずに、Toolkitとサンプルコードのみを入れる。

• $ cd ~/Downloads

• $ wget http://developer.download.nvidia.com/compute/cuda/5_0/rel-update-1/installers/cuda_5.0.35_linux_64_rhel6.x-1.run

月曜日22日7月13年

Page 57: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

• $ chmod +x cuda_5.0.35_linux_64_rhel6.x-1.run

• # ./cuda_5.0.35_linux_64_rhel6.x-1.run

•ライセンスに同意するか聞かれるので、 accept と入力する。

月曜日22日7月13年

Page 58: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築• Do you accept the previously read EULA? (accept/decline/quit):

accept

• Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 304.54? ((y)es/(n)o/(q)uit): n

• Install the CUDA 5.0 Toolkit? ((y)es/(n)o/(q)uit): y

• Enter Toolkit Location [ default is /usr/local/cuda-5.0 ]: (Enter)

• Install the CUDA 5.0 Samples? ((y)es/(n)o/(q)uit): y

• Enter CUDA Samples Location [ default is /usr/local/cuda-5.0/samples ]: (Enter)

月曜日22日7月13年

Page 59: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

• sample をコンパイルする

• $ cd /usr/local/cuda-5.0/samples

• # make -k

•MPI環境をインストールしていないので、1部のコンパイルに失敗するが、無視して進める。

月曜日22日7月13年

Page 60: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

•CUDAを使う上で、パスを通さないといけないので以下の文を ~/.bashrc に書いておく

• export PATH=$PATH:/usr/local/cuda-5.0/bin

• export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-5.0/lib64

月曜日22日7月13年

Page 61: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

•CUDA がしっかりと動作しているか、サンプルを動かしてみて確認する。

• $ cd /usr/local/cuda-5.0/samples/0_Simple/vectorAddDrv

• $ ./vectorAddDrv

月曜日22日7月13年

Page 62: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

•Vector Addition (Driver API)> Using Device 0: "GeForce [なんとかなんとか]" with Compute 3.5 capability> findModulePath found file at <./vectorAdd_kernel64.ptx>> initCUDA loading module: <./vectorAdd_kernel64.ptx>> PTX JIT log:

•自分の使ってるGPUの名前が出てれば成功です。

月曜日22日7月13年

Page 63: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

•複数のGPUを搭載している場合は、複数扱えているかをサンプルを実行して確認する

• $ cd /usr/local/cuda-5.0/samples/0_Simple/simpleMultiGPU

• $ ./simpleMultiGPU

月曜日22日7月13年

Page 64: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築Starting simpleMultiGPUCUDA-capable device count: 2Generating input data...

Computing with 2 GPUs... GPU Processing time: 13.682000 (ms)

Computing with Host CPU...

Comparing GPU and Host CPU results... GPU sum: 16777280.000000 CPU sum: 16777294.395033 Relative difference: 8.580068E-07

月曜日22日7月13年

Page 65: NVIDIA GPUで作るHeadless X11 Linux

8. CUDA 環境構築

• 2GPUs と表示されればしっかり機能しているといえる。

•たくさんのGPUを使う場合もほぼ同じかと思われます。

月曜日22日7月13年

Page 66: NVIDIA GPUで作るHeadless X11 Linux

9. x11vnc 構築

• x11vncを導入する事でやっと、Linux側の画面を手元のPCに表示させる事ができます。

• http://www.karlrunge.com/x11vnc/

月曜日22日7月13年

Page 67: NVIDIA GPUで作るHeadless X11 Linux

9. x11vnc 構築

• $ cd ~/Downloads

• $ wget http://x11vnc.sourceforge.net/dev/x11vnc-0.9.14-dev.tar.gz

• $ tar -zxvf x11vnc-0.9.13

• $ ./ configure

• $ make

• $ sudo make install

月曜日22日7月13年

Page 68: NVIDIA GPUで作るHeadless X11 Linux

9. x11vnc 構築

•以上でインストールは完了する。

•これで、Headless X11 Linux が完成する。

•もう、ディスプレイ、キーボード、マウスは外してしまって大丈夫!

月曜日22日7月13年

Page 69: NVIDIA GPUで作るHeadless X11 Linux

ひとまず完成

月曜日22日7月13年

Page 70: NVIDIA GPUで作るHeadless X11 Linux

Headless X11 Linux 使い方

•VNCのソフトウェアは、SSH Tunneling に対応したVNCクライアントを使用する。

•Mac OSだと、ChickenというVNCクライアントがSSH Tunneling にも対応していておすすめです。http://sourceforge.net/projects/chicken/

•もしくは、手動でSSH Tunneling してください。

月曜日22日7月13年

Page 71: NVIDIA GPUで作るHeadless X11 Linux

Headless X11 Linux 使い方 (1)

•まずはサーバーにSSHでログインする。そして以下の二つを実行

• $ startx -- :0.0 &

• $ x11vnc -display :0.0 -forever -auth guess -noxdamage &

•これで二つともバックグラウンドで開始されます。このコマンド実行後にexitでsshを切断するとプロセスは残るので、いちいち立ち上げるのめんどいという人にはいいかも

月曜日22日7月13年

Page 72: NVIDIA GPUで作るHeadless X11 Linux

Headless X11 Linux 使い方 (2)

•次にVNCクライアントで、SSH Tunneling を使用してサーバーにアクセスします。

•Tunnel over SSH などがそうです。

•これで、Headless X11 の画面が手元のPCに送られてきます。

月曜日22日7月13年

Page 73: NVIDIA GPUで作るHeadless X11 Linux

Headless X11 Linux 使い方 (3)

•試しに、CUDA の Particles を動かしてみます。

• $ export DISPLAY=:0.0

• $ cd /usr/local/cuda-5.0/samples/5_Simulations/particles/

• $ ./particles

•実行するとVNCの画面にひょうじされるはず。

月曜日22日7月13年

Page 74: NVIDIA GPUで作るHeadless X11 Linux

で、Headless X11 Linux で何ができるの?

月曜日22日7月13年

Page 75: NVIDIA GPUで作るHeadless X11 Linux

アドバンテージ

•OpenGL はクロスプラットフォームに対応なので、高速なLinux環境でデモを作って、あとになってWindowsのバイナリをビルドした方が、作業効率的にはいい。

•HWアクセラレーションがしっかり効くので、高速な回線さえあれば、ミニノートみたいなPCで開発ができる!

•すごく重い物を作るときは、これを使うとかなりいいかも

月曜日22日7月13年

Page 76: NVIDIA GPUで作るHeadless X11 Linux

できなかった事

•VNCでアクセスしてる先で、ターミナルが開けない.(export DISPLAY=:0.0 とかでコマンドを送ってあげるしかない)

•一部の設定などをすると突然切断されたりする。

•複数ユーザーにそれぞれデスクトップを割り当てる

月曜日22日7月13年

Page 77: NVIDIA GPUで作るHeadless X11 Linux

実際にアクセスし、

使ってみます。

月曜日22日7月13年

Page 78: NVIDIA GPUで作るHeadless X11 Linux

月曜日22日7月13年

Page 79: NVIDIA GPUで作るHeadless X11 Linux

デモ以外の活用法

•ゲームをサーバー側で走らせて、画面だけこっちに表示する

•ベンチマークとかするときに外からいろいろできる。

•ひとつのデスクトップで作業を共有する

•などなど...

月曜日22日7月13年

Page 80: NVIDIA GPUで作るHeadless X11 Linux

まとめ

• Linuxの基礎知識があるとHeadless X11 Linuxを構築して、比較的快適にOpenGLのデモが作成できる。

•環境に依存する事 (CUDAなど) も外で使える。

•デモ以外にも様々な使い道がありそうですね.

月曜日22日7月13年

Page 81: NVIDIA GPUで作るHeadless X11 Linux

?@T_SRTX1911 , @RTX1911

http://rtx1911.net/

月曜日22日7月13年

Page 82: NVIDIA GPUで作るHeadless X11 Linux

THANKS

月曜日22日7月13年