Files
2026-07-13 13:25:10 +08:00

35 lines
1.1 KiB
Python

# Copyright FunASR (https://github.com/modelscope/FunASR). All Rights Reserved.
# MIT License (https://opensource.org/licenses/MIT)
"""Device helpers for Fun-ASR-Nano runtime paths."""
_SUPPORTED_AUTOCAST_DEVICE_TYPES = {"cuda", "xpu", "mps", "npu"}
def _device_type_from_value(device):
"""Resolve a device type without requiring optional backend registration."""
if device is None:
return "cpu"
device_type = getattr(device, "type", None)
if device_type:
return str(device_type).lower()
if isinstance(device, str):
return device.split(":", 1)[0].lower()
return str(device).split(":", 1)[0].lower()
def resolve_autocast_device_type(device):
"""Return the torch.autocast device_type for a Fun-ASR-Nano device.
PyTorch builds without torch_npu may reject ``torch.device("npu:0")`` before
torch_npu registers the backend. Parse strings directly so NPU requests do
not fall back to CPU autocast, which only supports bf16 and caused #3034.
"""
device_type = _device_type_from_value(device)
if device_type in _SUPPORTED_AUTOCAST_DEVICE_TYPES:
return device_type
return "cpu"