NVIDIA GPUで作るHeadless X11 Linux
Upcoming SlideShare
Loading in...5
×
 

NVIDIA GPUで作るHeadless X11 Linux

on

  • 1,286 views

メガデモ勉強会 http://atnd.org/events/41216 ...

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

Statistics

Views

Total Views
1,286
Views on SlideShare
1,231
Embed Views
55

Actions

Likes
4
Downloads
7
Comments
0

1 Embed 55

https://twitter.com 55

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

NVIDIA GPUで作るHeadless X11 Linux NVIDIA GPUで作るHeadless X11 Linux Presentation Transcript

  • 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 月曜日22日7月13年
  • 最近のデモ 月曜日22日7月13年
  • 最近のデモ SCOTTIE - Nonoil & SystemK 月曜日22日7月13年 View slide
  • 最近のデモ SCOTTIE - Nonoil & SystemK FPS 月曜日22日7月13年 View slide
  • 最近のデモ 月曜日22日7月13年
  • 最近のデモ 月曜日22日7月13年
  • 最近のデモ 月曜日22日7月13年
  • 最近のデモ 月曜日22日7月13年
  • 問題点 •モダンなデモを開発するには、僕のMacBook Proでは遅すぎる。 (Intel Core2Duo, 8GB RAM, NVIDIA 9400M) •SCOTTIEは、0 ~ 4 FPSでしか動かなかった。 (SCOTTIEはDirectXですが、参考程度に...) •動かすのですら大変なのに開発となったら... 月曜日22日7月13年
  • やりたい事 •外でOpenGLのデモを作るとき、もっと快適に開発をしたい。 •外で重いシェーダー(GLSL)などを開発したい。 •CUDAとかも使いたい •自宅にそこそこの環境があるし、どうにかならないのか... 月曜日22日7月13年
  • 解決案 1.WindowsのRDPを使用する。 2.Linux の X11 Forwarding を使用する。 月曜日22日7月13年
  • Windowsマシンに RDP (Remote Desktop Protocol) で画面を転送してみる 月曜日22日7月13年
  • 月曜日22日7月13年
  • 結果 動くには動くが、使えない機能など も結構ある (DirectXは動くので、そっちで開発する人はこれでいいかも...) 月曜日22日7月13年
  • 解決案 1.WindowsのRDPを使用する。 2.Linux の X11 Forwarding を使用する。 月曜日22日7月13年
  • Linux の X11 Forwarding を使ってみる 月曜日22日7月13年
  • 月曜日22日7月13年
  • 結果 いろんな事が一応できるが、HWの 依存関係とかが... CUDAも微妙 (グラフィカルな物は動かない)... 月曜日22日7月13年
  • 解決案 1.WindowsのRDPを使用する。 2.Linux の X11 Forwarding を使用する。 月曜日22日7月13年
  • 解決案 1.WindowsのRDPを使用する。 2.Linux の X11 Forwarding を使用する。 3. Headless X11 な Linux を使用する。 月曜日22日7月13年
  • Headless X11って何? •Headless つまり、頭がない事(直訳) •マウス、キーボード、モニター等を必要 としないLinux環境 •VNC + SSH tunneling で手元のコンピューターへ画面を転送する •速い、CUDAとかも使える。 月曜日22日7月13年
  • メリット •コンピューターに必要なスペースが少ない •速い、普通のVNCとかより描画などが速い •VPN などを使えば、外からでも高性能な環境が使える •OpenGLでデモを作る人はこれで るね! (Linuxのウィンドウ周り のコードをかく必要があるけど...) ↑ (デモならGLUT使えばいいんじゃない?) 月曜日22日7月13年
  • デメリット •ネイティブ環境と比べると、遅い •たまに切れる (致命的、僕の環境ではVNCでターミナルを開く と、切れる) •セキュリティ的に甘い (VPNなどを通してアクセスするの推奨) •一人しか使えない (? 調査中) 月曜日22日7月13年
  • 今回の設定環境 •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年
  • 必要スキル •基本的な Linuxスキル (コマンドライン) •SSHなどを扱えるスキル •まあトラブルを自己解決できる人なら大丈夫! 月曜日22日7月13年
  • VIM or EMACS •Linuxのことを話すと必ずこれでなんか言う人がいるが... はっきり言ってどうでもいい! •GNU nano とか echo とか使えばいいんじゃないの (適当) •(あ、ちなみに説明ではvimを使います。[not vim教]) 月曜日22日7月13年
  • 早速作ろう! 月曜日22日7月13年
  • 流れ 1. CentOS 6セットアップ 2. 初期設定(sudo) 3. ネットワークを自動起動させる 4. GPU driver setup 4-1. 下準備 4-2.ドライバーインストール 月曜日22日7月13年
  • 流れ 5. リポジストリの編集 6. X環境構築 7. Headless X11 構築 8. CUDA 環境構築 9. x11vnc 構築 月曜日22日7月13年
  • 1. CentOS 6 セットアップ •普通にセットアップします •SSH などのパッケージは、必ず選択する事 •少しの間、キーボード、マウス、ディスプレイが必要 月曜日22日7月13年
  • 2. 初期設定 (sudo) •作業効率を上げるため sudo の設定をする。 • $ su • # visudo • [アカウント名] ALL=(ALL) ALL を追加 •保存して exit 月曜日22日7月13年
  • 2. 初期設定 (sudo) •以上でsudoが使えるようになる。 •以降 ユーザーのコマンドは、先頭に $ スーパーユーザーのコマンドは、先頭に # を付けて説明する。 月曜日22日7月13年
  • 3. ネットワークを自動接続させる •CentOSの起動時にネットワークを自動接続させる • #vi /etc/sysconfig/network-scripts/ifcfg-[ネットワークデバイス名] •自動接続させるため ONBOOT を yes にする •保存した後、ネットワークを再起動する # /etc/rc.d/init.d/network restart •ここからはSSHを使うとよさげ 月曜日22日7月13年
  • 4. GPU driver setup •これより、NVIDIAのドライバーをセットアップするのだが、 Windowsなどと比べるといろいろ複雑なので、少し詳しく書く。 月曜日22日7月13年
  • 4-1. 下準備 •標準では、nouveauドライバーがロードされている。 •Xが起動しているとドライバーの切り替えができないためXを止め るのだが、標準ではXがkillされると自動復帰するので、Xが自動 起動しないようにする。 月曜日22日7月13年
  • 4-1. 下準備 •まずは、自動でXが起動しないように設定をする。 •# vi /etc/inittab •id:5:initdefault を id:3:initdefault に変更する。 月曜日22日7月13年
  • 4-1. 下準備 •次にnouveauドライバーがロードされないようにする •# vi /boot/grub/grub.conf •kernelで始まる行の終わりに次の文を加える •nouveau.modeset=0 •保存して # reboot 月曜日22日7月13年
  • 4-1. 下準備 •以降、起動時のロード画面がかわる •いったんログイン後にstartxでXをスタートさせ、フォルダの名前 を英語にするか聞かれるので、英語に変えておく。 月曜日22日7月13年
  • 4-2. ドライバーインストール •$ cd Downloads •$ wget [NVIDIAのドライバーのダウンロードURL] •ダウンロード後、実行可能にするパーミッションを与える •$ chmod +x [ファイル名] 月曜日22日7月13年
  • 4-2. ドライバーインストール •スーパーユーザー権限でドライバーをインストールする •$ sudo ./[ファイル名] •全部Yesとかの方を選ぶ、WARNINGはOKを押して進める •インストール後、再起動 •# reboot 月曜日22日7月13年
  • 5. リポジストリの編集 •今回のやり方はテストのため、セキュリティ的に望ましくない方 法をしています。しっかりやりたい人は、自分で調べて... •まずは、リポジストリを最も速いミラーに設定する。 •$ sudo -i •# yum install yum-fastestmirror 月曜日22日7月13年
  • 5. リポジストリの編集 •CentOSPlusを有効にする •# vi /etc/yum.repos.d/CentOS-Base.repo •[centosplus] の下にある enabled=0 を 1 にする。 •そして次の二つのリポジストリを追加する 月曜日22日7月13年
  • 5. リポジストリの編集 [rpmforge] name=RPMforge RPM repository for Red Hat Enterprise Linux baseurl=http://ftp.riken.jp/Linux/dag/redhat/el6/en/$basearch/ rpmforge/ gpgcheck=0 enabled=1 月曜日22日7月13年
  • 5. リポジストリの編集 [epel] name=EPEL RPM Repository for Red Hat Enterprise Linux baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/ gpgcheck=0 enabled=1 の二つを追加する。 月曜日22日7月13年
  • 5. リポジストリの編集 •保存後リポジストリをアップデートする。 •# yum update 月曜日22日7月13年
  • 6. X環境構築 •保存後リポジストリをアップデートする。 •# yum update 月曜日22日7月13年
  • 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年
  • 7. Headless X11 構築 •備考: •udevが起動してなかったり、DeviceセクションにBusIDがない と、Xは起動しない。 •udevを起動させておくか、DeviceセクションにBusIDを記載して おく 月曜日22日7月13年
  • 7. Headless X11 構築 •このままでは、ユーザー権限でXを起動しようとしたとき、PAM 関連のセキュリティエラーが出て起動できないので、ユーザーで もXを起動できるように書き換える。 •# vi /etc/pam.d/xserver •auth required の pam_console.so を pam_permit.so に変更 •これで起動できるようになる 月曜日22日7月13年
  • 7. Headless X11 構築 •Linuxには、出力画面を選択する DISPLAY変数という物がある、 基本的に、GPU0は :0.0 に設定されている。 •現在のDISPLAY変数は、以下のコマンドで確認できる。 $ env | grep DISPLAY •SSHのXForwardingを使用しているときのクライアント側の画面 は localhost:10.0 などになってる事が多い. 月曜日22日7月13年
  • 7. Headless X11 構築 •Xは以下のようにディスプレイ番号を指定する事もできる $ startx -- :0.0 •また、最後に & を付けるとバックグラウンドで開始できる $ startx -- :0.0 & •DISPLAY変数を :0.0 にかえるには $ export DISPLAY=:0.0 月曜日22日7月13年
  • 7. Headless X11 構築 •$ export DISPLAY=:0.0 •$ glxinfo •OpenGL vendor string などの項目をみる事で、NVIDIAのドライ バーが読み込まれているかどうかを確認する事ができる。 月曜日22日7月13年
  • 7. Headless X11 構築 •$ glxgears •97157 frames in 5.0 seconds = 19431.389 FPS •HWアクセラレーションがしっかりと効いているため、1万を超え るFPSが出る。 月曜日22日7月13年
  • 8. CUDA 環境構築 •サンプルをmakeする上でglutが必要なのでインストールする •$ cd ~/Downloads •$ wget http://mirror.centos.org/centos/6/os/x86_64/Packages/ freeglut-2.6.0-1.el6.x86_64.rpm •$ wget http://mirror.centos.org/centos/6/os/x86_64/Packages/ freeglut-devel-2.6.0-1.el6.x86_64.rpm 月曜日22日7月13年
  • 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年
  • 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年
  • 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年
  • 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年
  • 8. CUDA 環境構築 •sample をコンパイルする •$ cd /usr/local/cuda-5.0/samples •# make -k •MPI環境をインストールしていないので、1部のコンパイルに失敗 するが、無視して進める。 月曜日22日7月13年
  • 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年
  • 8. CUDA 環境構築 •CUDA がしっかりと動作しているか、サンプルを動かしてみて確 認する。 •$ cd /usr/local/cuda-5.0/samples/0_Simple/vectorAddDrv •$ ./vectorAddDrv 月曜日22日7月13年
  • 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年
  • 8. CUDA 環境構築 •複数のGPUを搭載している場合は、複数扱えているかをサンプル を実行して確認する •$ cd /usr/local/cuda-5.0/samples/0_Simple/simpleMultiGPU •$ ./simpleMultiGPU 月曜日22日7月13年
  • 8. CUDA 環境構築 Starting simpleMultiGPU CUDA-capable device count: 2 Generating 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年
  • 8. CUDA 環境構築 •2GPUs と表示されればしっかり機能しているといえる。 •たくさんのGPUを使う場合もほぼ同じかと思われます。 月曜日22日7月13年
  • 9. x11vnc 構築 •x11vncを導入する事でやっと、Linux側の画面を手元のPCに表示 させる事ができます。 •http://www.karlrunge.com/x11vnc/ 月曜日22日7月13年
  • 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年
  • 9. x11vnc 構築 •以上でインストールは完了する。 •これで、Headless X11 Linux が完成する。 •もう、ディスプレイ、キーボード、マウスは外してしまって大丈 夫! 月曜日22日7月13年
  • ひとまず完成 月曜日22日7月13年
  • Headless X11 Linux 使い方 •VNCのソフトウェアは、SSH Tunneling に対応したVNCクライア ントを使用する。 •Mac OSだと、ChickenというVNCクライアントがSSH Tunneling にも対応していておすすめです。 http://sourceforge.net/projects/chicken/ •もしくは、手動でSSH Tunneling してください。 月曜日22日7月13年
  • Headless X11 Linux 使い方 (1) •まずはサーバーにSSHでログインする。そして以下の二つを実行 •$ startx -- :0.0 & •$ x11vnc -display :0.0 -forever -auth guess -noxdamage & •これで二つともバックグラウンドで開始されます。 このコマンド実行後にexitでsshを切断するとプロセスは残るの で、いちいち立ち上げるのめんどいという人にはいいかも 月曜日22日7月13年
  • Headless X11 Linux 使い方 (2) •次にVNCクライアントで、SSH Tunneling を使用してサーバーに アクセスします。 •Tunnel over SSH などがそうです。 •これで、Headless X11 の画面が手元のPCに送られてきます。 月曜日22日7月13年
  • 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年
  • で、Headless X11 Linux で 何ができるの? 月曜日22日7月13年
  • アドバンテージ •OpenGL はクロスプラットフォームに対応なので、高速なLinux環 境でデモを作って、あとになってWindowsのバイナリをビルドし た方が、作業効率的にはいい。 •HWアクセラレーションがしっかり効くので、高速な回線さえあ れば、ミニノートみたいなPCで開発ができる! •すごく重い物を作るときは、これを使うとかなりいいかも 月曜日22日7月13年
  • できなかった事 •VNCでアクセスしてる先で、ターミナルが開けない. (export DISPLAY=:0.0 とかでコマンドを送ってあげるしかない) •一部の設定などをすると突然切断されたりする。 •複数ユーザーにそれぞれデスクトップを割り当てる 月曜日22日7月13年
  • 実際にアクセスし、 使ってみます。 月曜日22日7月13年
  • 月曜日22日7月13年
  • デモ以外の活用法 •ゲームをサーバー側で走らせて、画面だけこっちに表示する •ベンチマークとかするときに外からいろいろできる。 •ひとつのデスクトップで作業を共有する •などなど... 月曜日22日7月13年
  • まとめ •Linuxの基礎知識があるとHeadless X11 Linuxを構築して、比較的 快適にOpenGLのデモが作成できる。 •環境に依存する事 (CUDAなど) も外で使える。 •デモ以外にも様々な使い道がありそうですね. 月曜日22日7月13年
  • ? @T_SRTX1911 , @RTX1911 http://rtx1911.net/ 月曜日22日7月13年
  • THANKS 月曜日22日7月13年