From 36d5e9661c794da04a161e2bd056353a9c323c3c Mon Sep 17 00:00:00 2001 From: frostydad <64224601+Cyberes@users.noreply.github.com> Date: Sat, 1 Oct 2022 13:41:10 -0600 Subject: [PATCH] more doc, textual inversion training, organize files --- StableDiffusionUI_Voldemort_paperspace.ipynb | 27 ++- Textual Inversion Training.ipynb | 173 ++++++++++++++++++ lfs/latent-diffusion/.gitattributes | 1 + lfs/latent-diffusion/project.yaml | 80 ++++++++ .../CodeFormer_Inference_Simplified.ipynb | 0 ...ggingface Textual Inversion Training.ipynb | 0 .../sd-concepts-library_Exporter.ipynb | 0 7 files changed, 273 insertions(+), 8 deletions(-) create mode 100644 Textual Inversion Training.ipynb create mode 100644 lfs/latent-diffusion/.gitattributes create mode 100644 lfs/latent-diffusion/project.yaml rename CodeFormer_Inference_Simplified.ipynb => other/CodeFormer_Inference_Simplified.ipynb (100%) rename Huggingface Textual Inversion Training.ipynb => other/Huggingface Textual Inversion Training.ipynb (100%) rename sd-concepts-library_Exporter.ipynb => other/sd-concepts-library_Exporter.ipynb (100%) diff --git a/StableDiffusionUI_Voldemort_paperspace.ipynb b/StableDiffusionUI_Voldemort_paperspace.ipynb index 1caff39..c17132e 100644 --- a/StableDiffusionUI_Voldemort_paperspace.ipynb +++ b/StableDiffusionUI_Voldemort_paperspace.ipynb @@ -48,7 +48,13 @@ "\n", "`/notebooks/` is storage for this notebook only.\n", "\n", - "We're going to store models in `/storage/models` and create a symlink.\n", + "`/tmp/` is not a persistent directory, meaning your files there will be deleted when the machine turns off.\n", + "\n", + "
\n", + "\n", + "If you are having storage issues, set `repo_storage_dir` to `/tmp/stable-diffusion`.\n", + "\n", + "
\n", "\n", "You must uncomment the correct section and run the block below or else the notebook won't work!" ] @@ -62,7 +68,7 @@ "# Free tier\n", "# free_tier = True # Enables the creation of symlinks back to /notebooks/\n", "# model_storage_dir = '/tmp/stable-diffusion/models' # Where the models will be downloaded to\n", - "# repo_storage_dir = '/tmp/stable-diffusion' # Where the repository will be downloaded to\n", + "# repo_storage_dir = '/notebooks' # Where the repository will be downloaded to\n", "\n", "# Paid Tier\n", "# free_tier = False\n", @@ -97,7 +103,6 @@ "source": [ "import os\n", "%store -r free_tier model_storage_dir repo_storage_dir\n", - "%cd /notebooks/\n", "\n", "def delete_broken_symlinks(path):\n", " # make sure to pass this function a path without a trailing slash\n", @@ -110,8 +115,12 @@ "if not os.path.exists(f'{repo_storage_dir}/stable-diffusion-webui'):\n", " if free_tier:\n", " delete_broken_symlinks('/notebooks/') # remove broken symlinks since it might have been installed in a non-persistent directory\n", - " !mkdir -p \"{repo_storage_dir}\"\n", - " !ln -s \"{repo_storage_dir}\" /notebooks/\n", + " if not os.path.exists(repo_storage_dir) and '/notebooks/' not in repo_storage_dir:\n", + " # symlink repo_storage_dir back to /notebooks/ only if it hasn't been downloaded to /notebooks/\n", + " !mkdir -p \"{repo_storage_dir}\"\n", + " !ln -s \"{repo_storage_dir}\" /notebooks/\n", + " else:\n", + " print('Not symlinking repo_storage_dir back to /notebooks/')\n", " %cd \"{repo_storage_dir}\"\n", " !git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui\n", "else: # update repo if already exists\n", @@ -147,9 +156,8 @@ "# They require a few specific external git repo commits so we have to do it their way. \n", "import launch\n", "\n", - "# latent-diffusion is a requirement but launch.py isn't downloading it so we'll do it manually.\n", - "if not os.path.exists(f'{repo_storage_dir}/stable-diffusion-webui/repositories/latent-diffusion'):\n", - " !git clone https://github.com/crowsonkb/k-diffusion.git \"{repo_storage_dir}/stable-diffusion-webui/repositories/k-diffusion\"\n", + "# latent-diffusion is a requirement but launch.py isn't downloading it so we'll do it manually\n", + "if not os.path.exists(f'{repo_storage_dir}/stable-diffusion-webui/repositories/latent-diffusion'): # check that it hasn't been downloaded in case they fix this issue\n", " !git clone https://github.com/Hafiidz/latent-diffusion.git \"{repo_storage_dir}/stable-diffusion-webui/repositories/latent-diffusion\"\n", " # I don't think it's necessary to do this:\n", " # %mkdir \"{repo_storage_dir}/stable-diffusion-webui/repositories/latent-diffusion/experiments/\"\n", @@ -466,6 +474,9 @@ "outputs": [], "source": [ "%store -r free_tier model_storage_dir repo_storage_dir\n", + "\n", + "!echo -e \"You are using $(du -sh /notebooks/ | cut -f1) in /notebooks/\\n\"\n", + "\n", "%cd \"{repo_storage_dir}/stable-diffusion-webui\"\n", "!python webui.py --share # --gradio-auth me:password1234" ] diff --git a/Textual Inversion Training.ipynb b/Textual Inversion Training.ipynb new file mode 100644 index 0000000..cbd631a --- /dev/null +++ b/Textual Inversion Training.ipynb @@ -0,0 +1,173 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "60b8e4a2-4e54-4dae-9220-31fc24fa719f", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "%cd /notebooks/\n", + "# Download and run the Anaconda3 installer\n", + "import sys\n", + "!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh\n", + "!bash ./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local\n", + "sys.path.append('/usr/local/lib/python3.7/site-packages/')\n", + "!rm Miniconda3-latest-Linux-x86_64.sh\n", + "!conda init bash\n", + "!mkdir -p /notebooks/textual\\ inversion/\n", + "!mkdir -p /notebooks/Stable-textual-inversion_win/logs/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5743d8c-f0ba-4f07-971b-b498b0e306f4", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import os.path\n", + "if not os.path.exists('/notebooks/Stable-textual-inversion_win'):\n", + " %cd /notebooks/\n", + " !git clone https://github.com/nicolai256/Stable-textual-inversion_win.git\n", + " !mkdir -p /notebooks/textual\\ inversion/\n", + " \n", + "# Uncomment this to copy the detault config\n", + " # !cp /notebooks/Stable-textual-inversion_win/configs/stable-diffusion/v1-finetune.yaml /notebooks/textual\\ inversion\n", + "else: # update repo if already exists\n", + " print('stable-diffusion-webui already downloaded, updating...')\n", + " %cd /notebooks/Stable-textual-inversion_win\n", + " !git pull\n", + " \n", + "# Symlink the output dir to /notebooks/\n", + "!mkdir -p /notebooks/textual\\ inversion/output/\n", + "!ln -s /notebooks/Stable-textual-inversion_win/logs/ \"/notebooks/textual inversion/\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53ee34a7-e5f3-4529-b3b9-2bdac9a45c54", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "%cd /notebooks/Stable-textual-inversion_win/\n", + "!conda env update -n base --file environment.yaml\n", + "!conda activate ldm\n", + "!pip install setuptools==59.5.0\n", + "!pip install pillow==9.0.1\n", + "!pip install torchmetrics==0.6.0\n", + "!pip install -e ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa5eda42-c1c6-47b9-80ce-39b777c77bb5", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# Config\n", + "\n", + "config_path = '/notebooks/textual inversion/v1-finetune.yaml'\n", + "\n", + "# Directory holding the images you want to feed into the AI\n", + "source_image_directory = '/notebooks/textual inversion/source/'\n", + "\n", + "# Word to activate the embedding in the SD WebUI\n", + "init_word = 'simonstalenhag'\n", + "\n", + "project_name = 'simonstalenhag'\n", + "\n", + "actual_resume = '/storage/models/trinart2_step115000.ckpt' # trinart2_step115000.ckpt sd-v1-4.ckpt\n", + "\n", + "# ============================================================================================================\n", + "\n", + "!rm -rf \"{source_image_directory}/.ipynb_checkpoints\"\n", + "%cd /notebooks/Stable-textual-inversion_win/\n", + "!python main.py \\\n", + " --base \"{config_path}\" \\\n", + " -t --no-test \\\n", + " --actual_resume \"{actual_resume}\" \\\n", + " --gpus=1 \\\n", + " --data_root \"{source_image_directory}\" \\\n", + " --init_word {init_word} \\\n", + " -n {project_name} \\" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "be231cb1-a562-48ac-abb7-2cbee730c9a9", + "metadata": {}, + "outputs": [], + "source": [ + "# Resuming\n", + "\n", + "# Config\n", + "\n", + "config_path = '/notebooks/textual inversion/v1-finetune.yaml'\n", + "\n", + "# Directory holding the images you want to feed into the AI\n", + "source_image_directory = '/notebooks/textual inversion/source/'\n", + "\n", + "# Word to activate the embedding in the SD WebUI\n", + "init_word = 'simonstalenhag'\n", + "\n", + "project_path = '/notebooks/textual inversion/logs/source2022-10-01T03-52-45_simonstalenhag'\n", + "\n", + "actual_resume = '/storage/models/trinart2_step115000.ckpt' # trinart2_step115000.ckpt sd-v1-4.ckpt\n", + "\n", + "# ============================================================================================================\n", + "\n", + "from datetime import datetime\n", + "datetime_str = datetime.now().strftime('%m-%d-%Y_%H:%M:%S')\n", + "\n", + "!python \"main.py\" \\\n", + " --base \"{config_path}\" \\\n", + " -t --no-test \\\n", + " --actual_resume \"{actual_resume}\" \\\n", + " --gpus=1 \\\n", + " --data_root \"{source_image_directory}\" \\\n", + " --init_word \"{init_word}\" \\\n", + " --project \"{project_path}\" \\\n", + " --embedding_manager_ckpt \"{project_path}/checkpoints/embeddings.pt\" \\\n", + " --resume_from_checkpoint \"{project_path}/checkpoints/last.ckpt\" \\\n", + " -n \"{init_word}_continue_{datetime_str}\"" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lfs/latent-diffusion/.gitattributes b/lfs/latent-diffusion/.gitattributes new file mode 100644 index 0000000..ba3ae19 --- /dev/null +++ b/lfs/latent-diffusion/.gitattributes @@ -0,0 +1 @@ +model.ckpt filter=lfs diff=lfs merge=lfs -text diff --git a/lfs/latent-diffusion/project.yaml b/lfs/latent-diffusion/project.yaml new file mode 100644 index 0000000..4065ca2 --- /dev/null +++ b/lfs/latent-diffusion/project.yaml @@ -0,0 +1,80 @@ +model: + base_learning_rate: 1.0e-06 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.0015 + linear_end: 0.0155 + log_every_t: 100 + timesteps: 1000 + loss_type: l2 + first_stage_key: image + cond_stage_key: LR_image + image_size: 64 + channels: 3 + concat_mode: true + cond_stage_trainable: false + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 64 + in_channels: 6 + out_channels: 3 + model_channels: 160 + attention_resolutions: + - 16 + - 8 + num_res_blocks: 2 + channel_mult: + - 1 + - 2 + - 2 + - 4 + num_head_channels: 32 + first_stage_config: + target: ldm.models.autoencoder.VQModelInterface + params: + embed_dim: 3 + n_embed: 8192 + monitor: val/rec_loss + ddconfig: + double_z: false + z_channels: 3 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Module # todo + cond_stage_config: + target: torch.nn.Identity +data: + target: cutlit.DataModuleFromConfig + params: + batch_size: 64 + wrap: false + num_workers: 12 + train: + target: ldm.data.openimages.SuperresOpenImagesAdvancedTrain + params: + size: 256 + degradation: bsrgan_light + downscale_f: 4 + min_crop_f: 0.5 + max_crop_f: 1.0 + random_crop: true + validation: + target: ldm.data.openimages.SuperresOpenImagesAdvancedValidation + params: + size: 256 + degradation: bsrgan_light + downscale_f: 4 + min_crop_f: 0.5 + max_crop_f: 1.0 + random_crop: true diff --git a/CodeFormer_Inference_Simplified.ipynb b/other/CodeFormer_Inference_Simplified.ipynb similarity index 100% rename from CodeFormer_Inference_Simplified.ipynb rename to other/CodeFormer_Inference_Simplified.ipynb diff --git a/Huggingface Textual Inversion Training.ipynb b/other/Huggingface Textual Inversion Training.ipynb similarity index 100% rename from Huggingface Textual Inversion Training.ipynb rename to other/Huggingface Textual Inversion Training.ipynb diff --git a/sd-concepts-library_Exporter.ipynb b/other/sd-concepts-library_Exporter.ipynb similarity index 100% rename from sd-concepts-library_Exporter.ipynb rename to other/sd-concepts-library_Exporter.ipynb