
    sg                         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mZmZ  ej                  e      Zd Z e       rd dlmc mZ  ej,                          e G d de
             Zy)	    N)	dataclassfield   )TrainingArguments)cached_propertyis_sagemaker_dp_enabledloggingc                     t        j                  dd      } 	 t        j                  |       } d| vry	 t        j                  dd      }	 t        j                  |      }|j                  dd      sy	 t        j                  j                  d      d uS # t        j                  $ r Y yw xY w# t        j                  $ r Y yw xY w)NSM_HP_MP_PARAMETERSz{}
partitionsFSM_FRAMEWORK_PARAMSsagemaker_mpi_enabledsmdistributed)	osgetenvjsonloadsJSONDecodeErrorget	importlibutil	find_spec)smp_optionsmpi_optionss     Z/var/www/html/venv/lib/python3.12/site-packages/transformers/sagemaker/training_args_sm.py%is_sagemaker_model_parallel_availabler       s    ))148Kjj-{* + ))148Kjj-6> ?
 >>##O4D@@    s#   B 
'B- B*)B*-CCc                        e Zd ZU  edddi      Zeed<    fdZedd       Z	e
 fd       Ze
d	        Ze
d
        Z xZS )SageMakerTrainingArguments helpzTUsed by the SageMaker launcher to send mp-specific args. Ignored in SageMakerTrainer)defaultmetadatamp_parametersc                 V    t         |           t        j                  dt               y )Nz~`SageMakerTrainingArguments` is deprecated and will be removed in v5 of Transformers. You can use `TrainingArguments` instead.)super__post_init__warningswarnFutureWarningself	__class__s    r   r&   z(SageMakerTrainingArguments.__post_init__E   s"    +	
    c                    t         j                  d       t        j                  j	                         rBt        j                  j                         r$| j                  dk(  rt         j                  d       | j                  rt        j                  d      }d| _
        nt               r3t        j                         }t        j                  d|      }d| _
        n\t               rzdd l}t        j                  j                  d| j                   	       t#        t%        j&                  d
            | _        t        j                  d| j                        }d| _
        n| j                  dk(  rYt        j                  t        j(                  j	                         rdnd      }t        j(                  j+                         | _
        npt        j                  j                         s+t        j                  j                  d| j                   	       t        j                  d| j                        }d| _
        |j,                  dk(  rt        j(                  j/                  |       |S )NzPyTorch: setting up devicesztorch.distributed process group is initialized, but local_rank == -1. In order to use Torch DDP, launch your script with `python -m torch.distributed.launchcpur   cuda   smddp)backendtimeoutSMDATAPARALLEL_LOCAL_RANKzcuda:0nccl)loggerinfotorchdistributedis_availableis_initialized
local_rankwarningno_cudadevice_n_gpur   smpr   ,smdistributed.dataparallel.torch.torch_smddpinit_process_groupddp_timeout_deltaintr   r   r1   device_counttype
set_device)r+   rA   r>   r   s       r   _setup_devicesz)SageMakerTrainingArguments._setup_devicesM   s   12))+0A0A0P0P0RW[WfWfjlWlNNi <<\\%(FDK24)J\\&*5FDK$&?00$J`J`0a!")),G"HIDO\\&$//:FDK__" \\ejj.E.E.G(USF  **113DK $$335!!44VTMcMc4d\\&$//:FDK;;& JJ!!&)r-   c                 T    t               rt        j                         S t        |   S N)r   rC   dp_sizer%   
world_sizer*   s    r   rO   z%SageMakerTrainingArguments.world_size{   s     02;;= w!!r-   c                     t                S rM   )r   r+   s    r   place_model_on_devicez0SageMakerTrainingArguments.place_model_on_device   s    8:::r-   c                      y)NF rQ   s    r   !_no_sync_in_gradient_accumulationz<SageMakerTrainingArguments._no_sync_in_gradient_accumulation   s    r-   )returnztorch.device)__name__
__module____qualname__r   r#   str__annotations__r&   r   rK   propertyrO   rR   rU   __classcell__)r,   s   @r   r   r   >   sv    pqM3 

 + +Z " " ; ;  r-   r   )importlib.utilr   r   r   r'   dataclassesr   r   r:   training_argsr   utilsr   r   r	   
get_loggerrW   r8   r   !smdistributed.modelparallel.torchmodelparallelrC   initr   rT   r-   r   <module>rf      st      	  (  - E E 
		H	%
A0 )*33CHHJ I!2 I Ir-   