Docker for Windowsで話題のDreamfusion(Text to 3D model)を動かしてみた


# Docker for Windowsで話題のStable-Dreamfusionを動かしてみた


こんにちは！！[Aster](https://twitter.com/Beehibiki)です！！！
今回は話題のStable-DreamfusionをDocker環境で動かすことができたので、その流れを記事として書こうと思います。
Docker自体まだまだ初心者ですので、書き方が悪い場所もあるかもしれません。
そのため、あくまで一つのやり方として見て頂ければと思います！！

# 実行環境
Windows10
NVIDIA GeForce RTX 3090
memory 64GB
Docker for Windows


# Stable-Dreamfusionとは
[Stable-Dreamfusion](https://github.com/ashawkey/stable-dreamfusion)とは、テキストから3Dモデルを生成する方法となります。
特徴として、2D画像の生成モデルを3Dに転用しているため、3Dのデータセットが完全に不要であることです。
そのため、多様な3D生成が可能となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/8d2d8b7a-a7eb-b36e-3695-7f839c0f3ac4.png)

詳細は[論文](https://arxiv.org/abs/2209.14988)をご覧ください。
# Docker for Windowsを動かすまで

## WSL2の導入
管理者権限で開いたPowerShellで以下を実行します。
```
wsl --install
```
次に、WSL2が有効になっているかを確認します。
```
wsl --status
```
ここで既定のバージョンが2でなければ、以下を実行します。
```
wsl --set-default-version 2
```

## NVIDIA drivers for WSLのインストール

ホスト環境にNVIDIA Driverを入れましょう。

以下のページのGet CUDA Driverボタンを押して、GeForce Driver(実行環境によってはQuadro Driver)を
ダウンロードしてください。
https://developer.nvidia.com/cuda/wsl

install はすべてデフォルトで大丈夫です。

## Docker Desktop for Windowsのインストール
次にDocker Desktopを入れます。
https://www.docker.com/products/docker-desktop/

インストールの際に注意したいのが、Configurationで
Install required Windows components for WSL 2にチェックを入れてインストールしてください。

インストールできているか確認しておきましょう。
```
 wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2
```



Docker for Windows上でGPUを使えるようになりました。
# Stable-Dreamfusionを動かすまで

Stable-Dreamfusionのコードを任意のフォルダにクローンしてください。

```
git clone https://github.com/ashawkey/stable-dreamfusion.git
```

次にDocker　buildを行いたいところですが、そのままのDockerfileでは、エラーが出てしまいました。
そのため、Dockerfileの書き換えを行います。このとき、共有フォルダ用のフォルダも追加しましょう。

```docker:dockerfile
FROM nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04

# Remove any third-party apt sources to avoid issues with expiring keys.
RUN rm -f /etc/apt/sources.list.d/*.list

RUN apt-get update

RUN DEBIAN_FRONTEND=noninteractive TZ=Europe/MADRID apt-get install -y tzdata

# Install some basic utilities
RUN apt-get install -y \
    curl \
    ca-certificates \
    sudo \
    git \
    bzip2 \
    libx11-6 \
    python3 \
    python3-pip \
    libglfw3-dev \
    libgles2-mesa-dev \
    libglib2.0-0 \
 && rm -rf /var/lib/apt/lists/*

RUN pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116

RUN pip3 install git+https://github.com/NVlabs/nvdiffrast/

RUN pip3 install git+https://github.com/openai/CLIP.git

RUN mkdir -p /home/folder

# Set the default command to python3
#CMD ["python3"]

```

Docker runの時にhome/folderが共有フォルダとして設定していくようにします。

次にDocker buildを行います。

```
cd stable-dreamfusion/docker
docker build -t stable-dreamfusion:latest .
```

次にDocker runを行います。
```
docker run --gpus all --name stable-dreamfusion --mount type=bind,src=C:\Users\19044\Desktop\esaki\stable-dreamfusion,dst=/home/folder -it stable-dreamfusion
```

src=C:\Users\19044\Desktop\esaki\stable-dreamfusionの部分は先ほどクローンした場所にしましょう。
これで、stable-dreamfusionのフォルダとDocker内部のhome/folderを共有することができました。

次にセットアップをしましょう。
```
cd home/folder/stable-dreamfusion
pip3 install -r requirements.txt
bash scripts/install_ext.sh
```

これでGithub的に準備完了と思いきや、大きな落とし穴がありました。
それがhnggingfaceからアクセストークンを取得することと、「Stable Diffusion」の
モデル説明のページに行って、利用規約に同意する必要がありました。

huggingfaceのsignupを行いましょう。
https://huggingface.co/settings/tokens

サインアップをし、メールの確認もしましょう。そうしないとアクセストークンが発行できません。

![Hugging Face – The AI community building the future. — Mozilla Firefox 2022_10_17 23_50_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/50cb2996-da4c-1420-d8d5-99df161a6126.png)

メールの確認も済んだら以下のような画面になると思います。
そしたら、New Tokenを押し、適当な名前(今回はstable-dreamfusionとしました)を決め、トークンを生成しましょう。

![Hugging Face – The AI community building the future. — Mozilla Firefox 2022_10_17 23_50_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/6ecfb692-89b8-fb24-81d6-d34a2c71c7f6.png)

次にDocker上でhuggingrfaceにログインしましょう。

```
python -m pip install huggingface_hub
huggingface-cli login
```

生成したアクセストークンを
```
huggingface-cli login

        _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
        _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
        _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
        _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
        _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|

        To login, `huggingface_hub` now requires a token generated from https://huggingface.co/settings/tokens .

Token:
```
と出てくるので、Tokenにアクセストークンを入れましょう。

次に利用規約に同意しましょう。
https://huggingface.co/CompVis/stable-diffusion-v1-4

これでほとんどの設定が完了しました。

gui表示をする場合は、別途設定が必要となります。
X Window Serverを用いてGUI操作を行います。
こちらの記事で設定方法が書いてあるので、こちらをご覧ください
firefoxを起動前までの設定が終わったら完了です。
https://wisteriahill.sakura.ne.jp/CMS/WordPress/2020/09/02/docker-desktop-for-windows-x-window-gui/

すべての設定が終了しました。
そしたら、実行してみましょう!!
GUIなし
```
python3 main.py -O --text "a DSLR photo of adelicious hamburger" --workspace trial2 --iters 15000 --lr 1e-3 --w 64 --seed 0 --lambda_entropy 1e-4 --ckpt scratch --save_mesh
```
![Blender 2022_10_18 0_45_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/57ee644c-6fee-01dc-3c64-ce91ec890190.png)


ちなみに失敗作
パンをこねるパンダ
![0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/b4495f7e-1bda-4330-8b91-d3f61f4101bf.png)

神秘的なラーメン

![映画 & テレビ 2022_10_18 0_46_27 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340659/1b472ee3-c2f6-6912-b42f-c1952b894d91.png)



# まとめ
今回 Dreamfusionを用いてTextから3Dモデルを生成してみました！！
今後も他のモデルもDocker環境で動かせるようにしていきます。