Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Paged/ adam8bit/lion8bit for Sdxl bitsandbytes 0.39.1 cuda118 on windows #623

Merged
merged 92 commits into from
Jul 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
bee1e6f
ADD libbitsandbytes.dll for 0.38.1
sdbds Apr 25, 2023
891c7e9
Delete libbitsandbytes_cuda116.dll
sdbds Apr 25, 2023
3ba4dfe
Delete cextension.py
sdbds Apr 25, 2023
409b1ff
add main.py
sdbds Apr 25, 2023
83abc60
Update requirements.txt for bitsandbytes 0.38.1
sdbds Apr 25, 2023
4642c52
Update README.md for bitsandbytes-windows
sdbds Apr 25, 2023
fa6d748
Update README-ja.md for bitsandbytes 0.38.1
sdbds Apr 25, 2023
943509d
Update main.py for return cuda118
sdbds Apr 25, 2023
72e4948
Update train_util.py for lion8bit
sdbds Apr 25, 2023
cc9af77
Update train_README-ja.md for lion8bit
sdbds Apr 25, 2023
0c9c90a
Update train_util.py for add DAdaptAdan and DAdaptSGD
sdbds Apr 26, 2023
0db2edd
Update train_util.py for DAdaptadam
sdbds Apr 26, 2023
b357b6d
Update train_network.py for dadapt
sdbds Apr 26, 2023
d3c2489
Merge branch 'kohya-ss:main' into DAdaptAdan
sdbds Apr 26, 2023
f675b09
Update train_README-ja.md for DAdapt
sdbds Apr 26, 2023
eccc075
Update train_util.py for DAdapt
sdbds Apr 26, 2023
725cce7
Update train_network.py for DAdaptAdaGrad
sdbds Apr 26, 2023
871644b
Update train_db.py for DAdapt
sdbds Apr 26, 2023
208ad06
Update fine_tune.py for DAdapt
sdbds Apr 26, 2023
66aeef4
Update train_textual_inversion.py for DAdapt
sdbds Apr 26, 2023
6d0ecb7
Update train_textual_inversion_XTI.py for DAdapt
sdbds Apr 26, 2023
f6fda20
Merge branch 'kohya-ss:main' into main
sdbds Apr 26, 2023
b65c023
Merge branch 'qinglong' into main
sdbds Apr 26, 2023
a5ff9ad
Revert "Merge branch 'qinglong' into main"
sdbds Apr 26, 2023
0bdaedf
Merge branch 'kohya-ss:main' into main
sdbds Apr 27, 2023
e91eef0
Revert "Update requirements.txt for bitsandbytes 0.38.1"
sdbds May 2, 2023
95e0f21
Revert "Delete cextension.py"
sdbds May 2, 2023
13c04e8
Merge branch 'kohya-ss:main' into main
sdbds May 2, 2023
5cc2304
Revert "Update README.md for bitsandbytes-windows"
sdbds May 2, 2023
62940a5
Revert "Update README-ja.md for bitsandbytes 0.38.1"
sdbds May 2, 2023
8d9aebd
Merge branch 'kohya-ss:main' into lion8bit
sdbds May 3, 2023
c71c2b2
Merge branch 'kohya-ss:main' into lion8bit
sdbds May 3, 2023
47ca358
Update train_util.py for DAdaptLion
sdbds May 7, 2023
7ea8da5
Update train_README-zh.md for dadaptlion
sdbds May 7, 2023
9040b11
Update train_README-ja.md for DAdaptLion
sdbds May 7, 2023
8e0ebc7
add DAdatpt V3
sdbds May 8, 2023
557fd11
Alignment
sdbds May 8, 2023
a47bfc0
Update train_util.py for experimental
sdbds May 8, 2023
3a984e5
Update train_util.py V3
sdbds May 8, 2023
087de69
Merge branch 'kohya-ss:main' into lion8bit
sdbds May 16, 2023
0316fe6
Update train_util.py
sdbds May 21, 2023
2aabea5
Merge pull request #7 from sdbds/lion8bit
sdbds May 21, 2023
3b3072d
Update requirements.txt
sdbds May 22, 2023
0853f36
Merge pull request #8 from sdbds/lion8bit
sdbds May 22, 2023
fdfe6db
Merge branch 'kohya-ss:main' into DAdapt
sdbds May 22, 2023
a2b3f85
Update train_README-zh.md
sdbds May 22, 2023
8be7374
Update train_README-ja.md
sdbds May 22, 2023
342e253
Update train_util.py fix
sdbds May 23, 2023
522eeea
Update train_util.py
sdbds May 23, 2023
61d511c
Merge branch 'kohya-ss:main' into DAdapt
sdbds May 26, 2023
e6742cd
Merge branch 'kohya-ss:main' into qinglong
sdbds May 28, 2023
5d9940b
Merge branch 'kohya-ss:main' into qinglong
sdbds Jun 2, 2023
dca9cea
Merge branch 'kohya-ss:main' into qinglong
sdbds Jun 11, 2023
2237c14
Merge branch 'kohya-ss:main' into DAdapt
sdbds Jun 12, 2023
7e185f8
support Prodigy
sdbds Jun 12, 2023
acf8a1f
add lower
sdbds Jun 12, 2023
9db5cd9
Merge branch 'kohya-ss:main' into qinglong
sdbds Jun 14, 2023
2859de2
Merge pull request #9 from sdbds/DAdapt
sdbds Jun 14, 2023
2b29462
Merge branch 'kohya-ss:main' into qinglong
sdbds Jun 15, 2023
214d471
Merge branch 'kohya-ss:main' into lion8bit
sdbds Jun 15, 2023
7a8e9b1
Merge branch 'kohya-ss:main' into qinglong
sdbds Jun 16, 2023
f768e20
Merge branch 'kohya-ss:main' into qinglong
sdbds Jul 5, 2023
f30f9e5
Merge pull request #10 from kohya-ss/sdxl
sdbds Jul 6, 2023
3afd7a3
Update main.py
sdbds Jul 6, 2023
b0416f3
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 8, 2023
f1c0847
Merge branch 'kohya-ss:main' into lion8bit
sdbds Jul 8, 2023
259a090
support PagedAdamW8bit/PagedLion8bit
sdbds Jul 8, 2023
3209e76
Update requirements.txt
sdbds Jul 8, 2023
991f5bc
update for PageAdamW8bit and PagedLion8bit
sdbds Jul 8, 2023
180d7d0
Revert
sdbds Jul 8, 2023
a1e86a1
revert main
sdbds Jul 8, 2023
982c4db
Update train_util.py
sdbds Jul 9, 2023
db39ffc
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 9, 2023
9ee188c
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 10, 2023
4ffd0f8
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 11, 2023
04dab6f
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 12, 2023
a4dc4a1
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 13, 2023
8dbaecd
update for bitsandbytes 0.39.1
sdbds Jul 13, 2023
39da1c4
Update requirements.txt
sdbds Jul 13, 2023
94ce891
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 15, 2023
bd5ff53
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 16, 2023
a969ecc
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 17, 2023
8a073ee
vram leak fix
pamparamm Jul 17, 2023
c9a7de9
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 19, 2023
2d6367d
Merge branch 'main' of https://github.com/sdbds/sd-scripts into sdxl
sdbds Jul 19, 2023
e654568
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 21, 2023
d262a1e
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 25, 2023
2892f75
Merge branch 'sdxl' of https://github.com/sdbds/sd-scripts into sdxl
sdbds Jul 25, 2023
8af1c88
Merge branch 'sdxl' of https://github.com/Isotr0py/sd-scripts into sdxl
sdbds Jul 29, 2023
4ecf734
Merge branch 'cache_latents_leak_fix' of https://github.com/pamparamm…
sdbds Jul 29, 2023
ab43765
Merge branch 'kohya-ss:sdxl' into sdxl
sdbds Jul 29, 2023
a356060
Merge branch 'sdxl' of https://github.com/sdbds/sd-scripts into sdxl
sdbds Jul 29, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README-ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,16 @@ pip install https://github.com/jllllll/bitsandbytes-windows-webui/raw/main/bitsa

アップグレード時には`pip install .`でこのリポジトリを更新し、必要に応じて他のパッケージもアップグレードしてください。

### オプション:PagedAdamW8bitとPagedLion8bitを使う

PagedAdamW8bitとPagedLion8bitを使う場合には`bitsandbytes`を0.39.0以降にアップグレードする必要があります。`bitsandbytes`をアンインストールし、Windows環境では例えば[こちら](https://github.com/jllllll/bitsandbytes-windows-webui)などからWindows版のwhlファイルをインストールしてください。たとえば以下のような手順になります。

```powershell
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl
```

アップグレード時には`pip install .`でこのリポジトリを更新し、必要に応じて他のパッケージもアップグレードしてください。

## アップグレード

新しいリリースがあった場合、以下のコマンドで更新できます。
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This repository contains the scripts for:
* DreamBooth training, including U-Net and Text Encoder
* Fine-tuning (native training), including U-Net and Text Encoder
* LoRA training
* Texutal Inversion training
* Textual Inversion training
* Image generation
* Model conversion (supports 1.x and 2.x, Stable Diffision ckpt/safetensors and Diffusers)

Expand Down Expand Up @@ -214,6 +214,16 @@ pip install https://github.com/jllllll/bitsandbytes-windows-webui/raw/main/bitsa

For upgrading, upgrade this repo with `pip install .`, and upgrade necessary packages manually.

### Optional: Use PagedAdamW8bit and PagedLion8bit

For PagedAdamW8bit and PagedLion8bit, you need to upgrade `bitsandbytes` to 0.39.0 or later. Uninstall `bitsandbytes`, and for Windows, install the Windows version whl file from [here](https://github.com/jllllll/bitsandbytes-windows-webui) or other sources, like:

```powershell
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl
```

For upgrading, upgrade this repo with `pip install .`, and upgrade necessary packages manually.

## Upgrade

When a new release comes out you can upgrade your repo with the following command:
Expand Down
Binary file modified bitsandbytes_windows/libbitsandbytes_cpu.dll
Binary file not shown.
Binary file added bitsandbytes_windows/libbitsandbytes_cuda118.dll
Binary file not shown.
658 changes: 492 additions & 166 deletions bitsandbytes_windows/main.py

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions docs/train_README-ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -609,10 +609,12 @@ masterpiece, best quality, 1boy, in business suit, standing at street, looking b
- AdamW : [torch.optim.AdamW](https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html)
- 過去のバージョンのオプション未指定時と同じ
- AdamW8bit : 引数は同上
- PagedAdamW8bit : 引数は同上
- 過去のバージョンの--use_8bit_adam指定時と同じ
- Lion : https://github.com/lucidrains/lion-pytorch
- 過去のバージョンの--use_lion_optimizer指定時と同じ
- Lion8bit : 引数は同上
- PagedLion8bit : 引数は同上
- SGDNesterov : [torch.optim.SGD](https://pytorch.org/docs/stable/generated/torch.optim.SGD.html), nesterov=True
- SGDNesterov8bit : 引数は同上
- DAdaptation(DAdaptAdamPreprint) : https://github.com/facebookresearch/dadaptation
Expand Down
5 changes: 4 additions & 1 deletion docs/train_README-zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -546,9 +546,12 @@ masterpiece, best quality, 1boy, in business suit, standing at street, looking b
-- 指定优化器类型。您可以指定
- AdamW : [torch.optim.AdamW](https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html)
- 与过去版本中未指定选项时相同
- AdamW8bit : 同上
- AdamW8bit : 参数同上
- PagedAdamW8bit : 参数同上
- 与过去版本中指定的 --use_8bit_adam 相同
- Lion : https://github.com/lucidrains/lion-pytorch
- Lion8bit : 参数同上
- PagedLion8bit : 参数同上
- 与过去版本中指定的 --use_lion_optimizer 相同
- SGDNesterov : [torch.optim.SGD](https://pytorch.org/docs/stable/generated/torch.optim.SGD.html), nesterov=True
- SGDNesterov8bit : 参数同上
Expand Down
5 changes: 5 additions & 0 deletions library/model_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,11 @@ def convert_ldm_clip_checkpoint_v1(checkpoint):
for key in keys:
if key.startswith("cond_stage_model.transformer"):
text_model_dict[key[len("cond_stage_model.transformer.") :]] = checkpoint[key]

# support checkpoint without position_ids (invalid checkpoint)
if "text_model.embeddings.position_ids" not in text_model_dict:
text_model_dict["text_model.embeddings.position_ids"] = torch.arange(77).unsqueeze(0) # 77 is the max length of the text

return text_model_dict


Expand Down
41 changes: 30 additions & 11 deletions library/train_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2165,6 +2165,8 @@ def cache_batch_latents(
info.latents = latent
if flip_aug:
info.latents_flipped = flipped_latent
if torch.cuda.is_available():
torch.cuda.empty_cache()


def cache_batch_text_encoder_outputs(
Expand Down Expand Up @@ -2483,7 +2485,7 @@ def add_optimizer_arguments(parser: argparse.ArgumentParser):
"--optimizer_type",
type=str,
default="",
help="Optimizer to use / オプティマイザの種類: AdamW (default), AdamW8bit, Lion8bit, Lion, SGDNesterov, SGDNesterov8bit, DAdaptation(DAdaptAdamPreprint), DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptAdanIP, DAdaptLion, DAdaptSGD, AdaFactor",
help="Optimizer to use / オプティマイザの種類: AdamW (default), AdamW8bit, PagedAdamW8bit, Lion8bit, PagedLion8bit, Lion, SGDNesterov, SGDNesterov8bit, DAdaptation(DAdaptAdamPreprint), DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptAdanIP, DAdaptLion, DAdaptSGD, AdaFactor",
)

# backward compatibility
Expand Down Expand Up @@ -3137,7 +3139,7 @@ def task():


def get_optimizer(args, trainable_params):
# "Optimizer to use: AdamW, AdamW8bit, Lion, SGDNesterov, SGDNesterov8bit, Lion8bit, DAdaptation(DAdaptAdamPreprint), DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptAdanIP, DAdaptLion, DAdaptSGD, Adafactor"
# "Optimizer to use: AdamW, AdamW8bit, Lion, SGDNesterov, SGDNesterov8bit, PagedAdamW8bit, Lion8bit, PagedLion8bit, DAdaptation(DAdaptAdamPreprint), DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptAdanIP, DAdaptLion, DAdaptSGD, Adafactor"

optimizer_type = args.optimizer_type
if args.use_8bit_adam:
Expand Down Expand Up @@ -3214,20 +3216,37 @@ def get_optimizer(args, trainable_params):
print(f"use Lion optimizer | {optimizer_kwargs}")
optimizer_class = lion_pytorch.Lion
optimizer = optimizer_class(trainable_params, lr=lr, **optimizer_kwargs)

elif optimizer_type == "Lion8bit".lower():
elif optimizer_type.endswith("8bit".lower()):
try:
import bitsandbytes as bnb
except ImportError:
raise ImportError("No bitsandbytes / bitsandbytesがインストールされていないようです")

print(f"use 8-bit Lion optimizer | {optimizer_kwargs}")
try:
optimizer_class = bnb.optim.Lion8bit
except AttributeError:
raise AttributeError(
"No Lion8bit. The version of bitsandbytes installed seems to be old. Please install 0.38.0 or later. / Lion8bitが定義されていません。インストールされているbitsandbytesのバージョンが古いようです。0.38.0以上をインストールしてください"
)
if optimizer_type == "Lion8bit".lower():
print(f"use 8-bit Lion optimizer | {optimizer_kwargs}")
try:
optimizer_class = bnb.optim.Lion8bit
except AttributeError:
raise AttributeError(
"No Lion8bit. The version of bitsandbytes installed seems to be old. Please install 0.38.0 or later. / Lion8bitが定義されていません。インストールされているbitsandbytesのバージョンが古いようです。0.38.0以上をインストールしてください"
)
elif optimizer_type == "PagedAdamW8bit".lower():
print(f"use 8-bit PagedAdamW optimizer | {optimizer_kwargs}")
try:
optimizer_class = bnb.optim.PagedAdamW8bit
except AttributeError:
raise AttributeError(
"No PagedAdamW8bit. The version of bitsandbytes installed seems to be old. Please install 0.39.0 or later. / PagedAdamW8bitが定義されていません。インストールされているbitsandbytesのバージョンが古いようです。0.39.0以上をインストールしてください"
)
elif optimizer_type == "PagedLion8bit".lower():
print(f"use 8-bit Paged Lion optimizer | {optimizer_kwargs}")
try:
optimizer_class = bnb.optim.PagedLion8bit
except AttributeError:
raise AttributeError(
"No PagedLion8bit. The version of bitsandbytes installed seems to be old. Please install 0.39.0 or later. / PagedLion8bitが定義されていません。インストールされているbitsandbytesのバージョンが古いようです。0.39.0以上をインストールしてください"
)

optimizer = optimizer_class(trainable_params, lr=lr, **optimizer_kwargs)

Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ albumentations==1.3.0
opencv-python==4.7.0.68
einops==0.6.0
pytorch-lightning==1.9.0
bitsandbytes==0.35.0
bitsandbytes==0.39.1
tensorboard==2.10.1
safetensors==0.3.1
# gradio==3.16.2
Expand Down