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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user