HoudiniでVFXクラウドコンピューティング

これは [Houdini Apprentice Advent Calendar 2019](https://qiita.com/advent-calendar/2019/happrentice) 19日目の記事です。
Houdini用VWSを構築する際に比較検討した小ネタです。

# はじめに
仕事で使うマシンはメモリは32GBぐらいが限度でGPUもなかなか増強出来ません。
私用で使うmacOSの3DCG環境は年々弱くなる限りで、OpenGLが廃止されたりCUDAサポートが
切られたりでCGに向かないOSになっています。
クラウドコンピューティングのためにGCPのCentOS環境を構築してみることにしました。

GCPを選択した理由はいくつかあります。
VFXクラウドプラットフォームとして提供されていたAtheraが、バックエンドの
クラウドプラットフォームで使っていたり、ZYNCやOpenCue、Stadiaなど
メディア・エンターテインメント系に結構力を入れているからです。
(awsシェアが強すぎるというのもある。AWSにもVWS[^1]が用意されています。)

リモートデスクトップのクライアントにVNCクライアントではなくTeradici PCoIPクライアントを使います。
Teradiciは特にグラフィックワークロードに使われるリモートクライアントです。Wacomドライバもサポート済です。
ボリュームライセンス5本からの販売で個別ライセンスで販売してくれないので、
GCP MarketPlaceからTeradici付ComputeEngineインスタンスを立ち上げます。

個人ユースではUbuntuが多い気もしますが、VFXプロダクションはだいたいCentOSです。
(rpmパッケージの提供がそれ)依存ライブラリに関しては、ディストリビューションごとに読み分けて下さい。

[Quadro](https://docs.nvidia.com/grid/qvws/latest/qvws-quick-start-guide-google-cloud-platform/index.html)も検討しましたが、料金がかなり高いのでテストは見送りました。


## 楽しいインストール作業
マーケットプレイスで用意されたコンテナを使います。
料金は高めになりますが、GNOMEとかGPUドライバーの設定が不要なので、
ISOからブートするなど初めから全部やるよりも内容は優しいです。
自前で全部やりたい方は下記リンクを参考にして下さい。[^2]

1.先にリンク先からクライアントOSのclientsをインストールします。
https://docs.teradici.com/find/product/software-and-mobile-clients/2019.11

2.GCP のアカウントを作成したアカウントにComputeEngineを作ります。
https://www.teradici.com/google/

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/f3af0c9a-df83-e8bd-da67-6dc299db7b0c.png)

東京リージョン(asia-northeast1-a)はGPUがサポートされているので指定します。
なかなかこのスペックで作業できることはないですが、１時間あたり$1,2ぐらいです。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/24b7603e-73a7-650e-5316-7cbecd197e74.png)

3.SSHボタンを押して、ドライバ周辺のセットアップを行います。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/09ee36dc-04b4-d08c-9ca6-6aaeb4307bd6.png)

ここで設定したユーザーとパスワードをTeradiciクライアントのログインの際に使います。

```bash
sudo passwd `whoami`
sudo passwd root
```
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/fbe5443b-731a-f396-28f2-09af945b0d97.png)


4.Houdini をインストールします。root にログインして下さい。
(デイリービルドのPython3で検証しているのは、深層学習と組み合わせようとした名残です。)

```bash
# https://www.sidefx.com/ja/download/ からデイリービルドのPython3

tar -xvzf houdini-py3-18.0.318-linux_x86_64_gcc6.3.tar.gz
cd houdini-py3-18.0.318-linux_x86_64_gcc6.3/
sudo ./houdini.install

cd /opt/hfs18.0
source houdini_setup
```

マニュアル通りならライセンスマネージャーで起動できるはずですが、
下記ライブラリが足りないと警告されたので追加

```bash
yum install libXScrnSaver libGLU -y
```

5.インストーラーの指示に従いHoudiniコマンドを起動します。

```bash
hkey
houdini
```

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/938a35bb-c2a8-acfd-fbbc-8f4673f65941.png)
うまくいきました。しんどいのでコンテナで設定したいですね。
起動中、GPUが認識されているのが確認できます。

```bash
watch -n 1 nvidia-smi
```

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48607/939a957e-f5de-f2b8-acbb-565947ca1a1d.png)

なにもしないまま放っておくと無料枠を約2週間で使い切ってしまうので、
`shutdown -h now` でインスタンスを停止します。

### 最後に
突貫で作った感想としては、即応性がネックになるボリゴンモデリングやテクスチャペイントにはあまり向いていない印象です。
メモリやGPUの潤沢な(熱や電気代を気にしなくて良い)計算量を求められるシミュレーションには結構使えるのではないかなと思います。
ApprenticeらしいHoudini+Linuxセットアップの記事をまとめることが出来ました。


<details><summary>言い訳</summary><div>
Kaolin[^3]及びPytorchとHoudini Python3の統合する記事を作ろうと思っていましたが、
gccが古かったり、Pytorchの要求するCUDAが違ったりでうまく統合できませんでした。
機を見てどこかでチャレンジしてみます。
</div></details>

[^1]: https://cloud.google.com/solutions/creating-a-virtual-linux-workstation
[^2]: https://aws.amazon.com/jp/quickstart/architecture/vfx-workstations-with-teradici/
[^3]: https://blogs.nvidia.co.jp/2019/11/27/kaolin-library-research-3d/