
    j                     
   d dl Z d dlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ g d	Zd
 Zd Zd Zd Zd Z ed          d             Zd Zd Z ed           G d de                      ZdS )    N)ContextDecorator   )logging)DCU_WHITELISTGCU_WHITELISTMETAX_GPU_WHITELISTMLU_WHITELISTNPU_BLACKLISTXPU_WHITELIST)class_requires_depsfunction_requires_depsis_dep_available)DISABLE_DEV_MODEL_WL)import_paddle)	cpugpuxpunpumlugcudcuiluvatar_gpu	metax_gpuc                     | dk    r|t          d          |r/d                    t          t          |                    }|  d| S |  S )Nr   z"`device_ids` must be None for CPUs,:)
ValueErrorjoinmapstr)device_type
device_idss     d/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/utils/device.pyconstr_devicer$   ,   sa    e
 6=>>>  XXc#z2233
,,
,,,    c                     t          d          r\t                      } | j                                        r3| j        j                                        dk    rt          ddg          S dS t          d          r:dd l}|j                                        r|j	        j        rt          ddg          S t          d          r<dd l
}t          |                                          }|dhz  rt          ddg          S dS )Npaddlepaddler   r   r   torchonnxruntimeCUDAExecutionProvider)r   r   deviceis_compiled_with_cudacudadevice_countr$   r(   is_availableversionr)   setget_available_providers)paddler(   ort	providerss       r#   get_default_devicer6   7   s   '' M//11	-"//11A55 ,,,u   -:""$$ 	-); 	- ,,,&& -!!!!335566	/00 	- ,,,5r%   c                    |                      d          }t          |          dk    rt          d|            t          |          dk    r|d         d}}ng|\  }}|                     d          }|D ](}|                                st          d|           )t	          t          t          |                    }|                                }|                                t          v sJ |d	k    r|t          d
          ||fS )parse_devicer      zInvalid device: r   r   Nr   z1Device ID must be an integer. Invalid device ID: r   z)No Device ID should be specified for CPUs)	splitlenr   isdigitlistr   intlowerSUPPORTED_DEVICE_TYPE)r+   partsr!   r"   	device_ids        r#   r8   r8   N   s-    LLE
5zzA~~4F44555
5zzQ"'(DZ"'Z%%c**
# 	 	I$$&&  S	SS   #c:..//
##%%K"77777e
 6DEEE
""r%   c                     t          |           \  }}|r-t          |          |k    sJ t          ||d |                   S t          ||          S N)r8   r;   r$   )r+   numr!   r"   s       r#   update_device_numrF   g   s\    *622K 6:#%%%%[*TcT*:;;;[*555r%   c                 D    t          |           \  }}t          |          S rD   )r8   set_env_for_device_type)r+   r!   _s      r#   set_env_for_devicerJ   p   s!    !&))NK";///r%   r'   c                 <   t                      }d }|                                 dk    r#|                                rddi} ||           |                                 dk    rddddd	d	d
} ||           |                                 dk    rdddddd} ||           |                                 dk    rddi} ||           |                                 dk    rddd} ||           |                                 dk    rddi} ||           d S d S )Nc                     |                                  D ].\  }}|t          j        |<   t          j        | d| d           /d S )Nz has been set to .)itemsosenvironr   debug)envskeyvals      r#   _setz%set_env_for_device_type.<locals>._sety   sV    

 	; 	;HC!BJsOMS993999::::	; 	;r%   r   FLAGS_conv_workspace_size_limit2000r   0auto_growthz0pad3d,pad3d_grad,set_value,set_value_with_tensorTrue)FLAGS_npu_jit_compileFLAGS_use_stride_kernelFLAGS_allocator_strategyCUSTOM_DEVICE_BLACK_LISTFLAGS_npu_scale_aclnnFLAGS_npu_split_aclnnr   11800pad3d)BKCL_FORCE_SYNCBKCL_TIMEOUTr\   XPU_BLACK_LISTXPU_PADDLE_CONV_FLOATr   r\   r   )r\   $FLAGS_use_stream_safe_cuda_allocatorr   )r   r?   is_compiled_with_rocm)r!   r3   rU   rR   s       r#   rH   rH   u   s   __F; ; ; e##(D(D(F(F#16:T


e##%('*(5(Z%+%+
 
 	T


e##""'*%%(
 
 	T


k)))3/T


e##'*47
 
 	T


e##)3/T




 $#r%   c                    t           rt          j        d           d S d}| dk    r|t          v sJ d| d|z               d S | dk    r|t          v sJ d| d|z               d S | dk    r|t
          v sJ d	| d|z               d S | d
k    r|t          vsJ d| d|z               d S | dk    r|t          v sJ d| d|z               d S | dk    r|t          v sJ d| d|z               d S d S )NznSkip checking if model is supported on device because the flag `PADDLE_PDX_DISABLE_DEV_MODEL_WL` has been set.zWYou could set env `PADDLE_PDX_DISABLE_DEV_MODEL_WL` to `true` to disable this checking.r   z%The DCU device does not yet support `z` model!r   z%The MLU device does not yet support `r   z+The METAX_GPU device does not yet support `r   z%The NPU device does not yet support `r   z%The XPU device does not yet support `r   z%The GCU device does not yet support `)	r   r   warningr   r	   r   r
   r   r   )r!   
model_nametipss      r#   check_supported_device_typern      s    |	
 	
 	
 	dDe]***HJHHH4O +**** 
		]***HJHHH4O +**** 
	#	#0000N*NNNQUU 10000 
		...HJHHH4O /.... 
		]***HJHHH4O +**** 
		]***HJHHH4O +** 
	**r%   c                 F    t          |           \  }}t          ||          S rD   )r8   rn   )r+   rl   r!   rI   s       r#   check_supported_devicerp      s#    !&))NK&{J???r%   c                   $    e Zd ZdZd Zd Zd ZdS )TemporaryDeviceChangerz?
    A context manager to temporarily change global device
    c                 l    t                      }|| _        |j                                        | _        d S rD   )r   
new_devicer+   
get_deviceoriginal_device)selfrt   r3   s      r#   __init__zTemporaryDeviceChanger.__init__   s.    $%}7799r%   c                 r    t                      }| j        | S |j                            | j                   | S rD   )r   rt   r+   
set_device)rw   r3   s     r#   	__enter__z TemporaryDeviceChanger.__enter__   s5    ?"K  111r%   c                 r    t                      }| j        dS |j                            | j                   dS )NF)r   rt   r+   rz   rv   )rw   exc_typeexc_valexc_tbr3   s        r#   __exit__zTemporaryDeviceChanger.__exit__   s6    ?"5  !5666ur%   N)__name__
__module____qualname____doc__rx   r{   r    r%   r#   rr   rr      sK         : : :      r%   rr   )rO   
contextlibr    r   custom_device_listr   r   r   r	   r
   r   depsr   r   r   flagsr   import_guardr   r@   r$   r6   r8   rF   rJ   rH   rn   rp   rr   r   r%   r#   <module>r      s   
			 ' ' ' ' ' '                      P O O O O O O O O O ' ' ' ' ' ' ' ' ' ' ' '
 
 
        .# # #26 6 60 0 0
 ''* * ('*Z
 
 
D@ @ @
 ^$$    -   %$  r%   