$30 off During Our Annual Pro Sale. View Details »

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に 画像生成してもら 画像生成してもら う う Kenichiro Matohara(matoken)

    <maroken@kagolug.org> 1 / 32
  2. 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org https://matoken.org

    2 / 32
  3. 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
  4. いくつかのStable Diffusion いくつかのStable Diffusion (クラウドの一つ) (iGPUで動作する今回 試したもの) その他派生いっぱい Stable Diffusion

    with 🧨 Diffusers Google Colab で はじめる Stable Diffusion v1.4|npaka| note bes-dev/stable_diffusion.openvino 4 / 32
  5. Stable Diffusion OpenVINO Stable Diffusion OpenVINO Intel内蔵GPUで動作するOpenVINOを使ってStable Diffusionを動くようにしたもの 動作要件 bes-dev/stable_diffusion.openvino

    Requirements Linux, Windows, MacOS Python 3.8.+ CPU compatible with OpenVINO. 5 / 32
  6. 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
  7. 導入環境 導入環境 LENOVO ThinkPad Yoga 260 CPU Intel® Core™ i5-6200U

    CPU @ 2.30GHz RAM DDR4 8GB DISK SSD + USB2.0接続HDD  SSDの容量が足りないので外付けHDDに導入した 7 / 32
  8. 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
  9. 実行 実行 $ python ./demo.py --prompt "kawaii neko" : 9

    / 32
  10. 初回起動時にモデルデータのダ 初回起動時にモデルデータのダ ウンロードが行われる ウンロードが行われる 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
  11. プロンプトからの画像生成 プロンプトからの画像生成 ここまで来たら画像生成ができる テキストの文字列でどんな画像を生成するか伝える → プロンプト メモリが足りなそう😿 $ python ./demo.py

    --prompt "kawaii neko" Terminated 11 / 32
  12. メモリ不足なのでディスクスワ メモリ不足なのでディスクスワ ップファイルの追加 ップファイルの追加 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
  13. 15分程経って処理が終了し, output.png として画像が出来た 何度か試すと10〜20分程で1枚 LoadAverageは10くらいまで上がって他の処理はあまりやりた くない感じ 13 / 32

  14. またTerminated またTerminated 数回に一回 Terminated この環境に導入している nohung がkillしているようなので一時的に 無効にして安定 一般的な環境には導入されていない $

    sudo systemctl stop nohang-desktop.service $ sudo systemctl stop nohang.service 14 / 32
  15. 次回以降起動時 次回以降起動時 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
  16. 初期画像とプロンプトから画像 初期画像とプロンプトから画像 生成(img2img) 生成(img2img) 初期画像を渡してそれを参考にプロンプトから画像を生成する 初期画像に山の中のハンモック画像,プロンプトに「寝猫,キャンプ場, ハンモック」 $ python demo.py

    --seed ${seed} --prompt "sleep cat, campe site, hammock" --init-image=./hammo 16 / 32
  17. 元画像 17 / 32

  18. ハンモックに猫っぽいものが ハンモックに猫っぽいものが 18 / 32

  19. 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
  20. 見た目もチェックサムも同じ 見た目もチェックサムも同じ $ sha512sum ./kawaii_neko-999999-0?.png 3cd2fad521495571842d9f37f13113bd6a18195e120fd4cded40f7fcf59eb3807cdd9aa43ae4831dfd7e4b0228077bd 3cd2fad521495571842d9f37f13113bd6a18195e120fd4cded40f7fcf59eb3807cdd9aa43ae4831dfd7e4b0228077bd 20 / 32

  21. 低解像度で作成して気に入った 低解像度で作成して気に入った 画像だけ高解像度で作り直すと 画像だけ高解像度で作り直すと いったことができそう いったことができそう  今の所OpenVINO版は解像度指定が出来ないがロードマップに ある Suggestion:

    Add --height and --width for generating images in different pixel sizes · Issue #6 · bes-dev/stable_diffusion.openvino 21 / 32
  22. 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
  23. SEEDで探索 SEEDで探索 似たプロンプトでSEEDを指定してみる 上から「kawaii inu」「kawaii neko」「kawaii penguin」 SEEDが同じでプロンプトが似ていると似た傾向に? 23 /

    32
  24. strengthで探索 strengthで探索 どのくらいプロンプトに寄せるかの強さ?(0〜1で既定値:0.8) プロンプトのみ 24 / 32

  25. 初期イメージあり 25 / 32

  26. num-inference-steps num-inference-steps どのくらい推測するか?(既定値:32) 20~くらいでSEED探索すると時 間が節約できる? 26 / 32

  27. NSFWフィルタ NSFWフィルタ Stable Diffusion既定値ではNSFWフィルタが掛かっている patchして外せる NSFWをすり抜けてくるものもあるのでWebサービスなどでは大変 そう 27 / 32

  28. プロンプト(呪文)の作り方 プロンプト(呪文)の作り方 Memeplexはプリセットが充実しているので便利,画像をクリック すると日本語,英語翻訳後のプロンプトも表示される 構図やフィルタなどの例がたくさん紹介されている Twitterで「#StableDiffusion」などで検索 プロンプトを推測してもらうことが出来る Memeplex.app The Ai

    Art - AI, Art, and everything in between https://twitter.com/search? q=%23stablediffusion&f=live methexis-inc/img2prompt – Run with an API on Replicate 28 / 32
  29. 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
  30. imageサイズ指定も可能,以下はプロンプト,SEED,モデルは共通で 128x128(9min), 256x256(31min), 512x512(139min)の 例.サイズが違うと結果も違うものに? 30 / 32

  31. まとめ まとめ Stable Diffusion楽しいけど時間をかけるか,お金をかけないと遊 びにくかった OpenVINO版だとiGPUでも試せて嬉しい ディスクリートGPUに比べて速度は遅いけどローカルなのでパラメー ターをずらしながらloopで回したりなど気兼ねなく動かせる しかし進化が日どころか時間単位で目まぐるしいしこれから控えてい る3Dや動画対応となると今の環境では現実的ではない

    強いマシンや強いクラウドを使うべき……🦾 31 / 32
  32. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス 小江戸らぐ 9月のオフな集まり(第242回) Kenichiro Matohara(matoken)

    Asciidoctor Reveal.js CC BY 4.0 32 / 32