Add bf16 precision option for ViTMatte (--precision, default fp32)
bf16 halves the matting model's activation memory -- its full-resolution attention is the pipeline's memory peak -- with visually identical alpha (measured: 0 px alpha deviation > 0.25 on samples; cross-check veto behaviour unchanged, region IoU 0.984). Guarded by a hardware check so it never lands on a slow emulation path: CUDA requires torch.cuda.is_bf16_supported(); CPU requires the same oneDNN native-bf16 gate PyTorch uses for matmul routing (AVX512-BF16/ AMX). Without support it warns and falls back to fp32 -- on a Zen2 EPYC the fallback kernels measured 17-370x slower than fp32, so silent bf16 there would be a performance landmine. Segmentation stays fp32: torchvision deform_conv2d (used by BiRefNet) has no bf16 CPU kernel, and the segmenter is not the memory peak. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -119,6 +119,12 @@ class ModelSettings:
|
||||
device: str = "cpu"
|
||||
matting_method: str = "vitmatte"
|
||||
fallback_to_chroma_alpha: bool = False
|
||||
# ViTMatte compute precision: "fp32" or "bf16". bf16 halves the matting
|
||||
# model's activation memory (its full-resolution attention is the pipeline's
|
||||
# memory peak) with visually identical alpha, but needs bf16-capable
|
||||
# hardware (any modern GPU, or a CPU with AVX512-BF16/AMX) — otherwise it
|
||||
# falls back to fp32 with a warning. Segmentation always stays fp32.
|
||||
precision: str = "fp32"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
|
||||
Reference in New Issue
Block a user