
    %ɷi>                        d dl Z d dlZ d dlZd dlZd dlZd dlmZmZ d dl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mZ  edd	
      ZdZer	 d dlmc mZ d dlZd	ZeZej<                  j?                         Z dIdZ!de"fdZ#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-edJd       Z.d Z/d Z0d Z1dKdZ2d Z3d Z4d  Z5d! Z6dId"Z7d# Z8d$ Z9d% Z:d& Z;d' Z<d( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGd3 ZHd4 ZId5 ZJd6 ZKd7 ZLd8 ZMdLd9ZNedKd:       ZOedKd;       ZPedKd<       ZQedKd=       ZRedKd>       ZSd? ZTedKd@       ZUedKdA       ZVdB ZWdC ZXdD ZYdE ZZdF Z[dG Z\dMdHZ]y# e$ r Y w xY w)N    N)	lru_cachewraps)version)parse   )parse_flag_from_envpatch_environmentstr_to_bool)compare_versionsis_torch_versionUSE_TORCH_XLAT)defaultFc                     t         j                  j                  |       d u}|r*	 t         j                  j                  ||       }y|      }yy # t         j                  j                  $ r Y yw xY w)NTF)	importlibutil	find_specmetadataPackageNotFoundError)pkg_namemetadata_namepackage_exists_s       K/var/www/html/venv/lib/python3.12/site-packages/accelerate/utils/imports.py_is_package_availabler   2   su    ^^--h7tCN	""++8MHaA TaaA	 
 !!66 		s   !A A A/.A/returnc                      t         S N)_torch_distributed_available     r   is_torch_distributed_availabler!   >   s    ''r    c                  l    t        dd      r(t        j                  j                  j	                         S y)N>=z2.7.0F)r   torchdistributeddistributed_c10dis_xccl_availabler   r    r   r'   r'   B   s*    g&  11CCEEr    c                      t        d      S )Nimport_timerr   r   r    r   is_import_timer_availabler+   H        00r    c                  4    t        d      xs t        dd      S )Npynvmlznvidia-ml-pyr*   r   r    r   is_pynvml_availabler/   L   s     *].CHn.]]r    c                      t        d      S )Npytestr*   r   r    r   is_pytest_availabler2   P        **r    c                      t        dd      S )Nmsampzms-ampr*   r   r    r   is_msamp_availabler6   T   s     (33r    c                      t        d      S )Nschedulefreer*   r   r    r   is_schedulefree_availabler9   X   r,   r    c                  F    t               rt        dd      S t        dd      S )Nintel_transformer_enginezintel-transformer-enginetransformer_enginetransformer-engine)is_hpu_availabler   r   r    r   is_transformer_engine_availabler?   \   s&    $%?A[\\$%9;OPPr    c                  <    t        dd      rddlm}   |        d   S y)Nr<   r=   r   check_mxfp8_supportF)r   transformer_engine.pytorch.fp8rB   rA   s    r   %is_transformer_engine_mxfp8_availablerD   c   s"    13GHF"$Q''r    c                      t        d      S )N
lomo_optimr*   r   r    r   is_lomo_availablerG   k        ..r    c                      t        d      5  t        j                  j                         } ddd       | S # 1 sw Y    S xY w)z
    Checks if `cuda` is available via an `nvml-based` check which won't trigger the drivers and leave cuda
    uninitialized.
    1)PYTORCH_NVML_BASED_CUDA_CHECKN)r	   r$   cudais_available)	availables    r   is_cuda_availablerO   o   s>    
 
	= .JJ++-	. . s	   6A c                     | r	|rJ d       t         sy|r t        j                  j                         dv S | r!t        j                  j                         dk(  S y)z
    Check if `torch_xla` is available. To train a native pytorch job in an environment with torch xla installed, set
    the USE_TORCH_XLA to false.
    z6The check_is_tpu and check_is_gpu cannot both be true.F)GPUCUDATPUT)_torch_xla_available	torch_xlaruntimedevice_type)check_is_tpucheck_is_gpus     r   is_torch_xla_availablerZ   z   sX     h0hh.	  ,,./AA	  ,,.%77r    c                      t        d      } | r?t        j                  t        j                  j                  d            }t        |dd      S y)Ntorchaor#   z0.6.1Fr   r   r   r   r   r   )r   torchao_versions     r   is_torchao_availabler_      s@    *95N!--	(:(:(B(B9(MNw??r    c                      t        d      S )N	deepspeedr*   r   r    r   is_deepspeed_availablerb           --r    c                      t        dd      S Nr#   z2.4.0r   r   r    r   is_pippy_availablerg      s    D'**r    c                 z   t        d      r|  S t               rt        j                  j	                         S t               rt        j                  j	                         S t               rt        j                  j	                         S t               r*t        j                  j                  j                  dd      S y)z8Checks if bf16 is supported, optionally ignoring the TPUT)rX      r   )rZ   rO   r$   rL   is_bf16_supportedis_mlu_availablemluis_xpu_availablexpuis_mps_availablebackendsmpsis_macos_or_newer)
ignore_tpus    r   is_bf16_availablert      s    40~zz++--yy**,,yy**,,~~!!33B::r    c                      t               ryy)zChecks if fp16 is supportedFT)is_habana_gaudi1r   r    r   is_fp16_availablerw      s    r    c                  F    t               xs t               xs
 t               S )zChecks if fp8 is supported)r6   r?   r_   r   r    r   is_fp8_availablery      s    ^#B#D^H\H^^r    c                      t        d      } | r?t        j                  t        j                  j                  d            }t        |dd      S y)Nbitsandbytesr#   z0.39.0Fr]   r   bnb_versions     r   is_4bit_bnb_availabler~      @    *>:NmmI$6$6$>$>~$NOT8<<r    c                      t        d      } | r?t        j                  t        j                  j                  d            }t        |dd      S y)Nr{   r#   z0.37.2Fr]   r|   s     r   is_8bit_bnb_availabler      r   r    c                     t        d      }|rA| ?t        j                  t        j                  j                  d            }t        |d|       S |S )Nr{   r#   r]   )min_versionr   r}   s      r   is_bnb_availabler      sH    *>:N+1mmI$6$6$>$>~$NOT;??r    c                  N    t               sydd l} dt        | dt                     v S )NFr   multi_backendfeatures)r   r{   getattrset)bnbs    r   'is_bitsandbytes_multi_backend_availabler      s$    gc:su===r    c                      t        d      S )Ntorchvisionr*   r   r    r   is_torchvision_availabler      s     //r    c                     t        t        j                  j                  dd            dk(  rwt        j
                  j                  d      W	 t        t        j                  j                  d            } t        | dd      r t        j
                  j                  dd      S y y y # t        $ r"}t        j                  d	|        Y d }~y
d }~ww xY w)NACCELERATE_USE_MEGATRON_LMFalser   megatronzmegatron-corer#   0.8.0z	.trainingz)Parse Megatron version failed. Exception:F)r
   osenvirongetr   r   r   r   r   r   r   	Exceptionwarningswarn)megatron_versiones     r   is_megatron_lm_availabler      s    2::>>">HIQN>>##J/;#(););)C)CO)T#U #$4dGD$>>33KLL E < O   I!MNs   AB% %	C.CCc                      t        d      S )Ntransformersr*   r   r    r   is_transformers_availabler      r,   r    c                      t        d      S )Ndatasetsr*   r   r    r   is_datasets_availabler           ,,r    c                      t        d      S )Npeftr*   r   r    r   is_peft_availabler           ((r    c                      t        d      S )Ntimmr*   r   r    r   is_timm_availabler      r   r    c                  D    t               rt        dd      S t        d      S )Ntritonzpytorch-triton-xpu)rm   r   r   r    r   is_triton_availabler      s!    $X/CDD **r    c                      t        d      } | r?t        j                  t        j                  j                  d            }t        |dd      S y)Naim<z4.0.0Fr]   )r   aim_versions     r   is_aim_availabler      s@    *51NmmI$6$6$>$>u$EFS'::r    c                  2    t        d      xs t        d      S )NtensorboardtensorboardXr*   r   r    r   is_tensorboard_availabler     s     /X3H3XXr    c                      t        d      S )Nwandbr*   r   r    r   is_wandb_availabler          ))r    c                      t        d      S )Ncomet_mlr*   r   r    r   is_comet_ml_availabler     r   r    c                      t        d      S )Nswanlabr*   r   r    r   is_swanlab_availabler          ++r    c                  B    t         j                  dk\  xr t        d      S )N)   
   trackio)sysversion_infor   r   r    r   is_trackio_availabler     s    w&K+@+KKr    c                      t        d      S )Nboto3r*   r   r    r   is_boto3_availabler     r   r    c                  2    t        d      rt        dd      S y)NrichACCELERATE_ENABLE_RICHF)r   r   r   r    r   is_rich_availabler     s    V$"#;UCCr    c                      t        d      S )N	sagemakerr*   r   r    r   is_sagemaker_availabler   %  rc   r    c                      t        d      S )Ntqdmr*   r   r    r   is_tqdm_availabler   )  r   r    c                      t        d      S )Nclearmlr*   r   r    r   is_clearml_availabler   -  r   r    c                      t        d      S )Npandasr*   r   r    r   is_pandas_availabler   1  r3   r    c                      t        d      S )N
matplotlibr*   r   r    r   is_matplotlib_availabler   5  rH   r    c                      t        d      ryt        j                  j                  d      !	 t        j                  j	                  d      } yy# t        j                  j
                  $ r Y yw xY w)NmlflowTzmlflow-skinnyF)r   r   r   r   r   r   )r   s    r   is_mlflow_availabler   9  se    X&~~)5	""++O<A  !!66 		s   A A.-A.c                     t        d|       xrR t        j                  j                  j	                         xr( t        j                  j                  j                         S )zHChecks if MPS device is available. The minimum version required is 1.12.r#   )r   r$   rp   rq   rM   is_built)r   s    r   ro   ro   F  sD     D+.v5>>3E3E3R3R3TvY^YgYgYkYkYtYtYvvr    c                     t         j                  j                  d      yddl}t	        d      5  t
        j                  j                         }ddd       |S # 1 sw Y   S xY w)z
    Checks if `mlu` is available via an `cndev-based` check which won't trigger the drivers and leave mlu
    uninitialized.
    	torch_mluNFr   rJ   )PYTORCH_CNDEV_BASED_MLU_CHECK)r   r   r   r   r	   r$   rl   rM   )check_devicer   rN   s      r   rk   rk   M  sY     ~~,4		= -II**,	- - s   AA$c                 F   t         j                  j                  d      yddl}| r=	 t        j
                  j                         }t        j
                  j                         S t        t        d      xr t        j
                  j                         S # t        $ r Y yw xY w)zSChecks if `torch_musa` is installed and potentially if a MUSA is in the environment
torch_musaNFr   musa)
r   r   r   r   r$   r   device_countrM   RuntimeErrorhasattr)r   r   r   s      r   is_musa_availabler   ^       ~~-5	

'')A::**,, 5&!?ejj&=&=&??  		   ;B 	B B c                 f   t         j                  j                  d      y	 ddl}| r=	 t
        j                  j                         }t
        j                  j                         S t        t
        d      xr t
        j                  j                         S # t        $ r Y yw xY w# t        $ r Y yw xY w)zQChecks if `torch_npu` is installed and potentially if a NPU is in the environment	torch_npuNFr   npu)r   r   r   r   r   r$   r   r   rM   r   r   )r   r   r   s      r   is_npu_availabler   p  s     ~~,4 			&&(A99))++ 5% =UYY%;%;%==    		s"   B ;B$ 	B! B!$	B0/B0c                 F   t         j                  j                  d      yddl}| r=	 t        j
                  j                         }t        j
                  j                         S t        t        d      xr t        j
                  j                         S # t        $ r Y yw xY w)zSChecks if `torch_sdaa` is installed and potentially if a SDAA is in the environment
torch_sdaaNFr   sdaa)
r   r   r   r   r$   r   r   rM   r   r   )r   r   r   s      r   is_sdaa_availabler     r   r   c                    t         j                  j                  d      t         j                  j                  d      yddl}| rddlmc mc m} t        t
        d      xr t
        j                  j                         S )zQChecks if `torch.hpu` is installed and potentially if a HPU is in the environmenthabana_frameworksNzhabana_frameworks.torchFr   hpu)r   r   r   habana_frameworks.torch(habana_frameworks.torch.distributed.hcclr$   r%   hcclr   r   rM   )	init_hcclr   r   s      r   r>   r>     s^     	  !45=>>##$=>F"??5% =UYY%;%;%==r    c                      t               r4dd lmc mc m}  | j                         | j                  j                  k(  ryy)Nr   TF)r>   *habana_frameworks.torch.utils.experimentalr$   utilsexperimental_get_device_typesynDeviceTypesynDeviceGaudi)htexps    r   rv   rv     s1    BB!!#u':':'I'IIr    c                    t        dd      ry| r=	 t        j                  j                         }t        j                  j	                         S t        t        d      xr t        j                  j	                         S # t
        $ r Y yw xY w)z~
    Checks if XPU acceleration is available via stock PyTorch (>=2.7) and
    potentially if a XPU is in the environment
    z<=z2.6Frn   )r   r$   rn   r   rM   r   r   )r   r   s     r   rm   rm     ss     e$			&&(A99))++ 5% =UYY%;%;%==  		s   ;A= =	B	B	c                 F   t         j                  j                  d      y| rA	 dd l}t        j
                  j                         }t        j
                  j                         S t        t        d      xr t        j
                  j                         S # t        $ r Y yw xY w)Ntorch_neuronxFr   neuron)
r   r   r   r
  r$   r  r   rM   r   r   )r   r
  r   s      r   is_neuron_availabler    s    ~~08	  ))+A<<,,.. 5(#C(A(A(CC  		s   ?B 	B B c                      t        d      S )Ndvcliver*   r   r    r   is_dvclive_availabler    r   r    c                      t        d      S )N	torchdatar*   r   r    r   is_torchdata_availabler    rc   r    c                      t        d      } | r?t        j                  t        j                  j                  d            }t        |dd      S y)Nr  r#   r   Fr]   )r   torchdata_versions     r   *is_torchdata_stateful_dataloader_availabler    sB    *;7N#MM)*<*<*D*D[*QR 14AAr    c                 .     t                fd       }|S )zc
    A decorator that ensures the decorated function is only called when torchao is available.
    c                  >    t               st        d       | i |S )Nze`torchao` is not available, please install it before calling this function via `pip install torchao`.)r_   ImportError)argskwargsfuncs     r   wrapperz!torchao_required.<locals>.wrapper  s+    #%w  T$V$$r    r   r  r  s   ` r   torchao_requiredr    s"    
 4[% % Nr    c                 .     t                fd       }|S )zc
    A decorator that ensures the decorated function is only called when deepspeed is enabled.
    c                      ddl m} ddlm} |j                  i k7  r) |       j
                  |j                  k7  rt        d       | i |S )Nr   )AcceleratorState)DistributedTypez|DeepSpeed is not enabled, please make sure that an `Accelerator` is configured for `deepspeed` before calling this function.)accelerate.stater"  accelerate.utils.dataclassesr#  _shared_statedistributed_type	DEEPSPEED
ValueError)r  r  r"  r#  r  s       r   r  z#deepspeed_required.<locals>.wrapper  sS    5@))R/4D4F4W4W[j[t[t4t0  T$V$$r    r  r  s   ` r   deepspeed_requiredr*    s"    
 4[	% 	% Nr    c                      t        dd      S re   rf   r   r    r   is_weights_only_availabler,    s     D'**r    c                 l    t        t        j                  j                  d            }t	        |d|       S )Nnumpyr#   )r   r   r   r   r   )r   numpy_versions     r   is_numpy_availabler0    s,    ),,44W=>MM4==r    r   )FF)F)z1.12)z1.25.0)^r   importlib.metadatar   r   r   	functoolsr   r   r$   	packagingr   packaging.versionr   environmentr   r	   r
   versionsr   r   r   rT   torch_xla.core.xla_modelcore	xla_modelxmtorch_xla.runtimerU   r  _tpu_availabler%   rM   r   r   boolr!   r'   r+   r/   r2   r6   r9   r?   rD   rG   rO   rZ   r_   rb   rg   rt   rw   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rk   r   r   r   r>   rv   rm   r  r  r  r  r  r*  r,  r0  r   r    r   <module>r>     s@     	 
  &   # L L 8 $OTB -- #
 &  %00==? 	( (1^+41Q/  ".+_
>0	1-))+Y*-,L*.),+/
w    @ @" > >, @ @" > >  > >& D D",.
"(+>]  s   E& &E/.E/