83 Commits
Author SHA1 Message Date
brkirch 299b8096bc Make Gradio temp directory if it doesn't exist
Gradio normally creates the temp directory in `pil_to_temp_file()` (https://github.com/gradio-app/gradio/blob/861d752a83da0f95e9f79173069b69eababeed39/gradio/components/base.py#L313) but since the Gradio implementation of `pil_to_temp_file()` is replaced with `save_pil_to_file()`, the Gradio temp directory should also be created by `save_pil_to_file()` when necessary.
2023-08-21 17:36:17 -04:00
brkirch 54209c1639 Use the new SD VAE override setting 2023-08-15 06:29:39 -04:00
brkirch bc63339df3 Update hash for SD XL Repo 2023-08-14 06:26:36 -04:00
brkirch 2035cbbd5d Fix DDIM and PLMS samplers on MPS 2023-08-13 10:07:52 -04:00
brkirch 5df535b7c2 Remove duplicate code for torchsde randn 2023-08-13 10:07:52 -04:00
brkirch 232c931f40 Mac k-diffusion workarounds are no longer needed 2023-08-13 10:07:52 -04:00
brkirch f4dbb0c820 Change the repositories origin URLs when necessary 2023-08-13 10:07:52 -04:00
brkirch 9058620cec git checkout with commit hash 2023-08-13 10:07:14 -04:00
brkirch 2489252099 torch.empty can create issues; use torch.zeros
For MPS, using a tensor created with `torch.empty()` can cause `torch.baddbmm()` to include NaNs in the tensor it returns, even though `beta=0`. However, with a tensor of shape [1,1,1], there should be a negligible performance difference between `torch.empty()` and `torch.zeros()` anyway, so it's better to just use `torch.zeros()` for this and avoid unnecessarily creating issues.
2023-08-13 10:06:25 -04:00
brkirch 87dd685224 Make sub-quadratic the default for MPS 2023-08-13 10:06:25 -04:00
brkirch abfa4ad8bc Use fixed size for sub-quadratic chunking on MPS
Even if this causes chunks to be much smaller, performance isn't significantly impacted. This will usually reduce memory usage but should also help with poor performance when free memory is low.
2023-08-13 10:06:25 -04:00
brkirch f0e2098f1a Add support for --upcast-sampling with SD XL 2023-07-18 00:39:50 -04:00
brkirch 0cab07b2f1 Set PyTorch version to 2.0.1 for macOS 2023-05-12 11:15:43 -04:00
brkirch de401d8ffb Fix generation with k-diffusion/UniPC on x64 Macs 2023-05-09 01:10:13 -04:00
brkirch 9efb809f7c Remove PyTorch 2.0 check
Apparently the commit in the main branch of pytorch/pytorch that fixes this issue didn't make it into PyTorch 2.0.1, and since it is unclear exactly which release will have it we'll just always apply the workaround so a crash doesn't occur regardless.
2023-05-09 01:10:13 -04:00
brkirch 7aab389d6f Fix for Unet NaNs 2023-05-08 08:16:56 -04:00
brkirch 27fe3eb6a9 Add workaround for MPS layer_norm on PyTorch 2.0
On PyTorch 2.0, with MPS layer_norm only accepts float32 inputs. This was fixed shortly after 2.0 was finalized so the workaround can be applied with an exact version match.
2023-03-24 04:04:22 -04:00
brkirch c5142e2fbe Add workaround for broken nn.Linear on macOS 13.2
Credit to danieldk (https://github.com/explosion/curated-transformers/pull/124) for the workaround this is based on.
2023-03-24 04:04:20 -04:00
brkirch a4cb96d4ae Remove test, use bool tensor fix by default
The test isn't working correctly on macOS 13.3 and the bool tensor fix for cumsum is currently always needed anyway, so enable the fix by default.
2023-03-11 17:35:17 -05:00
brkirch 2016733814 Apply hijacks in ddpm_edit for upcast sampling
To avoid import errors, ddpm_edit hijacks are done after an instruct pix2pix model is loaded.
2023-02-07 22:53:45 -05:00
brkirch 4738486d8f Support for hypernetworks with --upcast-sampling 2023-02-06 18:10:55 -05:00
brkirch 4306659c4d Remove unused code 2023-02-04 01:22:06 -05:00
brkirch 1b8af15f13 Refactor Mac specific code to a separate file
Move most Mac related code to a separate file, don't even load it unless web UI is run under macOS.
2023-02-01 14:05:56 -05:00
brkirch 2217331cd1 Refactor MPS fixes to CondFunc 2023-02-01 06:36:22 -05:00
brkirch 7738c057ce MPS fix is still needed :(
Apparently I did not test with large enough images to trigger the bug with torch.narrow on MPS
2023-02-01 05:23:58 -05:00
brkirch f9edd578e9 Remove MPS fix no longer needed for PyTorch
The torch.narrow fix was required for nightly PyTorch builds for a while to prevent a hard crash, but newer nightly builds don't have this issue.
2023-01-28 04:16:27 -05:00
brkirch 02b8b957d7 Add --no-half-vae to default macOS arguments
Apparently the version of PyTorch macOS users are currently at doesn't always handle half precision VAEs correctly. We will probably want to update the default PyTorch version to 2.0 when it comes out which should fix that, and at this point nightly builds of PyTorch 2.0 are going to be recommended for most Mac users. Unfortunately someone has already reported that their M2 Mac doesn't work with the nightly PyTorch 2.0 build currently, so we can add --no-half-vae for now and give users that can install nightly PyTorch 2.0 builds a webui-user.sh configuration that overrides the default.
2023-01-28 04:16:27 -05:00
brkirch ada17dbd7c Refactor conditional casting, fix upscalers 2023-01-28 04:16:25 -05:00
brkirch c4b9b07db6 Fix embeddings dtype mismatch 2023-01-26 09:00:15 -05:00
brkirch 10421f93c3 Fix full previews, --no-half-vae 2023-01-26 01:43:35 -05:00
brkirch e0df864b8c Update arguments to use --upcast-sampling 2023-01-25 13:19:06 -05:00
brkirch e3b53fd295 Add UI setting for upcasting attention to float32
Adds "Upcast cross attention layer to float32" option in Stable Diffusion settings. This allows for generating images using SD 2.1 models without --no-half or xFormers.

In order to make upcasting cross attention layer optimizations possible it is necessary to indent several sections of code in sd_hijack_optimizations.py so that a context manager can be used to disable autocast. Also, even though Stable Diffusion (and Diffusers) only upcast q and k, unfortunately my findings were that most of the cross attention layer optimizations could not function unless v is upcast also.
2023-01-25 01:13:04 -05:00
brkirch 84d9ce30cb Add option for float32 sampling with float16 UNet
This also handles type casting so that ROCm and MPS torch devices work correctly without --no-half. One cast is required for deepbooru in deepbooru_model.py, some explicit casting is required for img2img and inpainting. depth_model can't be converted to float16 or it won't work correctly on some systems (it's known to have issues on MPS) so in sd_models.py model.depth_model is removed for model.half().
2023-01-25 01:13:02 -05:00
brkirch f64af77adc Fix different first gen with Approx NN previews
The loading of the model for approx nn live previews can change the internal state of PyTorch, resulting in a different image. This can be avoided by preloading the approx nn model in advance.
2023-01-23 22:49:20 -05:00
brkirch a255dac4f8 Fix cumsum for MPS in newer torch
The prior fix assumed that testing int16 was enough to determine if a fix is needed, but a recent fix for cumsum has int16 working but not bool.
2023-01-17 20:54:18 -05:00
brkirch eef1990a5e Fix Approx NN on devices other than CUDA 2023-01-15 08:13:33 -05:00
brkirch df3b31eb55 In-place operations can break gradient calculation 2023-01-07 07:04:59 -05:00
brkirch c18add68ef Added license 2023-01-06 16:42:47 -05:00
brkirch 5e6566324b Always end version number with a digit 2023-01-06 07:06:26 -05:00
brkirch 848605fb65 Update README.md 2023-01-06 06:58:49 -05:00
brkirch 5deb2a19cc Allow Doggettx's cross attention opt without CUDA 2023-01-06 01:33:15 -05:00
brkirch b95a4c0ce5 Change sub-quad chunk threshold to use percentage 2023-01-06 01:01:51 -05:00
brkirch b119815333 Use narrow instead of dynamic_slice 2023-01-06 00:15:24 -05:00
brkirch 3bfe2bb549 Merge remote-tracking branch 'upstream/master' into sub-quad_attn_opt 2023-01-06 00:15:22 -05:00
brkirch f6ab5a39d7 Merge branch 'AUTOMATIC1111:master' into sub-quad_attn_opt 2023-01-06 00:14:20 -05:00
brkirch d782a95967 Add Birch-san's sub-quadratic attention implementation 2023-01-06 00:14:13 -05:00
brkirch 8111b5569d Add support for PyTorch nightly and local builds 2023-01-05 20:54:52 -05:00
brkirch 35b1775b32 Use other MPS optimization for large q.shape[0] * q.shape[1]
Check if q.shape[0] * q.shape[1] is 2**18 or larger and use the lower memory usage MPS optimization if it is. This should prevent most crashes that were occurring at certain resolutions (e.g. 1024x1024, 2048x512, 512x2048).

Also included is a change to check slice_size and prevent it from being divisible by 4096 which also results in a crash. Otherwise a crash can occur at 1024x512 or 512x1024 resolution.
2022-12-20 21:30:00 -05:00
brkirch cca16373de Add attributes used by MPS 2022-12-17 04:23:08 -05:00
brkirch 16b4509fa6 Add numpy fix for MPS on PyTorch 1.12.1
When saving training results with torch.save(), an exception is thrown:
"RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead."

So for MPS, check if Tensor.requires_grad and detach() if necessary.
2022-12-17 04:22:58 -05:00
brkirch 8bc16b7582 Add psutil if using macOS to requirements.txt 2022-12-06 19:54:01 -05:00
brkirch a7b1ab28d5 Set install_dir (per Ephil012's suggestion)
Set install_dir to a correct value for macOS. Thanks to @Ephil012 for pointing out this is needed.
2022-12-06 19:49:30 -05:00
brkirch 760a7836eb Use python3.10 for python_cmd if available 2022-12-05 18:36:31 -05:00
brkirch 5ec8981df4 Revert most launch.py changes, add mac user script
Adds an addition file to read environment variables from when the webui.sh is run from macOS.
2022-12-03 06:44:59 -05:00
brkirch bef36597cc Fix run as root flag
Even though -f enables running webui.sh as root, the -f flag will also be passed to launch.py, causing it to exit with a usage message. This adds a line to launch.py to remove the -f flag if present.

In addition to the above, all the letters in the command line arguments after each '-' were being processed for 'f' and "illegal option" was displayed for each letter that didn't match. Instead, this commit silences those errors and stops processing if the first flag doesn't start with '-f'.
2022-12-01 04:49:49 -05:00
brkirch 79953e9b8b Add support for macOS (Darwin) in launch.py 2022-12-01 04:49:46 -05:00
brkirch 0fddb4a1c0 Rework MPS randn fix, add randn_like fix
torch.manual_seed() already sets a CPU generator, so there is no reason to create a CPU generator manually. torch.randn_like also needs a MPS fix for k-diffusion, but a torch hijack with randn_like already exists so it can also be used for that.
2022-11-30 10:33:42 -05:00
brkirch 4d5f1691dd Use devices.autocast instead of torch.autocast 2022-11-30 10:33:42 -05:00
brkirch 21effd629d Add workaround for using MPS with torchsde 2022-11-30 10:33:39 -05:00
brkirch 98ca437edf Refactor and instead check if mps is being used, not availability 2022-11-28 21:18:51 -05:00
brkirch 563ea3f6ff Change .cuda() to .to(devices.device) 2022-11-21 02:56:00 -05:00
brkirch e247b7400a Add fixes for PyTorch 1.12.1
Fix typo "MasOS" -> "macOS"

If MPS is available and PyTorch is an earlier version than 1.13:
* Monkey patch torch.Tensor.to to ensure all tensors sent to MPS are contiguous
* Monkey patch torch.nn.functional.layer_norm to ensure input tensor is contiguous (required for this program to work with MPS on unmodified PyTorch 1.12.1)
2022-11-21 02:07:19 -05:00
brkirch a5106a7cdc Remove extra .to(device) 2022-11-17 00:08:45 -05:00
brkirch abfa22c16f Revert "MPS Upscalers Fix"
This reverts commit 768b95394a.
2022-11-17 00:08:21 -05:00
brkirch f4a488f585 Set device for facelib/facexlib and gfpgan
* FaceXLib/FaceLib doesn't pass the device argument to RetinaFace but instead chooses one itself and sets it to a global - in order to use a device other than its internally chosen default it is necessary to manually replace the default value
* The GFPGAN constructor needs the device argument to work with MPS or a CUDA device ID that differs from the default
2022-11-12 03:34:13 -05:00
brkirchandAUTOMATIC1111 faed465a0b MPS Upscalers Fix
Get ESRGAN, SCUNet, and SwinIR working correctly on MPS by ensuring memory is contiguous for tensor views before sending to MPS device.
2022-10-25 09:42:53 +03:00
brkirchandAUTOMATIC1111 4c24347e45 Remove BSRGAN from --use-cpu, add SwinIR 2022-10-25 09:42:53 +03:00
brkirchandAUTOMATIC1111 fdef8253a4 Add 'interrogate' and 'all' choices to --use-cpu
* Add 'interrogate' and 'all' choices to --use-cpu
* Change type for --use-cpu argument to str.lower, so that choices are case insensitive
2022-10-14 16:31:39 +03:00
brkirchandAUTOMATIC1111 57e03cdd24 Ensure the directory exists before saving to it
The directory for the images saved with the Save button may still not exist, so it needs to be created prior to opening the log.csv file.
2022-10-12 09:55:56 +03:00
brkirchandAUTOMATIC1111 861db783c7 Use apply_hypernetwork function 2022-10-11 17:24:00 +03:00
brkirchandAUTOMATIC1111 574c8e554a Add InvokeAI and lstein to credits, add back CUDA support 2022-10-11 17:24:00 +03:00
brkirchandAUTOMATIC1111 98fd5cde72 Add check for psutil 2022-10-11 17:24:00 +03:00
brkirchandAUTOMATIC1111 c0484f1b98 Add cross-attention optimization from InvokeAI
* Add cross-attention optimization from InvokeAI (~30% speed improvement on MPS)
* Add command line option for it
* Make it default when CUDA is unavailable
2022-10-11 17:24:00 +03:00
brkirchandAUTOMATIC1111 8acc901ba3 Newer versions of PyTorch use TypedStorage instead
Pytorch 1.13 and later will rename _TypedStorage to TypedStorage, so check for TypedStorage and use _TypedStorage if it is not available. Currently this is needed so that nightly builds of PyTorch work correctly.
2022-10-10 08:04:52 +03:00
brkirchandAUTOMATIC1111 f2055cb1d4 Add hypernetwork support to split cross attention v1
* Add hypernetwork support to split_cross_attention_forward_v1
* Fix device check in esrgan_model.py to use devices.device_esrgan instead of shared.device
2022-10-08 09:39:17 +03:00
brkirchandGitHub e9e2a7ec9a Merge branch 'master' into cpu-cmdline-opt 2022-10-04 07:42:53 -04:00
brkirch dc9c5a9774 Modify --add-cpu description 2022-10-04 05:22:50 -04:00
brkirch 27ddc24fde Add BSRGAN to --add-cpu 2022-10-04 05:18:17 -04:00
brkirch 2adb249740 Merge branch 'cpu-cmdline-opt' of https://github.com/brkirch/stable-diffusion-webui into cpu-cmdline-opt 2022-10-04 04:26:54 -04:00
brkirchandGitHub 35a00b0130 Merge branch 'AUTOMATIC1111:master' into cpu-cmdline-opt 2022-10-04 04:25:27 -04:00
brkirch eeab7aedf5 Add --use-cpu command line option
Remove MPS detection to use CPU for GFPGAN / CodeFormer and add a --use-cpu command line option.
2022-10-04 04:24:35 -04:00
brkirchandGitHub b88e4ea7d6 Merge branch 'master' into master 2022-10-04 01:04:19 -04:00
brkirch bdaa36c844 When device is MPS, use CPU for GFPGAN instead
GFPGAN will not work if the device is MPS, so default to CPU instead.
2022-09-30 23:53:25 -04:00