Open8

Stable DiffusionのためのUbuntu環境構築をしてみる

やまげんやまげん

マシンスペック

OS: Ubuntu 22.04 LTS
CPU: Ryzen 9 5900x 12-core processor x 24
GPU: 3060 Ti (VRAM 8GB)
Memory 32GB

やまげんやまげん

Python環境構築

Pythonはもう長らく触れていないので環境構築もすっかり忘れたが、とりあえず次の記事通りセットアップした。

# ツール類のインストール
sudo apt update
sudo apt install build-essential libbz2-dev libdb-dev \
  libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
  libncursesw5-dev libsqlite3-dev libssl-dev \
  zlib1g-dev uuid-dev tk-dev

# ダウンロードしたPythonを解凍
tar xJf Python-3.10.6.tar.xz
cd Python-3.10.6
./configure
make
sudo make install

https://www.python.jp/install/ubuntu/index.html

やまげんやまげん

CUDA環境構築

ここがややこしい。

GPUで推論するためにPythonのコードを次のように変えたところ、

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token="YOUR_TOKEN")
pipe.to("cuda")

以下のようなエラーが表示された。

NVIDIA GeForce RTX 3060 Ti with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.
If you want to use the NVIDIA GeForce RTX 3060 Ti GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

Ubuntu 22.04にはデフォルトでCUDA11.7がインストールされていたが、PyTorchの公式にはCUDA 11.6までの表記しかないため、それが原因だと考えた。

https://pytorch.org/get-started/locally/

ただ、おそらくUbuntu 22.04にはCUDA11.6をインストールすることができない(公式で20.04までのものしか提供されていない)ため、Ubuntuのバージョンを20.04に落とす必要が出てきた。→20.04に落とした。

基本は↓のドキュメント通りだが、cudaをインストールする時にバージョンを指定してやらないと最新版がインストールされてしまう。

sudo apt install cuda-11-6

https://developer.nvidia.com/cuda-11-6-2-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_network

cuDNNのインストールは次のドキュメントに従う。

sudo apt install zlib1g

https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

やまげんやまげん

やったぜ。

❯ python               
Python 3.10.6 (main, Aug 24 2022, 05:52:29) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True