o
    áÙ·i
  ã                   @   s˜   d dl Z d dlmZ d dlmZ d dlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZ eeƒZg d	¢Z	dd
ede jdB dedB fdd„ZdS )é    N)Úinit_logger)ÚOmniDiffusionConfig)Úcurrent_omni_platformé   )ÚOffloadBackendÚOffloadConfigÚOffloadStrategy)ÚLayerWiseOffloadBackend)ÚModelLevelOffloadBackendÚapply_sequential_offloadÚremove_sequential_offload)r   r   r   r	   r
   r   r   Úget_offload_backendÚ	od_configÚdeviceÚreturnc              
   C   sÌ   t  | ¡}|jtjkrdS t ¡ rt ¡ dk r!t 	dt 
¡ ¡ dS |du rGzt ¡ }W n ttfyF } zt d|¡ W Y d}~dS d}~ww |jtjkrRt||ƒS |jtjkr]t||ƒS t d|j¡ dS )a­  Create appropriate offload backend based on configuration.

    Args:
        od_config: OmniDiffusionConfig with offload settings
        device: Target device (auto-detected if None)

    Returns:
        OffloadBackend instance or None if offloading disabled

    Example:
        >>> backend = get_offload_backend(od_config, device=torch.device("cuda:0"))
        >>> if backend:
        ...     backend.enable(pipeline)
    Nr   zHCurrent device: %s does not support CPU offloading. Skipping offloading.z1Failed to detect device: %s. Skipping offloading.zUnknown offload strategy: %s)r   Úfrom_od_configÚstrategyr   ÚNONEr   Úsupports_cpu_offloadÚget_device_countÚloggerÚwarningÚget_device_nameÚget_torch_deviceÚNotImplementedErrorÚAttributeErrorÚerrorÚMODEL_LEVELr
   Ú
LAYER_WISEr	   )r   r   ÚconfigÚexc© r!   úZ/home/ubuntu/.local/lib/python3.10/site-packages/vllm_omni/diffusion/offloader/__init__.pyr       s.   
þ€þ

r   )N)ÚtorchÚvllm.loggerr   Úvllm_omni.diffusion.datar   Úvllm_omni.platformsr   Úbaser   r   r   Úlayerwise_backendr	   Úsequential_backendr
   r   r   Ú__name__r   Ú__all__r   r   r!   r!   r!   r"   Ú<module>   s"   þÿþý