[Windows] Disk offload crashes with access violation after DiskMap.flush_files() (apparent use-after-free)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 55/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- python
- Domaine
- backend, performance
Piste de recherche
Lisez diffsynth/core/vram/disk_map.py et diffsynth/core/vram/layers.py, en commençant par DiskMap.getitem, flush_files() et _load_from_disk. Exécutez examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-FL2VA.py sous Windows avec le tampon disque par défaut et vérifiez que l’encodage du prompt et la génération complète en 50 étapes se terminent sans violation d’accès.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Environment
- OS: Windows 11 (x64)
- GPU: RTX 4060 Laptop 8 GB (driver 610.62)
- Python 3.12.10, torch 2.11.0+cu128, safetensors 0.8.0, bitsandbytes 0.50.0
- DiffSynth-Studio: current
main, installed viapip install -e ".[quant]"(2026-08-03)
Reproduction
Run the official low-VRAM example examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-FL2VA.py on Windows (disk-offload vram_config with offload_device="disk").
The pipeline loads fine and prompt encoding starts, then the process dies with a hard native crash (no Python exception) while onloading the text encoder layers:
Windows fatal exception: access violation
Current thread 0x00017240 (most recent call first):
File "torch\storage.py", line 471 in __getitem__
File "diffsynth\core\vram\disk_map.py", line 62 in __getitem__
File "diffsynth\core\vram\layers.py", line 496 in _load_from_disk
File "diffsynth\core\vram\layers.py", line 520 in onload
File "diffsynth\diffusion\base_pipeline.py", line 180 in load_models_to_device
File "diffsynth\pipelines\minimax_h3_audio_video.py", line 382 in process
Analysis
DiskMap.__getitem__ calls flush_files() once num_params > buffer_size (default 1e9), which drops the open safe_open handles and re-opens them. Tensors previously returned by get_tensor may still reference the old mmap, so the next access after a flush is a use-after-free. On Windows this surfaces as an access violation inside torch.storage.__getitem__ instead of a catchable Python error.
Workaround
Setting DIFFSYNTH_DISK_MAP_BUFFER_SIZE=1000000000000 (effectively disabling the periodic flush) avoids the crash entirely — a full 50-step MiniMax-H3 generation then completes successfully.
Maybe flush_files() should not invalidate handles while tensors fetched from them can still be alive, or get_tensor results should be fully detached from the mmap before any flush can happen.
- Langage dominant
- Python
- Étoiles
- 13.3k
- Forks
- 1.3k
- Merge moyen
- 2 j 2 h
- PR mergées (30 j)
- 43
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelscope/DiffSynth-Studio
-
Partial download surfaces as "Cannot detect the model type" rather than a download errorPeut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
modelscope/DiffSynth-Studio#1668 ·
Les mainteneurs répondent en général sous 1 jour
-
bfloat16训练时段错误: 数组越界的一种方案Peut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelscope/DiffSynth-Studio#1499 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Latest update broke Wan2.2 S2VOuverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
modelscope/DiffSynth-Studio#1373 · 5 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
wan animate2 int8量化训练支持Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
modelscope/DiffSynth-Studio#1785 ·
Les mainteneurs répondent en général sous 1 jour
-
FP8 LoRA 训练在整块包装的模型上梯度丢失,权重保持初始值Peut-être pris @li-lizhe l’a pris il y a 2 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 49/100
modelscope/DiffSynth-Studio#1780 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelscope/DiffSynth-Studio
Issues similaires
-
Project submission:Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
slavakurilyak/awesome-ai-agents#845 ·
Les mainteneurs répondent en général sous 1 jour
-
tests: pin that the atomic writers in utils/paths.py stage the temporary file in the target's directoryPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertedifficulty:2 enhancement good first issue
Difficulté 1/5 1-3 heures Accessibilité débutants 92/100
MakazhanAlpamys/Soup#2178 ·
Les mainteneurs répondent en général sous 1 jour
-
[BUG] dcg.waggr permutation p-values are folded twice, so near-zero scores get the smallest p-valuesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
scverse/rapids-singlecell#854 ·
Les mainteneurs répondent en général sous 1 jour
-
Slang input: int8_t4_packed and uint8_t4_packed are copied into CrossGLPeut-être pris @ninglinLiu l’a pris aujourd’hui. Ouvertearea:frontend backend:slang bug direction:input
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
random_elements(unique=True) on an OrderedDict: ZeroDivisionError once only zero weights remain, AssertionError with use_weighting=FalsePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 13 jours