import torch from contextlib import suppress def get_autocast(precision): if precision == 'amp': return torch.cuda.amp.autocast elif precision == 'amp_bfloat16' or precision == 'amp_bf16': # amp_bfloat16 is more stable than amp float16 for clip training return lambda: torch.cuda.amp.autocast(dtype=torch.bfloat16) else: return suppress def get_input_dtype(precision: str): input_dtype = None if precision in ('bf16', 'pure_bf16'): input_dtype = torch.bfloat16 elif precision in ('fp16', 'pure_fp16'): input_dtype = torch.float16 return input_dtype