bfloat16训练时段错误: 数组越界的一种方案
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- python, pytorch
- Ambito
- machine-learning
Direzione di ricerca
Riproduci il problema modificando torch.dtype in torch.bfloat16 in examples/stable_diffusion_xl/model_training/train.py, quindi esamina diffsynth/diffusion/ddim_scheduler.py e la relativa funzione add_noise intorno alla riga 90. Verifica come vengono convertiti e indicizzati i valori di timestep e conferma che l'addestramento non produca più un errore di accesso oltre i limiti, preservando al contempo il normale comportamento dello scheduler.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
问题
在使用半精度 bfloat16 训练lora时有概率报错: 数组越界.
一个快速复现
将 examples/stable_diffusion_xl/model_training/train.py 中的第 30 行中的 torch.dtype=torch.float32 改为 torch.dtype=torch.bfloat16 然后在训练的时候有概率会产生上述报错.
原因(猜测)
报错的具体位置在 diffsynth/diffusion/ddim_scheduler.py 中的 90 行, 猜测是因为使用流匹配的损失函数时间步的范围是 0-999 但是在ddim调度器中可能取到 1000 导致的数组越界, 我在报错的位置输出了当前的时间步确实是 1000, 原因我猜测是因为将 float32 精度的 999.0 转换为 bfloat16 精度时由于浮点数精度导致这个数值变成了 1000.0, 下面的代码展示了这个现象:
import torch
x0 = torch.tensor(999.0, dtype=torch.float32)
x1 = x0.to(dtype=torch.bfloat16)
x2 = x1.to(dtype=torch.float32)
print(x0, x1, x2, sep='\n')
他的输出是:
tensor(999.)
tensor(1000., dtype=torch.bfloat16)
tensor(1000.)
解决
我在 diffsynth/diffusion/ddim_scheduler.py 的 add_noise 函数的一开始加上了 timestep = timestep.to(torch.float32).clamp(0, 999).long() 这样一行代码, 然后就没有再出现上面的问题
- Lingua principale
- Python
- Stelle
- 13.1k
- Fork
- 1.3k
- Merge medio
- 13h 12m
- PR unite (30g)
- 45
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelscope/DiffSynth-Studio
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
modelscope/DiffSynth-Studio#1668 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
modelscope/DiffSynth-Studio#1373 · 5 commenti · 1 reazione ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
modelscope/DiffSynth-Studio#1691 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
modelscope/DiffSynth-Studio#1687 ·
-
FLUX LoRA Fine-Tuning: Border Outpainting and Pixel-Level Misalignment Issues in Image Editing Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
modelscope/DiffSynth-Studio#1685 · 1 commento ·
Tutte le issue di modelscope/DiffSynth-Studio
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
zostera/django-bootstrap4#894 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
use-agent-os/agent-os#3276 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
NousResearch/hermes-agent#117848 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
zilliztech/memsearch#759 ·