Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intel CPUでもAIに画像生成してもらう

Intel CPUでもAIに画像生成してもらう

"小江戸らぐ 9月のオフな集まり(第242回) - connpass" https://koedolug.connpass.com/event/258128/
source: https://gitlab.com/matoken/koedolug-2022.09/-/blob/main/slide/slide.adoc

Kenichiro MATOHARA

September 10, 2022
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. Intel CPUでもAIに画像生成して Intel CPUでもAIに画像生成して もらう(Core i 6世代以降対応) もらう(Core i 6世代以降対応)

    画像生成AIのStable DiffusionがOSSで公開 しかローカルで動かすにはディスクリートGPUが必要(今は行ける?) とりあえず無料で提供されている @shi3zさんのStable Diffusion Web AppのMemeprex.appで遊ぶ Intel内蔵GPUで動作するStable Diffusion.OpenVINOを知っ たので試してみた Memeplex.app bes-dev/stable_diffusion.openvino 3 / 32
  2. いくつかのStable Diffusion いくつかのStable Diffusion (クラウドの一つ) (iGPUで動作する今回 試したもの) その他派生いっぱい Stable Diffusion

    with 🧨 Diffusers Google Colab で はじめる Stable Diffusion v1.4|npaka| note bes-dev/stable_diffusion.openvino 4 / 32
  3. OpenVINOの要件 手元の端末は第3及び第6世代 System Requirements for the Intel® Distribution of OpenVINO™

    Toolkit CPU Processors 6th to 12th generation Intel Core processors 1st to 3rd generation of Intel® Xeon® Scalable processors Intel Atom® processor with Intel® Streaming SIMD Extensions 4.2 (Intel® SSE4.2) $ lscpu | grep ^Model\ name: Model name: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz $ lscpu | grep ^Model\ name: Model name: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 6 / 32
  4. 導入環境 導入環境 LENOVO ThinkPad Yoga 260 CPU Intel® Core™ i5-6200U

    CPU @ 2.30GHz RAM DDR4 8GB DISK SSD + USB2.0接続HDD  SSDの容量が足りないので外付けHDDに導入した 7 / 32
  5. Stable Diffusion OpenVINO 導入 Stable Diffusion OpenVINO 導入 1 HDDに作業ディレクトリ作成

    2 virtualenv で環境作成 3 virtualenv環境反映 4 stable_diffusion.openvinoをclone 5 Install  Dockerfileも在り $ mkdir /media/matoken/export/sd $ cd /media/matoken/export/sd $ virtualenv . $ source bin/activate $ git clone https://github.com/bes-dev/stable_diffusion.openvino $ cd stable_diffusion.openvino $ pip install -r requirements.txt 1 2 3 4 5 8 / 32
  6. 初回起動時にモデルデータのダ 初回起動時にモデルデータのダ ウンロードが行われる ウンロードが行われる 10回以上試みたがタイムアウトで失敗&毎回ファイル先頭からダウン ロードで進めないのでVPSで入手してコピー DiskFullになったので ~/.cache/huggingface からHDDにシン ボリックリンクを貼ってそちらにコピー

    $ ls -Ss1 ~/.cache/huggingface/hub/models--bes-dev--stable-diffusion-v1-4-openvino/blobs/ 合計 4169032 3357512 7655112cde3c5084c2709b2b89994834b24efc457f2c1b302bb3d7a056bfdb7a 480740 b3f34c33d8c272f61c6780251a503911c7e7a448cdc10f8fb7d9bc59c3462951 193328 456fd6d12ffab507af1ad6772b7b1922b35502272cd5be3708c8292252cd4c46 133460 8732df1da0a3026da5ee6070df8899efbccf0d844821368214af8d95abeae467 2952 a6514903a2875c318399e451c1f9ddaf4a3f7ba4 460 dfb9780b4527132dfe9a19ccc7ce5c0d885cb2ae 328 c0f568310ea3a649aea01772031087d324272780 252 87adf22fe4160e26a799270b2f53c8c21c9d6cd0 10 / 32
  7. メモリ不足なのでディスクスワ メモリ不足なのでディスクスワ ップファイルの追加 ップファイルの追加 1 8GB程のディスクイメージの作成 2 スワップとして初期化 3 スワップを有効にする

    4 再度画像生成 $ dd if=/dev/zero of=./swap.img bs=1M count=8096 $ sudo chown 0.0 ./swap.img $ sudo chmod 600 ./swap.img $ sudo mkswap ./swap.img $ sudo swapon `pwd`/swap.img $ python ./demo.py --prompt "kawaii neko" 32it [13:14, 24.84s/it] 1 2 3 4 12 / 32
  8. 次回以降起動時 次回以降起動時 1 Stable Diffusion 作業ディレクトリに移動 2 virtualenv virtualenv 環境反映

    3 disk swap 反映 4 nohang 停止 $ cd /media/matoken/export/sd/stable_diffusion.openvino $ source ../bin/activate $ sudo swapon `pwd`/swap.img $ sudo systemctl stop nohang-desktop.service $ sudo systemctl stop nohang.service 1 2 3 4 15 / 32
  9. SEEDの固定 SEEDの固定 モデルとSEEDとプロンプトが同じだと同じ画像が得られるらしいの で試す 既定値では内部でランダムなSEEDが使われる(後でわからない)よう なので実行時に引数で適当なSEEDを渡す MODEL: bes-dev/stable-diffusion-v1-4-openvino (既定値) SEED:

    999999 PROMPT: "kawaii neko" $ python demo.py --seed 999999 --prompt "kawaii neko" --output "kawaii_neko-999999-01.png" 32it [09:47, 18.36s/it] $ python demo.py --seed 999999 --prompt "kawaii neko" --output "kawaii_neko-999999-02.png" 32it [09:41, 18.18s/it] 19 / 32
  10. SEEDの範囲とパラメーターの記 SEEDの範囲とパラメーターの記 録 録 SEEDは既定値ではランダムで保存されないようなので毎回指定する ことにする SEEDの範囲は 0〜4294967295 (2^32)のよう 生成された画像のexif領域にパラメータをメモしておく

    seed=$( shuf -i 0-4294967295 -n 1 ) python demo.py --seed ${seed} --prompt "${prompt}" --init-image="${image}" --output "${outfile exiftool -overwrite_original -comment="SEED:${seed}/PROMPT:${prompt}" "${outfile}" $ exiftool ./seed-neko-1024.png | grep ^Comment Comment : SEED:1024/PROMPT:a charactor of Future kawaii neko 22 / 32
  11. Intel 第5世代以前でも動かしたい Intel 第5世代以前でも動かしたい OpenVINO版は6世代目以降のCPUが必要 を見かける patch適用済リポジトリ 導入例 (docker runのbind

    mountが逆になっている?) 第3世代のIntel® Core™ i5-3320M CPU @ 2.60GHz/RAM 16GBで動くことを確認 Stable Diffusion CPU patch https://github.com/loadletter/stable-diffusion https://rentry.org/cpu_stable_diffusion_guidea 29 / 32