Stable Diffusion + Chillout Mix のエラーを ChatGPT で解決した話

Google Colaboratory で Stable Diffusion + Chillout Mix を用いていて、それまで問題なかったのに今日突然

> RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.8. Please reinstall the torchvision that matches your PyTorch install.

というエラーに遭遇して、自力でなんとかしようと思ったけどできず、ChatGPT で解決したという話です。

# Before

[【Stable Diffusion】ChilloutMixの使い方（Google Colab）](https://original-game.com/how-to-use-chilloutmix/) を拝見して、そこにある通りに実行してました。そのコードは次の通りです。


```python
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd /content/stable-diffusion-webui

!wget https://civitai.com/api/download/models/11745 -O /content/stable-diffusion-webui/models/Stable-diffusion/Chilloutmix-Ni-pruned-fp32-fix.safetensors

!python launch.py --share --xformers --enable-insecure-extension-access
```

以上です。昨日まではそれだけで実行できていたのですが、今日試してみると、見たことのないエラー

> RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.8. Please reinstall the torchvision that matches your PyTorch install.

が出現してました。「何もしてないのに壊れた」と思ってそのエラーメッセージをググってみると、このページに行き当たりました。

https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/9341

今（日本時間４月４日２３時）時点でもまだ議論中のようですね。新しく出現したエラーらしく、ここに書いてあることを試してみようかなと思っても、自分の環境（Google Colaboratory）とは異なるためか解決できませんでした。

# After 

そこで ChatGPT を使って解決できました、ってのが結論です。最終的に得られたコードは

```python
!pip install --upgrade Pillow
!echo "Y" | pip uninstall torchvision
!echo "Y" | pip install torchvision==1.9.0

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd /content/stable-diffusion-webui

!wget https://civitai.com/api/download/models/11745 -O /content/stable-diffusion-webui/models/Stable-diffusion/Chilloutmix-Ni-pruned-fp32-fix.safetensors

!python launch.py --share --xformers --enable-insecure-extension-access
```

これを使えば、上記のエラーを回避できました。

Before のコードとどこが違うかというと、最初の３行が追加されただけですね。まあ、結果だけ見れば簡単なんですが、自分のヘボプログラマ能力的には、ChatGPTの助けなしには正直無理っぽかったです。

# ChatGPT との会話

結論としては以上なのですが、参考のため ChatGPT との会話履歴を貼っておきます。以下、引用フォーマットになっているのが自分、なってないのがChatGPTのセリフです。



> Google colaboratory 上で RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.8. Please reinstall the torchvision that matches your PyTorch install. というエラーが起こりましたが、どう対処すれば良いですか？

このエラーは、PyTorchとtorchvisionが異なるCUDAバージョンでコンパイルされたことを示しています。これは、PyTorchがCUDA 11.7でコンパイルされ、torchvisionがCUDA 11.8でコンパイルされた場合に発生する可能性があります。

対処法としては、以下の手順を試すことができます。

- 最初に、Google Colabのランタイムを再起動してみてください。場合によっては、これだけで問題が解決する場合があります。

- PyTorchとtorchvisionのバージョンを確認してください。例えば、以下のコードを実行して、PyTorchとtorchvisionのバージョンを確認できます。

```Python
import torch
import torchvision
print(torch.__version__)
print(torchvision.__version__)
```

1. PyTorchとtorchvisionのバージョンが異なる場合は、torchvisionの再インストールを試してみてください。以下のコマンドを実行して、現在のtorchvisionをアンインストールし、適切なバージョンをインストールできます。

```Python
!pip uninstall torchvision
!pip install torchvision==<PyTorchと同じバージョン>
```

たとえば、PyTorchが1.9.0である場合、適切なtorchvisionのバージョンは1.9.0となります。

以上の手順を試しても問題が解決しない場合は、Google Colabのランタイムを再起動し、必要に応じて環境をリセットすることもできます。


> ありがとうございました。指示通りに実行すると。次のようなエラーになりました。対処法を教えてください。

```Python
 ---------------------------------------------------------------------------
 ImportError                               Traceback (most recent call last)
<ipython-input-6-61f54cd92c2d> in <cell line: 2>()
      1 import torch
----> 2 import torchvision
      3 print(torch.__version__)
      4 print(torchvision.__version__)



5 frames

/usr/local/lib/python3.9/dist-packages/torchvision/__init__.py in <module>
      4 
      5 import torch
----> 6 from torchvision import datasets, io, models, ops, transforms, utils
      7 
      8 from .extension import _HAS_OPS

/usr/local/lib/python3.9/dist-packages/torchvision/datasets/__init__.py in <module>
----> 1 from ._optical_flow import FlyingChairs, FlyingThings3D, HD1K, KittiFlow, Sintel
      2 from ._stereo_matching import (
      3     CarlaStereo,
      4     CREStereo,
      5     ETH3DStereo,

/usr/local/lib/python3.9/dist-packages/torchvision/datasets/_optical_flow.py in <module>
     10 from PIL import Image
     11 
---> 12 from ..io.image import _read_png_16
     13 from .utils import _read_pfm, verify_str_arg
     14 from .vision import VisionDataset

/usr/local/lib/python3.9/dist-packages/torchvision/io/__init__.py in <module>
      3 import torch
      4 
----> 5 from ..utils import _log_api_usage_once
      6 
      7 try:

/usr/local/lib/python3.9/dist-packages/torchvision/utils.py in <module>
      9 import numpy as np
     10 import torch
---> 11 from PIL import Image, ImageColor, ImageDraw, ImageFont
     12 
     13 __all__ = [

/usr/local/lib/python3.9/dist-packages/PIL/ImageFont.py in <module>
     36 from . import Image
     37 from ._deprecate import deprecate
---> 38 from ._util import is_directory, is_path
     39 
     40 

ImportError: cannot import name 'is_directory' from 'PIL._util' (/usr/local/lib/python3.9/dist-packages/PIL/_util.py)
---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------
```

このエラーは、Pillow（Python Imaging Library）の一部であるPIL（Python Imaging Library）の依存関係に問題があることを示しています。以下の手順を試して、問題を解決できるかどうかを確認してください。

- Pillowを最新のバージョンにアップグレードしてみてください。以下のコマンドを実行して、Pillowをアップグレードできます。

```Python
!pip install --upgrade Pillow
```

- もう一度、torchvisionを再インストールしてみてください。以下のコマンドを実行して、現在のtorchvisionをアンインストールし、適切なバージョンをインストールできます。

```Python
!pip uninstall torchvision
!pip install torchvision==<PyTorchと同じバージョン>
```

 もし、Pillowが完全にインストールされていない場合は、以下のコマンドを実行して、Pillowを再インストールしてください。

```Python
!pip uninstall Pillow
!pip install Pillow
```

上記の手順を試した後も、問題が解決しない場合は、Google Colabのランタイムを再起動してから、必要に応じて環境をリセットすることを検討してください。

> Google colabで次のコマンドを実行すると、Proceed (Y/n)? と聞かれましたがそれに答える入力が実行できませんでした。対処法を教えてください。


Google Colab上での入力には、次のような方法があります。

```Python
!echo "Y" | command
```

具体的には、次のように入力してください。

```Python
!echo "Y" | pip uninstall torchvision
!echo "Y" | pip install torchvision==1.9.0
```

これにより、コマンドに対して "Y" という入力が自動的に行われるため、処理が続行されます。

# Stable Diffusion + Chillout Mix で生成した「こうそフレンズ」

[Stable Diffusion + ChilloutMix で「こうそフレンズ」を生成する](https://note.com/handsomemaskot/n/nddcf572c2fca) 等で公開しています。

![00008-989966774.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211162/56c094be-f80a-2ab0-098b-547de10623ea.png)


![00010-4174115937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211162/1e8c476a-0191-529e-c870-0ca44b841bfc.png)


![00008-3786149130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211162/23697484-ddcc-e9c4-2173-75fef58de87c.png)