! \- v$ i* ~8 D: s1 h* b/ M
- b6 a) N- I- a3 F
usage: launch.py [-h] [--update-all-extensions] [--skip-python-version-check] [--skip-torch-cuda-test] n3 J1 w6 K' ]$ r2 c' D, v) K& g
[--reinstall-xformers] [--reinstall-torch] [--update-check] [--test-server] g8 X8 H- E/ |2 @! t! V
[--skip-prepare-environment] [--skip-install] [--data-dir DATA_DIR] [--config CONFIG] [--ckpt CKPT]1 L) l7 \. J2 t" p$ Y
[--ckpt-dir CKPT_DIR] [--vae-dir VAE_DIR] [--gfpgan-dir GFPGAN_DIR] [--gfpgan-model GFPGAN_MODEL]) k( J. F# y; }$ R) {# Z
[--no-half] [--no-half-vae] [--no-progressbar-hiding] [--max-batch-count MAX_BATCH_COUNT]# G0 J; d8 V( d: _
[--embeddings-dir EMBEDDINGS_DIR] [--textual-inversion-templates-dir TEXTUAL_INVERSION_TEMPLATES_DIR]* w5 M4 O$ D3 R
[--hypernetwork-dir HYPERNETWORK_DIR] [--localizations-dir LOCALIZATIONS_DIR] [--allow-code]
0 s& n$ s$ l' Y! P3 f3 j4 T [--medvram] [--lowvram] [--lowram] [--always-batch-cond-uncond] [--unload-gfpgan]
! a0 x: g+ ^" | [--precision {full,autocast}] [--upcast-sampling] [--share] [--ngrok NGROK]( Z8 F5 Z ?, j1 E) c
[--ngrok-region NGROK_REGION] [--ngrok-options NGROK_OPTIONS] [--enable-insecure-extension-access]! U5 C6 _6 M5 o/ U
[--codeformer-models-path CODEFORMER_MODELS_PATH] [--gfpgan-models-path GFPGAN_MODELS_PATH]
) P1 Y1 w6 [' b( ] V. I* M* j* x/ q [--esrgan-models-path ESRGAN_MODELS_PATH] [--bsrgan-models-path BSRGAN_MODELS_PATH]
& D. |( y. b6 A: t9 b8 e5 P [--realesrgan-models-path REALESRGAN_MODELS_PATH] [--clip-models-path CLIP_MODELS_PATH] [--xformers]
4 ]" W" [- b2 `* k- ?8 Z [--force-enable-xformers] [--xformers-flash-attention] [--deepdanbooru] [--opt-split-attention]& N0 p( K- Y, S0 ^6 e- E3 K6 K/ P
[--opt-sub-quad-attention] [--sub-quad-q-chunk-size SUB_QUAD_Q_CHUNK_SIZE]
5 E$ Z) h; |: D- @- u' A) g5 l [--sub-quad-kv-chunk-size SUB_QUAD_KV_CHUNK_SIZE]
, i( A7 { w$ u: z5 X; r [--sub-quad-chunk-threshold SUB_QUAD_CHUNK_THRESHOLD] [--opt-split-attention-invokeai]1 Z: y! M: C5 B7 o
[--opt-split-attention-v1] [--opt-sdp-attention] [--opt-sdp-no-mem-attention]1 w& P; t1 t0 P) y( O+ U7 w6 k) ~
[--disable-opt-split-attention] [--disable-nan-check] [--use-cpu USE_CPU [USE_CPU ...]] [--listen]
. V4 v% r% i+ ^3 q! j4 l4 g [--port PORT] [--show-negative-prompt] [--ui-config-file UI_CONFIG_FILE] [--hide-ui-dir-config]5 t: ~- K9 U. N! q' u* p/ n4 d7 C
[--freeze-settings] [--ui-settings-file UI_SETTINGS_FILE] [--gradio-debug]
1 z! t: o4 Q$ N& Z1 d [--gradio-auth GRADIO_AUTH] [--gradio-auth-path GRADIO_AUTH_PATH]
' j" [) S( k( J' @ [--gradio-img2img-tool GRADIO_IMG2IMG_TOOL] [--gradio-inpaint-tool GRADIO_INPAINT_TOOL]/ H/ q. k5 J b2 R! G0 f% H
[--gradio-allowed-path GRADIO_ALLOWED_PATH] [--opt-channelslast] [--styles-file STYLES_FILE]7 K1 a$ w+ q* @ q) S# g
[--autolaunch] [--theme THEME] [--use-textbox-seed] [--disable-console-progressbars]2 K- S( _0 T7 h& H+ q' r
[--enable-console-prompts] [--vae-path VAE_PATH] [--disable-safe-unpickle] [--api]+ Q" |# E6 e4 x( U$ J! _
[--api-auth API_AUTH] [--api-log] [--nowebui] [--ui-debug-mode] [--device-id DEVICE_ID]
8 ^1 f8 f, O9 t/ @- T [--administrator] [--cors-allow-origins CORS_ALLOW_ORIGINS]
6 R: h6 A5 y# r+ t, t$ H [--cors-allow-origins-regex CORS_ALLOW_ORIGINS_REGEX] [--tls-keyfile TLS_KEYFILE] M7 ^; F- q3 e( k3 H4 Z: V5 x
[--tls-certfile TLS_CERTFILE] [--disable-tls-verify] [--server-name SERVER_NAME] [--gradio-queue]" n6 [4 Z" d) F. f5 |/ P
[--no-gradio-queue] [--skip-version-check] [--no-hashing] [--no-download-sd-model]
# l% e( }* h5 T' Y( n) ? [--subpath SUBPATH] [--add-stop-route] [--ldsr-models-path LDSR_MODELS_PATH] [--lora-dir LORA_DIR]
) P6 e+ g& S: l$ L0 r2 C* H( o8 _5 ` [--scunet-models-path SCUNET_MODELS_PATH] [--swinir-models-path SWINIR_MODELS_PATH]
, P F) z& t8 }& w" o" J
+ |7 Z2 y4 ?, {6 O4 X
% w/ Z: o# R' i+ [| 命令行参数 | 解释 | | --opt-sdp-attention | 速度比使用 xformer 更快,仅适用于手动将 Torch 2.0 安装到其 venv 的用户。(非确定性) | | --opt-sdp-no-mem-attention | 速度比使用 xformer 更快,仅适用于手动将 Torch 2.0 安装到其 venv 的用户。(确定性,略慢于--opt-sdp-attention) | | --xformers | 使用]xformers库。内存消耗和速度有了很大的改进。只会在配置的一小部分上启用,因为这就是我们有二进制文件的目的。 | | --force-enable-xformers | 启用上面的 xformers,无论程序是否认为您可以运行它。不要报告运行此内容的错误。 | | --opt-split-attention | 交叉关注层优化显著减少了内存使用,几乎没有成本(有些人报告说它提高了性能)。黑魔法。
4 g( v+ d1 x# k. f( T2 L默认启用 ,包括 NVidia 和 AMD 卡。torch.cuda | | --disable-opt-split-attention | 禁用上述优化。 | | --opt-sub-quad-attention | 次二次注意,一种内存高效的交叉注意层优化,可以显着减少所需的内存,有时以轻微的性能成本。如果使用 xformers 不起作用的硬件/软件配置获得较差的性能或失败的代次,则建议使用。在macOS上,这也将允许生成更大的图像。 | | --opt-split-attention-v1 | 使用上述优化的旧版本,该版本不会占用大量内存(它将使用更少的 VRAM,但对您可以制作的最大图片大小的限制会更多)。 | | --medvram | 通过将稳定扩散模型拆分为三部分,使稳定扩散模型消耗更少的 VRAM:cond(用于将文本转换为数字表示)、first_stage(用于将图片转换为潜在空间并返回)和 unet(用于实际去噪潜在空间)并使其始终只有一个在 VRAM 中,将其他部分发送到 CPU RAM。降低性能,但仅降低一点 - 除非启用了实时预览。 | | --lowvram | 对上述内容进行了更彻底的优化,将unet拆分为许多模块,并且只有一个模块保留在VRAM中。对性能具有破坏性。 | | *do-not-batch-cond-uncond | 防止在采样期间对正提示和负提示进行批处理,这实质上允许您以 0.5 批大小运行,从而节省大量内存。降低性能。不是命令行选项,而是使用 或 隐式启用的优化。--medvram--lowvram | | --always-batch-cond-uncond | 禁用上述优化。只有与或一起才有意义--medvram--lowvram | | --opt-channelslast | 更改割炬存储类型,以便稳定扩散到通道。效果没有仔细研究。 | | --upcast-sampling | 对于英伟达和AMD卡平时强制运行,应该会提高生成速度。--no-half |
额外提示 (Windows): 优化器和标志的内存和性能影响这是一个使用特定硬件和配置的示例测试,您的里程可能会有所不同+ r3 f, A1 E8 g% }
使用 nVidia RTX3060 和 CUDA 11.7 进行测试 | 交叉注意 | 批量大小为 1/2/4/8/16 的峰值内存 | 初始它/秒 | 峰值它/秒 | 注意 | | 没有 | 4.1 / 6.2 / OOM / OOM / OOM | 4.2 | 4.6 | 缓慢和早期的内存不足 | | v1 | 2.8 / 2.8 / 2.8 / 3.1 / 4.1 | 4.1 | 4.7 | 速度慢但内存使用率最低,有时不需要有问题的 xformer | | 调用人工智能 | 3.1 / 4.2 / 6.3 / 6.6 / 7.0 | 5.5 | 6.6 | 与默认优化器几乎相同 | | 道格特克斯 | 3.1 / 4.2 / 6.3 / 6.6 / 7.1 | 5.4 | 6.6 | 违约 | | 道格特克斯 | 2.2 / 2.7 / 3.8 / 5.9 / 6.2 | 4.1 | 6.3 | 使用预设可以节省大量内存,而不会对性能造成巨大影响medvram | | 道格特克斯 | 0.9 / 1.1 / 2.2 / 4.3 / 6.4 | 1.0 | 6.3 | 由于不断交换,使用预设的速度非常慢lowvram | | Xformers | 2.8 / 2.8 / 2.8 / 3.1 / 4.1 | 6.5 | 7.5 | 最快和低内存 | | Xformers | 2.9 / 2.9 / 2.9 / 3.6 / 4.1 | 6.4 | 7.6 | 与和cuda_alloc_confopt-channelslast |
笔记: - 批量大小 1 时的性能约为峰值性能的 ~70%
- 峰值性能通常在批量大小 8 左右
9 K( f# Q. x+ H之后,如果您有额外的 VRAM,它会增长几个百分点,然后由于 GC 启动而开始下降 - 预设的性能在批处理大小 8 以下非常低,到那时内存节省不是那么大lowvram/ L3 V4 d$ {2 C, L
. X9 L) {2 @$ H8 j8 W- p
其他可能的优化: - 添加
0 x2 L; W0 r" A" \3 h# m6 o- I不影响性能,并稍微增加初始内存占用量,但长期运行时减少内存碎片set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512webui-user.bat - opt-channelslast
! [$ |1 O/ a0 d- A5 A1 A命中和未命中:批量大小较大时性能似乎略有提高,而小批量大小时性能较慢,但差异在误差范围内
( x6 a0 u1 r- x% W5 n0 h5 r) Z- I9 \8 P" x6 A0 U7 ]
! V# A6 r7 h3 n B: V" Z
. W- M6 ?+ ?' [: f y/ L
: e3 a2 H! z r j
- d+ M2 W" x( a3 J" E0 z
|