Two overlapping /diffusion/start requests can interleave between the is_active() check and the reservation, so reserve() itself must reject a second reservation atomically. Otherwise both callers reserve, both free the GPU's resident chat or image model, and the loser only 409s after the eviction -- the evict-then-fail the reservation exists to prevent. reserve() now raises under the lock if a start is already reserved or a job is already running. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| diffusion_dit_trainer.py | ||
| diffusion_lora_trainer.py | ||
| diffusion_train_common.py | ||
| diffusion_training_service.py | ||
| resume.py | ||
| s3_dataset.py | ||
| trainer.py | ||
| training.py | ||
| worker.py | ||