diff --git a/CHANGELOG.md b/CHANGELOG.md index 163647ad4..f48e47b66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,60 @@ # Change Log for SD.Next -## Update for 2024-02-24 - +## TODO + +- EDM samplers for Playground require `diffusers==0.27.0` +- StableCascade requires diffusers `kashif/diffusers.git@wuerstchen-v3` + +## Update for 2024-03-01 + +- [Playground v2.5](https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic) + - new model version from Playground: based on SDXL, but with some cool new concepts + - download using networks -> reference + - set sampler to *DPM++ 2M EDM* or *Euler EDM* +- [KOALA 700M](https://github.com/youngwanLEE/sdxl-koala) + - another very fast & light sd-xl model where original unet was compressed and distilled to 54% of original size + - download using networks -> reference + - *note* to download fp16 variant (recommended), set settings -> diffusers -> preferred model variant +- **Image2Video** + - new module for creating videos from images + - simply enable from *img2img -> scripts -> image2video* + - based on [VGen](https://huggingface.co/ali-vilab/i2vgen-xl) +- **VQA** visual question & answer in interrogate + - with support for multiple variations of base models: *GIT, BLIP, ViLT, PIX* +- **Second Pass / Refine** + - independent upscale and hires options: run hires without upscale or upscale without hires or both + - upscale can now run 0.1-8.0 scale and will also run if enabled at 1.0 to allow for upscalers that simply improve image quality + - update ui section to reflect changes + - *note*: behavior using backend:original is unchanged for backwards compatibilty +- **Samplers** + - [TCD](https://mhh0318.github.io/tcd/): Trajectory Consistency Distillation + new sampler that produces consistent results in a very low number of steps (comparable to LCM but without reliance on LoRA) + for best results, use with TCD LoRA: + - *DPM++ 2M EDM* and *Euler EDM* + EDM is a new solver algorithm currently available for DPM++2M and Euler samplers + Note that using EDM samplers with non-EDM optimized models will provide just noise and vice-versa - **Improvements** - - default theme updates - - additional built-in theme *black-gray* + - **FaceID** extend support for LoRA, HyperTile and FreeU, thanks @Trojaner + - **Tiling** now extends to both Unet and VAE producing smoother outputs, thanks @AI-Casanova + - new setting in image options: *include mask in output* + - default theme updates and additional built-in theme *black-gray* + - add **ROCm** 6.0 nightly option to installer, thanks @jicka + - support models with their own YAML model config files + - support models with their own JSON per-component config files, for example: `playground-v2.5_vae.config` +- **Internal** + - remove obsolete textual inversion training code + - remove obsolete hypernetworks training code - **Fixes** + - improve model cpu offload compatibility + - improve model sequential offload compatibility + - improve bfloat16 compatibility - fix extra networks refresh - - improve ZLUDA installer when using `--use-zluda` cli param, thanks @lshqqytiger + - fix sdp memory attention in backend original + - fix autodetect sd21 models + - fix api info endpoint + - fix sampler eta in xyz grid, thanks @AI-Casanova + - exception handler around vram memory stats gather + - improve ZLUDA installer with `--use-zluda` cli param, thanks @lshqqytiger ## Update for 2024-02-22 diff --git a/installer.py b/installer.py index 1ee471bd3..8b7aa18cc 100644 --- a/installer.py +++ b/installer.py @@ -482,13 +482,33 @@ def is_rocm_available(): torch_command = os.environ.get('TORCH_COMMAND', 'torch==2.2.0 torchvision --index-url https://download.pytorch.org/whl/cu118') log.warning("ZLUDA support: experimental") zluda_need_dll_patch = is_windows and not installed('torch') + zluda_path = find_zluda() + if zluda_path is None: + import urllib.request + if is_windows: + import zipfile + archive_type = zipfile.ZipFile + zluda_url = 'https://github.com/lshqqytiger/ZLUDA/releases/download/v3.5-win/ZLUDA-windows-amd64.zip' + else: + import tarfile + archive_type = tarfile.TarFile + zluda_url = 'https://github.com/vosen/ZLUDA/releases/download/v3/zluda-3-linux.tar.gz' + urllib.request.urlretrieve(zluda_url, '_zluda') + with archive_type('_zluda', 'r') as f: + f.extractall('.zluda') + zluda_path = os.path.abspath('./.zluda') + os.remove('_zluda') + log.debug(f'Found ZLUDA in {zluda_path}') + paths = os.environ.get('PATH', '.') + if zluda_path not in paths: + os.environ['PATH'] = paths + ';' + zluda_path elif is_windows: # TODO TBD after ROCm for Windows is released log.warning("HIP SDK is detected, but no Torch release for Windows available") log.info("For ZLUDA support specify '--use-zluda'") log.info('Using CPU-only torch') torch_command = os.environ.get('TORCH_COMMAND', 'torch torchvision') else: - if rocm_ver in {"5.7"}: + if rocm_ver in {"5.7", "6.0"}: torch_command = os.environ.get('TORCH_COMMAND', f'torch torchvision --pre --index-url https://download.pytorch.org/whl/nightly/rocm{rocm_ver}') elif rocm_ver in {"5.5", "5.6"}: torch_command = os.environ.get('TORCH_COMMAND', f'torch torchvision --index-url https://download.pytorch.org/whl/nightly/rocm{rocm_ver}') @@ -909,7 +929,7 @@ def get_onnxruntime_source_for_rocm(rocm_ver): return 'onnxruntime-gpu' -def patch_zluda(): +def find_zluda(): zluda_path = os.environ.get('ZLUDA', None) if zluda_path is None: paths = os.environ.get('PATH', '').split(';') @@ -917,6 +937,11 @@ def patch_zluda(): if os.path.exists(os.path.join(path, 'zluda_redirect.dll')): zluda_path = path break + return zluda_path + + +def patch_zluda(): + zluda_path = find_zluda() if zluda_path is None: log.warning('Failed to automatically patch torch with ZLUDA. Could not find ZLUDA from PATH.') return @@ -1028,8 +1053,6 @@ def check_timestamp(): def add_args(parser): group = parser.add_argument_group('Setup options') - group.add_argument("--log", type=str, default=os.environ.get("SD_LOG", None), help="Set log file, default: %(default)s") - group.add_argument('--debug', default = os.environ.get("SD_DEBUG",False), action='store_true', help = "Run installer with debug logging, default: %(default)s") group.add_argument('--reset', default = os.environ.get("SD_RESET",False), action='store_true', help = "Reset main repository to latest version, default: %(default)s") group.add_argument('--upgrade', default = os.environ.get("SD_UPGRADE",False), action='store_true', help = "Upgrade main repository to latest version, default: %(default)s") group.add_argument('--requirements', default = os.environ.get("SD_REQUIREMENTS",False), action='store_true', help = "Force re-check of requirements, default: %(default)s") @@ -1039,6 +1062,7 @@ def add_args(parser): group.add_argument("--use-ipex", default = os.environ.get("SD_USEIPEX",False), action='store_true', help="Force use Intel OneAPI XPU backend, default: %(default)s") group.add_argument("--use-cuda", default = os.environ.get("SD_USECUDA",False), action='store_true', help="Force use nVidia CUDA backend, default: %(default)s") group.add_argument("--use-rocm", default = os.environ.get("SD_USEROCM",False), action='store_true', help="Force use AMD ROCm backend, default: %(default)s") + group.add_argument('--use-zluda', default=os.environ.get("SD_USEZLUDA", False), action='store_true', help = "Force use ZLUDA, AMD GPUs only, default: %(default)s") group.add_argument("--use-xformers", default = os.environ.get("SD_USEXFORMERS",False), action='store_true', help="Force use xFormers cross-optimization, default: %(default)s") group.add_argument('--skip-requirements', default = os.environ.get("SD_SKIPREQUIREMENTS",False), action='store_true', help = "Skips checking and installing requirements, default: %(default)s") group.add_argument('--skip-extensions', default = os.environ.get("SD_SKIPEXTENSION",False), action='store_true', help = "Skips running individual extension installers, default: %(default)s") @@ -1053,6 +1077,13 @@ def add_args(parser): group.add_argument('--ignore', default = os.environ.get("SD_IGNORE",False), action='store_true', help = "Ignore any errors and attempt to continue") group.add_argument('--safe', default = os.environ.get("SD_SAFE",False), action='store_true', help = "Run in safe mode with no user extensions") + group = parser.add_argument_group('Logging options') + group.add_argument("--log", type=str, default=os.environ.get("SD_LOG", None), help="Set log file, default: %(default)s") + group.add_argument('--debug', default = os.environ.get("SD_DEBUG",False), action='store_true', help = "Run installer with debug logging, default: %(default)s") + group.add_argument("--profile", default=os.environ.get("SD_PROFILE", False), action='store_true', help="Run profiler, default: %(default)s") + group.add_argument('--docs', default=os.environ.get("SD_DOCS", False), action='store_true', help = "Mount API docs, default: %(default)s") + group.add_argument("--api-log", default=os.environ.get("SD_APILOG", False), action='store_true', help="Enable logging of all API requests, default: %(default)s") + def parse_args(parser): # command line args diff --git a/wiki b/wiki index ddd8158ac..5c52cbb73 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit ddd8158ac1b86cfaba1b5fa9929bb5214775bb9f +Subproject commit 5c52cbb7301c3e008a9dfd76702f9321ae7b3a34