みなさんこんにちは。先日、Walt Disney Animation Studiosが映画『モアナと伝説の海』で使用したデータを公開しました。弊社のように直接映像制作を行わず、開発を行なっているようなところではテスト用の素材を用意するのが意外と大変なので、このような大規模プロダクションで使用されたデータが公開されるのはとても助かります。折角貴重なデータを入手することもできたわけですし、是非とも自力でレンダリングできるようにしたいところです。皆さんも早速ダウンロードしてシーン構築とレンダリングを試されているのではないでしょうか。この記事が公開されるときにはデータの公開から三週間ほど経っているので、多くの方がご自分の手元でレンダリングすることに成功していることでしょう:-)
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
前述のデータを肴に本連載でも記事を書いてみたいところなのですが、データを使用する目的が研究・開発用途に限られているため、その内容を元に記事にしてしまうのはちょっと微妙かなぁと思っています。研究・開発をした結果のレポートと言えば言えなくもないんですけどね。このあたりの線引きは迷うことが多いです。
余談ですが、CG系の論文で良く使われるウサギ(Stanford Bunny)や龍(Dragon)、それから両腕を上げた小太りなおじいさん(Happy Buddha)などのモデルデータにも使用の際の注意事項が明記されています。こういう文章は本来きちんと読むべきで、読んでみると結構興味深いことが書いてあります。そして一度読むと、あー、読まないで使っている人結構いるな~というのがわかったりします。笑。
環境構築の続き
前回に引き続き、環境構築のお話を進めていきます。
まず初めにお詫びしておかなければいけないことがあります。前回の予告として今回はCY2016環境の構築を行いますとお伝えしていたのですが、ちょっとそれ以前に対応しておかなければいけないことが多かったので、今回はCY2016に一部対応しつつPixar Animation Studios(以下、Pixar)のUSDを使用できる環境構築を行なっていきます。期待していただいた方はすみません。そして、今回も駆け足での説明になります。詳細な説明は省いているものの、一通りの手順は解説していますし自分で環境構築をする際のハマり所は押さえているので、この記事を参考に自分で調べながらチャレンジしてみてください。
今回構築する環境
今回はDockerコンテナ内でGPU(GeForce GTX 1080)を使用できるようにし、usdviewを動かすところまで行います。そのためには以下の手順を踏む必要があります。
- ・NVIDIAドライバのインスト―ル
- ・nvidia-dockerのインストール
- ・Dockerコンテナ内にUSD環境構築
Dockerを使わずに実機上で直接動く環境をつくるだけであればそれほど難しいことはなく、ほぼマニュアル通りに操作をしていくだけで環境をつくることができるはずです。個人で使用するのであればそれでもいいですが、数十人数百人という規模のプロダクションでそのような管理をしていては、現場の細かい要求に対応しきれません。そのため、本記事ではこのような構成にしています。
また、記事を書く際の環境も更新しています。前回までは仮想マシン上で動いているCentOS7上でDockerを動かして環境を構築していたのですが、今回からはGPUを使用するため実機を用意しました。そこで、弊社の技術の粋を集めた世界標準マシンを本連載で初お披露目します!!
はい剥き出しです。どのご家庭にもある余ったPCパーツを寄せ集めてつくりました。技術検証目的のPCって大体こんな感じですよね :-)
スペックとしては以下のような感じです。GPUは最新のものですが、それ以外は数年前のパーツ構成です。
CPU:Core i7-3770
Mem:32GB
SSD:SanDisk SDSSDHII 960GB
GPU:GeForce GTX1080
このマシンに環境構築をしていきます。
・環境構築
まずはCentOSのアップデートをし、デスクトップ環境をインストールします。
$ sudo yum -y update
$ sudo yum -y groupinstall "GNOME Desktop"
$ sudo reboot
・NVIDIAドライバのインストール
NVIDIAドライバをインスト―ルします。この時注意点として、OSがUEFIを使用して起動するように設定されている場合、デフォルトではドライバのインストールの際に署名が必要になるようです。本来ならこれもきちんと行うべきなのでしょうが、ちょっとめんどくさそうなのでUEFI設定メニューからSecure Bootをオフにして署名が必要ないようにしておきます。
ドライバはNVIDIAのWebサイトからダウンロードしてください。今回は390.67を使用しました。
$ wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/390.67/NVIDIA-Linux-x86_64-390.67.run
$ chmod +x NVIDIA-Linux-x86_64-390.67.run
CentOS7では標準でnouveauというドライバが使用されています。NVIDIA純正ドライバを使用するためにはこれを無効にする必要があります。ちょっと前はドライバの無効化は自分で行う必要があったため、検索して出てくる記事でもそのようにしているところがたくさんあります。今ではかなり自動化されているため、インストーラを実行するだけで自動的に行なってくれます。
まずはドライバをビルドするために必要なパッケージをインストールします。
$ sudo yum -y install kernel-devel kernel-headers gcc make git pciutils tmux
ドライバをインストールする際にはXを落としておく必要があります。この際、nouveauを無効にするために一度再起動してからドライバのインストールをする必要があるので、システムの設定としてオフにしておきます。
$ sudo systemctl set-default multi-user.target
一度目のNVIDIA-Linux-x86_64-390.67.runの実行でnouveauを無効化します。
$ sudo ./NVIDIA-Linux-x86_64-390.67.run
$ reboot
再起動後、nouveauが無効になっていることを確認します。
$ lsmod | grep nouveau
何も表示されなければ成功です。続いてドライバのインストールをします。最近のインストーラは本当に親切で、メニューに従っていくだけで完了します。
$ sudo ./NVIDIA-Linux-x86_64-390.67.run
ドライバのインストールができたらXが起動するようにしておきます。
$ sudo systemctl set-default graphical.target
$ reboot
きちんと認識されているか確認します。
$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)
$ lsmod | grep vidia
nvidia_uvm 760845 2
nvidia_drm 39676 1
nvidia_modeset 1104417 6 nvidia_drm
nvidia 14364138 397 nvidia_modeset,nvidia_uvm
drm_kms_helper 177166 1 nvidia_drm
drm 397988 4 drm_kms_helper,nvidia_drm
ipmi_msghandler 46608 2 ipmi_devintf,nvidia
i2c_core 63151 4 drm,i2c_i801,drm_kms_helper,nvidia
※このスクリーンショットはWebブラウザ上で表示が崩れないようにするために後日取得しました。
・Animal Logicのdocker-usdを使ってUSD環境を構築する
Google様やGitHub様にお伺いを立てたところ、Animal Logicが公開しているUSD環境構築システムをベースに作業をするのが良さそうです。
こちらはUSD環境をつくるためのものなのでCY2016にほぼ準拠、ただしPySide2は未対応ということです。ただし、前回ご紹介したptigas/vfxplatformとちがって環境構築用のコードも全てあるのでCY2016にきちんと準拠する場合でもこれをベースにするのが良いでしょう。ちなみに、今回はやりませんがdocker-usdにはUSD対応maya2016やmaya2017環境を構築するためのスクリプトも含まれています。本当、Animal Logic様様です。
※docker-usdは環境構築の手順がかなりシビアなようで、途中まで実行して失敗した場合に二度目以降はそのままでは正常に実行できないなど問題も多々あります。この辺りは各自必要に応じてDockerfileや環境構築用スクリプトの中身を確認しながら対応していくことになります。ここで何か問題があるからと言ってAnimal Logicに文句を言うのは筋違いです。オープンソースソフトウェアというのは、問題があったら自分の力で対応していくのが正しい関わり方です :-)
・Dockerのインストール
こちらは前回と同じです。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
・nvidia-dockerのインストール
Dockerコンテナ内のプログラムからGPUを使用するためにnvidia-dockerを使用します。ここで注意事項があります。nvidia-dockerにはnvidia-docker1とnvidia-docker2があります。記事執筆時点ではnvidia-docker2はOpenGL対応をするのが一手間かかるようです。そこで、今回はnvidia-docker1を使います。
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
$ sudo rpm -i /tmp/nvidia-docker-1.0.1-1.x86_64.rpm
$ sudo systemctl start nvidia-docker
$ sudo systemctl enable nvidia-docker
以上でnvidi-dockerのインストールができたので、Dockerコンテナ内でGPUが認識されているか確認します。
※このスクリーンショットはWebブラウザ上で表示が崩れないようにするために後日取得しました。
nvidia-smiでGPUが認識されています。
・docker-usdのインストール
$ sudo yum -y install git
$ git clone https://github.com/AnimalLogic/docker-usd.git
$ cd docker-usd/
$ cd linux/
$ mkdir ../apps
そのままでは以下のようなエラーになるので、build-centos7.shを書き換えます。
Copy local root certificates for corporate networks
cp: cannot stat '/etc/pki/ca-trust/source/anchors/*': No such file or directory
$ vi build-centos7.sh
# コメントアウト
# [ -e /etc/pki/ca-trust/source/anchors ] && cp -u /etc/pki/ca-trust/source/anchors/* cert/
また、SourceForgeからファイルを取得しようとすると証明書関連のエラーが出たので、--no-check-certificateオプションをつけてこれを回避します。
※これも本当はもっときちんとした対応をしないといけないはずなんですが。
$ vi scripts/download_vfx.sh
if [[ -z "${HTTP_HOSTNAME}" ]]; then
# wget $wgetPath -P "$DOWNLOADS_DIR" -O "$DOWNLOADS_DIR/$filepath" -nc
wget $wgetPath -P "$DOWNLOADS_DIR" -O "$DOWNLOADS_DIR/$filepath" -nc --no-check-certificate
if [[ $? -ne 0 ]]; then
[[SplitPage]]
USDのバージョン指定
現在(2018年7月10日時点)の最新リリース版はv0.8.5です。
※USD_VERSIONを指定してもDockerfile内で0.8.1という値がハードコーディングされてしまっているので、作成されるコンテナの名前は0.8.1になってしまいます。全部書き換えてもいいのですが、今回は面倒なのでそのままにしておきます。
$ vi centos7/usd/Dockerfile
# 0.8.5 に書き換え
ENV USD_VERSION "0.8.5"
インストール
$ sudo ./build-centos7.sh ../apps/
数十分から数時間ほど待つと処理が終わります。私の環境では40分くらいで終わりました。
さて、ビルドは無事に成功したでしょうか?
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
usd-docker/usd 0.8.1-centos7 14dd3f8fefa4 6 minutes ago 3.63GB
usd-docker/usd latest-centos7 14dd3f8fefa4 6 minutes ago 3.63GB
usd-docker/vfx 1-centos7 0f98602ca6a6 27 minutes ago 2.76GB
usd-docker/vfx latest-centos7 0f98602ca6a6 27 minutes ago 2.76GB
374b1682290a About an hour ago 2.28GB
usd-docker/base 1-centos7 3f8667ce0f30 About an hour ago 2.28GB
usd-docker/base latest-centos7 3f8667ce0f30 About an hour ago 2.28GB
baea292c0265 About an hour ago 2.18GB
nvidia/cuda 7.5-devel-centos7 1c32c124906d 4 days ago 1.24GB
$ sudo nvidia-docker run --rm --env=DISPLAY=$DISPLAY --env="QT_X11_NO_MITSHM=1" --env="LIBGL_ALWAYS_INDIRECT=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="/home:/home:rw" -ti usd-docker/usd:latest-centos7 /opt/usd/usd/0.8.5/bin/usdview /opt/usd/usd/0.8.5/share/usd/tutorials/convertingLayerFormats/Sphere.usd
見事にusdviewが起動しました!!
・サンプルデータの入手
PixarのWebサイトにサンプルデータがあります。こちらのKITCHEN SETを開いてみます。
$ sudo nvidia-docker run --rm --env=DISPLAY=$DISPLAY --env="QT_X11_NO_MITSHM=1" --env="LIBGL_ALWAYS_INDIRECT=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="/home:/home:rw" -ti usd-docker/usd:latest-centos7 /opt/usd/usd/0.8.5/bin/usdview ~/Downloads/Kitchen_set.usd
ちなみに起動時の表示は最も軽いモードで行われています。View→Complexityでサブディビジョンの詳細さを変えることができます。
Complexity: Low
Complexity: High
今回までで、ものすごく駆け足ではあるもののUSDを使用する環境の構築まで行うことができました。えっえっ!? Pixar!? そこが使っている環境!? と聞くとものすごいことのように感じて尻込みしてしまうかもしれませんが、それほど高度なことをしなくても同様な環境を手元につくることができるのは本当にいい時代だなぁ~と思います。だからこそこの環境を生かせるところと生かせないところでどんどん格差が広がってしまうと言うことができます。
今後の課題
これで、Docker内で動いているGPUを使用するアプリケーションをLinuxデスクトップ環境で使用できるようになりました。しかし、Linuxを使用するときによくやる、マシンルームにある高性能な計算機から画面のみ転送してクライアントで操作するということが今のままではできません。色々調べたところコンテナ内のアプリケーションの画面を転送してクライアントで動作させた実績はあるようです。例えば、"ILM - Pipeline in the cloud"ではクラウド上の計算機からVirtualGLを使用しているようです。これは課題として面白いですし、実用性も高いので手元でも実現してみたい技術のひとつです。
今回でやっとベースになる環境が整いました。次回からはUSDを使用したシーン構築やレンダリングを行なっていきたいとおもいます。
第4回の公開は、2018年9月を予定しております。
プロフィール