fix: move vocoder to correct device after GAFilter injection

inject_gafilters creates Conv1d modules on CPU. load_state_dict
preserves existing param devices but GAFilter params stay on CPU,
causing device mismatch during vocode. Save target device before
injection, then move entire vocoder after loading.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-09 20:28:55 +02:00
parent 793368af18
commit ecf828b007
+4
View File
@@ -61,12 +61,16 @@ class SelvaBigvganLoader:
else: else:
raise ValueError(f"[BigVGAN] Unknown mode: {mode}") raise ValueError(f"[BigVGAN] Unknown mode: {mode}")
# Remember device before injecting new modules (which default to CPU)
target_device = next(vocoder.parameters()).device
if ckpt.get("has_gafilter", False): if ckpt.get("has_gafilter", False):
kernel_size = ckpt.get("gafilter_kernel_size", 9) kernel_size = ckpt.get("gafilter_kernel_size", 9)
n_gaf = inject_gafilters(vocoder, kernel_size) n_gaf = inject_gafilters(vocoder, kernel_size)
print(f"[BigVGAN] GAFilter injected: {n_gaf} filters kernel={kernel_size}", flush=True) print(f"[BigVGAN] GAFilter injected: {n_gaf} filters kernel={kernel_size}", flush=True)
vocoder.load_state_dict(ckpt["generator"]) vocoder.load_state_dict(ckpt["generator"])
vocoder.to(target_device)
vocoder.eval() vocoder.eval()
print(f"[BigVGAN] Loaded fine-tuned vocoder from: {p}", flush=True) print(f"[BigVGAN] Loaded fine-tuned vocoder from: {p}", flush=True)