画像生成AI: Fooocus を NVIDIA RTX Virtual Workstation へ インストールしてみてみた

[Fooocus](https://github.com/lllyasviel/Fooocus) は、画像生成AI [Stable Diffusion](https://ja.stability.ai/stable-diffusion) と [Midjourney](https://www.midjourney.com/home/?callbackUrl=%2Fapp%2F) の設計を再考したものです。
Stable Diffusion から学んだこのソフトウェアはオフライン、オープンソース、無料です。
Fooocus には、多くの内部最適化と品質向上が組み込まれ自動化されており、Midjourney のように手動による調整は必要ないため、より使いやすく、ユーザーはプロンプトと画像に集中するだけで済みます。
ユーザーは、難しい技術的パラメータを使わずに「新しい思考媒体を探索し、人類の想像力を拡張する」ために人間とコンピューターの相互作用を楽しむことができます。
<img width="600" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/1ad67e58-0904-2cde-dc8a-58768dd81fc5.png">
ということで、前回作成した [Stable Diffusion WebUI の NVIDIA RTX Virtual Workstation](https://qiita.com/shirok/items/966c9e7d22cd905ee26f) へ Fooocus をインストールしてみてみます。


# ■ NVIDIA RTX Virtual Workstation作成
今回使用する NVIDIA RTX Virtual Workstation は、[Oracle Cloud Infrastructure (OCI) GPU インスタンス](https://www.oracle.com/jp/cloud/compute/gpu/)の、[NVIDIA A10 Tensor Core GPU](https://www.nvidia.com/ja-jp/data-center/products/a10-gpu/) を搭載した VM.GPU.A10.1シェイプの Windows OS を使用します。
[VM.GPU.A10.1シェイプ](https://blogs.oracle.com/oracle4engineer/post/ja-announcing-nvidia-a10-gpu)は、15 個の OCPU、240 GB の CPU メモリ、24 Gbps のネットワーク帯域幅, 1 つの GPU と 24 GB の GPUメモリを備えています。
次を参考に作成します。

https://qiita.com/shirok/items/966c9e7d22cd905ee26f

# ■ Fooocus Downloading
次のFooocusのページにある [>>> Click here to download <<<](https://github.com/lllyasviel/Fooocus/releases/download/release/Fooocus_win64_2-1-60.7z) をクリックしてダウンロード

https://github.com/lllyasviel/Fooocus

![00_Install00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c92a0a42-1aa7-ae7a-8662-6a048395fe73.jpeg)
![01_Download01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/9901de07-448d-1c7e-ca15-ebc68fcf4717.jpeg)



# ■ Fooocus Install
インストールは、ダウンロードした .7zファイルを解凍するだけです。
Fooocus はインストールを簡素化しました。 「ダウンロード」を押してから最初のイメージを生成するまでに、必要なマウス クリックの回数は 3 回程度です。

## 1) インストールディレクトリ作成
ここでは、C:\Fooocus へインストールします。
```
PS C:\> mkdir C:\Fooocus
```

## 2) Fooocus .7Z ファイル配置
```
PS C:\> cp C:\Users\opc\Downloads\Fooocus_win64_2-1-60.7z C:\Fooocus\
```

## 3）Fooocus .7Z ファイル解凍
C:\Fooocus\ へ配置した Fooocus_win64_2-1-60.7z ファイルを右クリックして7z解凍
![01_Download02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c6a50a8f-9532-d98e-fe3c-b9bdb7ac226b.jpeg)

## 4) 解凍確認
```
PS C:\Windows\system32> ls C:\Fooocus\


    Directory: C:\Fooocus


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       10/19/2023   3:00 PM                Fooocus
d-----        8/11/2023   4:12 PM                python_embeded
-a----       10/17/2023  12:59 PM     1924967177 Fooocus_win64_2-1-60.7z
-a----        8/11/2023   4:14 PM             68 run.bat
-a----       10/14/2023   1:47 AM             85 run_anime.bat
```


# ■ Model Install

画像生成モデル Stable Diffusion XL(SDXL) がFooocusのページからダウンロードしてインストールします。

## 1) ダウンロード
[Fooocus](https://github.com/lllyasviel/Fooocus)のページからダウンロードできます。

![03_Install03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/52d4f5fd-11e0-11d2-87ea-2b33236ca883.jpeg)


## 2) SDXL Baseモデル配置
ダウンロードした [sd_xl_base_1.0_0.9vae.safetensors](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors) ファイルを Fooocus\models\checkpoints\ ディレクトリへ配置
```
PS C:> ls C:\Fooocus\Fooocus\models\checkpoints\

        Directory: C:\Fooocus\Fooocus\models\checkpoints


    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----       10/17/2023   1:20 PM     6938078334 sd_xl_base_1.0_0.9vae.safetensors
    -a----       10/17/2023   1:20 PM     6075981930 sd_xl_refiner_1.0_0.9vae.safetensors
```
## 3) SDXL Refiner配置
ダウンロードした [sd_xl_refiner_1.0_0.9vae.safetensors](https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0_0.9vae.safetensors) ファイルを Fooocus\models\checkpoints\ ディレクトリへ配置
```
PS C:> ls C:\Fooocus\Fooocus\models\checkpoints\

        Directory: C:\Fooocus\Fooocus\models\checkpoints


    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----       10/17/2023   1:20 PM     6938078334 sd_xl_base_1.0_0.9vae.safetensors
    -a----       10/17/2023   1:20 PM     6075981930 sd_xl_refiner_1.0_0.9vae.safetensors
```
## 4) inpaint control model 配置
ダウンロードした [inpaint.fooocus.patch](https://github.com/lllyasviel/Fooocus/discussions/679) ファイルを Fooocus\models\checkpoints\ ディレクトリへ配置
```
PS C:> ls \Fooocus\Fooocus\models\inpaint


        Directory: C:\Fooocus\Fooocus\models\inpaint


    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----       10/19/2023   3:21 PM     1317090025 inpaint.fooocus.patch
```

# ■ Fooocus実行

## 1）Fooocus ディレクトリへ移動
```
PS C:\> cd C:\Fooocus\
PS C:\Fooocus> ls


    Directory: C:\Fooocus


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       10/19/2023   3:00 PM                Fooocus
d-----        8/11/2023   4:12 PM                python_embeded
-a----       10/17/2023  12:59 PM     1924967177 Fooocus_win64_2-1-60.7z
-a----        8/11/2023   4:14 PM             68 run.bat
-a----       10/14/2023   1:47 AM             85 run_anime.bat
-a----       10/14/2023   1:47 AM             89 run_realistic.bat
```

## 2）Fooocus実行
Fooocus ディレクトリにある run.bat を実行
実行すると webブラウザが自動で起動し、http://127.0.0.1:7861 の local URLでFooocusが起動します。
```

PS C:\Fooocus> .\run.bat

    C:\Fooocus>.\python_embeded\python.exe -s Fooocus\entry_with_update.py
    Fast-forward merge
    Update succeeded.
    Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec  6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)]
    Fooocus version: 2.1.708
    Running on local URL:  http://127.0.0.1:7861

    To create a public link, set `share=True` in `launch()`.
    Total VRAM 23028 MB, total RAM 245754 MB
    Set vram state to: NORMAL_VRAM
    Device: cuda:0 NVIDIA A10 : native
    VAE dtype: torch.bfloat16
    Using pytorch cross attention
    [Fooocus] Disabling smart memory
    model_type EPS
    adm 2560
    Using pytorch attention in VAE
    Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
    Using pytorch attention in VAE
    missing {'cond_stage_model.clip_g.transformer.text_model.embeddings.position_ids'}
    Refiner model loaded: C:\Fooocus\Fooocus\models\checkpoints\sd_xl_refiner_1.0_0.9vae.safetensors
    model_type EPS
    adm 2816
    Using pytorch attention in VAE
    Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
    Using pytorch attention in VAE
    missing {'cond_stage_model.clip_g.transformer.text_model.embeddings.position_ids', 'cond_stage_model.clip_l.text_projection', 'cond_stage_model.clip_l.logit_scale'}
    Base model loaded: C:\Fooocus\Fooocus\models\checkpoints\sd_xl_base_1.0_0.9vae.safetensors
    LoRAs loaded: [('sd_xl_offset_example-lora_1.0.safetensors', 0.5), ('None', 0.5), ('None', 0.5), ('None', 0.5), ('None', 0.5)]
    Fooocus Expansion engine loaded for cuda:0, use_fp16 = True.
    Requested to load SDXLClipModel
    Requested to load GPT2LMHeadModel
    Loading 2 new models
    [Fooocus Model Management] Moving model(s) has taken 0.82 seconds
    App started successful. Use the app with http://127.0.0.1:7861/ or 127.0.0.1:7861
```

# ■ Fooocus 絵画実行
 
上記の webui-user.bat を実行すると
Webブラウザで http://127.0.0.1:7860/ へローカルアクセスされて table Diffusion web UI 画面が出力されます。
次の項目を設定して[Generate]をクリックするとプロンプトに記入した内容で絵画が作成されます。
```
・ Prompt: Tokyo tower, mount Fuji, cherry blossoms
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/1ad67e58-0904-2cde-dc8a-58768dd81fc5.png)



# ■ Model, LoRA の取得
Stable Diffusion で使用する絵画データ・モデルの取得は、Civitai が有名です。
Civitaiは, Stable Diffusion のモデルを共有するウェブサイトです。
ここからダウンロードできます。

https://civitai.com/images

![Civitai.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/52fb1d22-8133-7b23-8f61-079fadcdfdeb.jpeg)




ダウンロードしたModel,LoRAは次のディレクトリへ配置してリフレッシュ・ボタンもしくは再起動すると使用できます。
```
　・ Model配置場所: "Fooocus\Fooocus\models\checkpoints" 
　・ LoRA配置場所:  "Fooocus\Fooocus\models\loras" 
```
# ■ 参考
　・ [Fooocus](https://github.com/lllyasviel/Fooocus)
　・ [Oracle: NVIDIA A10 Tensor Core GPUおよびNVIDIA RTX Virtual Workstationsにより、リアルタイムのAI推論とグラフィック集中型のワークロードを加速](https://blogs.oracle.com/oracle4engineer/post/ja-announcing-nvidia-a10-gpu)
　・ [NVIDIA A100 80GB Tensor Core GPUで大規模なモデル・トレーニングを加速](https://blogs.oracle.com/oracle4engineer/post/ja-oracle-and-nvidia-engine-large-model-training)
　・ [Oracle: Graphics rendering with NVIDIA A10 GPU shapes on OCI](https://blogs.oracle.com/cloud-infrastructure/post/graphics-rendering-nvidia-a10-gpu-oci)
　・ [Oracle: Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs](https://docs.oracle.com/en/learn/deploy-stable-diffusion-automatic-in-oci/index.html#introduction)
　・ [NVIDIA: System Management Interface SMI](https://developer.nvidia.com/nvidia-system-management-interface)
　・ [Stable Diffusion XL – SDXL 1.0 Model](https://stablediffusionxl.com/)
　・ [SDXL 1.0 base model.](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
　・ [Civitai](https://civitai.com)
　・ [LoRAの作り方。イラストを学習させてAIで生成する方法](https://original-game.com/how-to-make-lora/)