M1 Mac で Kohya版LoRA の学習環境のセットアップメモ(まだセットアップできていない)
先日は stable diffusion を web ui で利用できるようにした。
現在、世界中の人々が学習モデルを作っては公開されていて、ものすごい勢いだ。 が、ものづくりする人間の端くれとしては、自分に都合が良いアウトプットをする道具にしなきゃならない。 ので、LoRA (Low-Rank Adaptation) で学習モデルを作れるようにしよう。
昨今のデファクトスタンダードは kohya-ss/sd-scripts らしい。 (こういった、皆が使うものを作れるようになりたいものです) これを web ui で操作できるようにしてくれた bmaltais/kohya_ss があるので、今回はこれを readme (windows向け) を M1 に読み替えながらセットアップしていく。
PyTorch は m1 でもピッとインストールできるが、 TensorFlow は conda から apple のライブラリ入れる必要があるので注意
# python を入れとく(python-tk@3.10が入ってると後々エラーになるのでインストールされてないことを確認しとく) brew install python@3.10 # git clone ghq get git@github.com:bmaltais/kohya_ss.git # ディレクトリ移動(実際は peco で移動) cd ~/src/github.com/bmaltais/kohya_ss # 仮想環境を構築しとく python -m venv .venv . .venv/bin/activate pip3 install --upgrade pip # PyTorch のインストール pip3 install torch torchvision # バージョン確認。>v1.12 であれば m1 gpu に対応している % pip3 list | grep torch torch 1.13.1 torchvision 0.14.1 # metal 対応版の TensorFlow を入れるには、condaからも色々入れる brew install miniforge conda install -c apple tensorflow-deps # TensorFlow のインストール pip3 install tensorflow-macos tensorflow-metal tensorboard # バージョン確認 % pip3 list | grep tensor tensorboard 2.11.2 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorflow-estimator 2.11.0 tensorflow-macos 2.11.0 tensorflow-metal 0.7.1 # diffusers の インストール pip install diffusers # インストール # requirements.txt の tensorflow, tensorboard の行をコメントアウトしておく(前段でインストール済みなので) pip install --use-pep517 --upgrade -r requirements.txt # 実行環境に合わせた設定変更 accelerate config
設定はこんな感じで答えといた
% accelerate config --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------In which compute environment are you running? This machine --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Which type of machine are you using? MPS Do you wish to optimize your script with torch dynamo?[yes/NO]:yes --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Which dynamo backend would you like to use? inductor --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)? fp16 accelerate configuration saved at /Users/kumak1/.cache/huggingface/accelerate/default_config.yaml
GUI の起動起動
python ./kohya_gui.py
エラー
:memo: ディレクトリ指定の際にエラーとなる
_tkinter
あたりで Main Thread がとれんらしいのだが・・
どこを改修すればいいか皆目検討もつかん・・
2023-02-24 02:09:26.392 Python[10430:188815] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!' *** First throw call stack: ( 0 CoreFoundation 0x00000001b4e14418 __exceptionPreprocess + 176 1 libobjc.A.dylib 0x00000001b495eea8 objc_exception_throw + 60 2 CoreFoundation 0x00000001b4e3d830 _CFBundleGetValueForInfoKey + 0 3 AppKit 0x00000001b8012bd8 -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 320 4 AppKit 0x00000001b8001730 -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 816 5 AppKit 0x00000001b80013f4 -[NSWindow initWithContentRect:styleMask:backing:defer:] + 48 6 libtk8.6.dylib 0x000000015c44cd84 TkMacOSXMakeRealWindowExist + 524 7 libtk8.6.dylib 0x000000015c44ca68 TkWmMapWindow + 56 8 libtk8.6.dylib 0x000000015c3c0270 MapFrame + 76 9 libtcl8.6.dylib 0x000000015c2f4b94 TclServiceIdle + 84 10 libtcl8.6.dylib 0x000000015c2d8ef0 Tcl_DoOneEvent + 296 11 libtk8.6.dylib 0x000000015c440a28 TkpInit + 720 12 libtk8.6.dylib 0x000000015c3b9278 Initialize + 2292 13 _tkinter.cpython-310-darwin.so 0x000000015b7e2a98 Tcl_AppInit + 80 14 _tkinter.cpython-310-darwin.so 0x000000015b7dca98 Tkapp_New + 592 15 _tkinter.cpython-310-darwin.so 0x000000015b7dc448 _tkinter_create + 580 16 Python 0x0000000100e04d7c cfunction_vectorcall_FASTCALL + 88 17 Python 0x0000000100eaccf8 call_function + 128 18 Python 0x0000000100eaa510 _PyEval_EvalFrameDefault + 43104 19 Python 0x0000000100e9ea5c _PyEval_Vector + 376 20 Python 0x0000000100db2eac _PyObject_FastCallDictTstate + 96 21 Python 0x0000000100e28abc slot_tp_init + 196 22 Python 0x0000000100e20a8c type_call + 288 23 Python 0x0000000100db2c44 _PyObject_MakeTpCall + 136 24 Python 0x0000000100eacd88 call_function + 272 25 Python 0x0000000100eaa538 _PyEval_EvalFrameDefault + 43144 26 Python 0x0000000100e9ea5c _PyEval_Vector + 376 27 Python 0x0000000100ec52e4 _PyObject_VectorcallTstate.4671 + 96 28 Python 0x0000000100ec5198 context_run + 92 29 Python 0x0000000100e04ccc cfunction_vectorcall_FASTCALL_KEYWORDS + 84 30 Python 0x0000000100eaa6d8 _PyEval_EvalFrameDefault + 43560 31 Python 0x0000000100e9ea5c _PyEval_Vector + 376 32 Python 0x0000000100eaccf8 call_function + 128 33 Python 0x0000000100eaa498 _PyEval_EvalFrameDefault + 42984 34 Python 0x0000000100e9ea5c _PyEval_Vector + 376 35 Python 0x0000000100eaccf8 call_function + 128 36 Python 0x0000000100eaa498 _PyEval_EvalFrameDefault + 42984 37 Python 0x0000000100e9ea5c _PyEval_Vector + 376 38 Python 0x0000000100db5fb8 method_vectorcall + 388 39 Python 0x0000000100f6cc44 thread_run + 120 40 Python 0x0000000100f0ba90 pythread_wrapper + 48 41 libsystem_pthread.dylib 0x00000001b4cba06c _pthread_start + 148 42 libsystem_pthread.dylib 0x00000001b4cb4e2c thread_start + 8 ) libc++abi: terminating with uncaught exception of type NSException zsh: abort python3 ./kohya_gui.py
OK、いきなりGUIに行こうとした私が悪かった。 作者も Windows PC + NVIDIA GPU を想定したアプリだししゃーない。 CUIのミニマム構成で行こう
kohya-ss/sd-scripts で実行
サンプルとして使える画像とコードは、 作者本人のブログ からお借りする
セットアップ方法は bmaltais/kohya_ss
の時とほとんど変わらない。
学習のコマンド
accelerate launch --num_cpu_threads_per_process 4 train_network.py \ --pretrained_model_name_or_path="~/Downloads/lora_train_sample_pack/model.ckpt" \ --train_data_dir="~/Downloads/lora_train_sample_pack/train" \ --reg_data_dir="~/Downloads/lora_train_sample_pack/reg" \ --prior_loss_weight=1.0 --resolution 512 \ --output_dir="~/Downloads/lora_train_sample_pack/lora_output" \ --output_name=cjgg_frog \ --train_batch_size=4 --learning_rate=1e-4 --max_train_epochs 4 \ --use_8bit_adam --mixed_precision=fp16 --save_precision=fp16 \ --seed 42 --save_model_as=safetensors --save_every_n_epochs=1 \ --max_data_loader_n_workers=1 \ --network_module=networks.lora --network_dim=4 \ --training_comment="activate by usu frog"
が、エラー
prepare tokenizer Use DreamBooth method. prepare train images. found directory 20_usu frog contains 15 image files 300 train images with repeating. prepare reg images. found directory 1_frog contains 50 image files 50 reg images. loading image sizes. 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:00<00:00, 8185.60it/s] prepare dataset prepare accelerator /Users/kumak1/src/github.com/kohya-ss/sd-scripts/.venv/lib/python3.10/site-packages/torch/cuda/amp/grad_scaler.py:118: UserWarning: torch.cuda.amp.GradScaler is enabled, but CUDA is not available. Disabling. warnings.warn("torch.cuda.amp.GradScaler is enabled, but CUDA is not available. Disabling.") Using accelerator 0.15.0 or above. load Diffusers pretrained models
accelerate config
で mps
を指定しているのだけど、アプリケーションの挙動は CUDA 使おうとしている。
感想
うーん、学習をさせるなら、やっぱり利用者の多い Windows を使うのが今はまだ安牌かな・・ しかし、ずっとぶん回しても問題ない消費電力と排熱な M1 Mac はやはり魅力的なので、引き続き Mac で LoRA 学習できる方法を模索する。
また、stable-diffusion-webui はちゃんとうごいているので、これにbuilt in である hypernetwork の学習を試してみる