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:
2026-07-06 13:32:51 +08:00
parent 8b574bc551
commit dfc85566c7
6 changed files with 49 additions and 6 deletions
+1 -1
View File
@@ -84,7 +84,7 @@ def override_settings(settings: PipelineSettings, **overrides: Any) -> PipelineS
model_updates = {
key: overrides[key]
for key in ["model_name", "device", "matting_method", "fallback_to_chroma_alpha"]
for key in ["model_name", "device", "matting_method", "fallback_to_chroma_alpha", "precision"]
if overrides.get(key) is not None
}
trimap_updates = {