
    9i\_                     <   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 d dl
Z
ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZ d	d
lmZmZ g fdZde j8                  de	ee   eeef   f   fdZde j8                  deeef   fdZde j8                  de	ee   eeef   f   fdZ 	 dde j8                  deeef   de!de	e j8                  eeef   f   fdZ"dee   deeef   fdZ#dede j8                  de	e j8                  eeef   f   fdZ$d Z% G d d      Z&y)    N)literal_eval)AnyDictListTuple   )SageMakerConfig)DynamoBackendPrecisionTypeis_ipex_availableis_npu_availableis_xpu_available)DEEPSPEED_MULTINODE_LAUNCHERS)is_port_in_usemerge_dicts   )DistributedTypeSageMakerDistributedTypec                     |j                  |      \  }}t        |       j                         D ].  \  }}|t        |      j                         v s"t	        |||       0 |S )z4
    Filters out all `accelerate` specific args
    )parse_known_argsvarsitemskeyssetattr)argsparserdefault_argsnew_args_keyvalues          a/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/accelerate/utils/launch.py_filter_argsr#   $   s`     )),7KHa4j&&( *
U$x.%%''Hc5)* O    r   returnc                    g }| j                   r| j                  rt        d      | j                   s<|j                  t        j
                         | j                  r|j                  d       |j                  | j                         |j                  | j                         t        j                  j                         }t        | j                  xs | j                        |d<   | j                  rd|d<   | j                   dk7  rO| j                   Ct#               r| j                   |d<   n)t%               r| j                   |d<   n| j                   |d	<   | j&                  d
kD  r(| j(                  |d<   t        | j*                        |d<   nR| j,                  d
kD  rC| j(                  | j(                  nd|d<   | j*                  t        | j*                        nd|d<   	 t/        | j0                  j3                               }t        |      |d<   	 t7        | j8                  j;                               }|j<                  |d<   | j>                  |d<   t        | j@                        |d<   t        | jB                        |d<   t        | jD                        |d<   tG               rLt        | jH                        j3                         |d<   t        | jJ                        j3                         |d<   ||fS # t        $ r= t        d| j0                  j3                          dt/        j4                          d      w xY w# t        $ r= t        d| j8                  j;                          dt7        j4                          d      w xY w)zz
    Prepares and returns the command list and an environment with the correct simple launcher environment variables.
    0--module and --no_python cannot be used togetherz-mACCELERATE_USE_CPUtrueACCELERATE_DEBUG_MODEallZE_AFFINITY_MASKASCEND_RT_VISIBLE_DEVICESCUDA_VISIBLE_DEVICESr   MASTER_ADDRMASTER_PORTz	127.0.0.129500Unknown mixed_precision mode: . Choose between .ACCELERATE_MIXED_PRECISIONUnknown dynamo backend: ACCELERATE_DYNAMO_BACKENDACCELERATE_DYNAMO_MODEACCELERATE_DYNAMO_USE_FULLGRAPHACCELERATE_DYNAMO_USE_DYNAMICOMP_NUM_THREADSACCELERATE_USE_IPEXACCELERATE_USE_XPU)&	no_pythonmodule
ValueErrorappendsys
executabletraining_scriptextendtraining_script_argsosenvironcopystrcpuuse_cpudebuggpu_idsr   r   num_machinesmain_process_ipmain_process_portnum_processesr   mixed_precisionlowerlistr
   dynamo_backendupperr!   dynamo_modedynamo_use_fullgraphdynamo_use_dynamicnum_cpu_threads_per_processr   ipexuse_xpu)r   cmdcurrent_envrS   rV   s        r"   prepare_simple_launcher_cmd_envr`   /   s    C~~$++KLL>>

3>>";;JJtJJt##$JJt(()**//#K(+DHH,D(EK$%zz/5+,||u!9.2llK*+7;||K3426,,K./1%)%9%9M"%()?)?%@M"			a	=A=Q=Q=]T%9%9cnM"DHDZDZDfS)?)?%@lsM"
'(<(<(B(B(DE 14O0DK,-
&t':':'@'@'BC
 0>/C/CK+,,0,<,<K()589R9R5SK1236t7N7N3OK/0%()I)I%JK!"-0^-A-A-C)*,/,=,C,C,E()-  
,T-A-A-G-G-I,JJ[\i\n\n\p[qqrs
 	

  
&t':':'@'@'B&CCTUbUgUgUiTjjkl
 	

s   !#K6 #L? 6AL<?ANc                    t        | d      }t        | d      }t        | d      }t        | d      }|dkD  rt        | dt        ||z               t        | dt        |             t        | dt        | j                               t        | d	d
      r-t        | dt        |             t        | dt        |             nAt        | d| d|        n.t        | dt        |             |t        | dt        |             |d}t        |      rt        d| d      | j                  r| j                  rt        d      | j                  rt        | dd       n| j                  rt        | dd       t        j                  j                         }| j                  rd|d<   t        | dd      }|dk7  r1| j                  %t               r||d<   nt!               r||d<   n||d<   | j"                  j%                         }	 t'        |      }t        |      |d <   	 t+        | j,                  j/                               }|j0                  |d"<   | j2                  |d#<   t        | j4                        |d$<   t        | j6                        |d%<   | j8                  rd|d&<   | j:                  r| j<                  st        d'      t        | j>                        |d(<   t        | j@                        j%                         |d)<   t        | jB                        |d*<   | jD                  t        | jD                        |d+<   | jF                  t        | jF                        |d,<   | jH                  t        | jH                        |d-<   | jJ                  t        | jJ                        |d.<   t        | jL                        j%                         |d/<   t        | jN                        j%                         |d0<   t        | j:                        j%                         |d1<   t        | j<                        j%                         |d2<   | jP                  rd3}	d|d4<   t        | jR                        ||	d5z   <   t        | jT                        ||	d6z   <   t        | jV                        ||	d7z   <   | jX                  t        | jX                        ||	d8z   <   | jZ                  t        | jZ                        ||	d9z   <   | j\                  t        | j\                        ||	d:z   <   | j^                  t        | j^                        ||	d;z   <   t        | j`                        |d<<   |S # t        $ r% t        d| dt'        j(                          d      w xY w# t        $ r= t        d!| j,                  j/                          dt+        j(                          d      w xY w)=z_
    Prepares and returns an environment with the correct multi-GPU environment variables.
    rR   rO   rP   rQ   r   nproc_per_nodennodes	node_ranksame_networkFmaster_addrmaster_portrdzv_endpoint:<s  3Tried to launch distributed communication on port `&  `, but another process is utilizing it. Please specify a different port (such as using the `----main_process_port` flag or specifying a different `main_process_port` in your config file) and rerun your script. To automatically use the next open port (on a single node), you can set this to `0`.r'   r?   Tr>   r)   r*   rN   r+   r,   r-   r.   r2   r3   r4   r5   r6   r7   r8   r9   r:   ACCELERATE_USE_FSDPzWWhen using `--fsdp_cpu_ram_efficient_loading` set `--fsdp_sync_module_states` to `True`FSDP_SHARDING_STRATEGYFSDP_OFFLOAD_PARAMSFSDP_MIN_NUM_PARAMSFSDP_AUTO_WRAP_POLICYFSDP_TRANSFORMER_CLS_TO_WRAPFSDP_BACKWARD_PREFETCHFSDP_STATE_DICT_TYPEFSDP_FORWARD_PREFETCHFSDP_USE_ORIG_PARAMSFSDP_CPU_RAM_EFFICIENT_LOADINGFSDP_SYNC_MODULE_STATESMEGATRON_LM_ACCELERATE_USE_MEGATRON_LM	TP_DEGREE	PP_DEGREEGRADIENT_CLIPPINGNUM_MICRO_BATCHESSEQUENCE_PARALLELISMRECOMPUTE_ACTIVATIONSUSE_DISTRIBUTED_OPTIMIZERr;   )1getattrr   rJ   intmachine_rankr   ConnectionErrorr?   r>   r@   rG   rH   rI   rM   rN   r   r   rS   rT   r   rU   r
   rV   rW   r!   rX   rY   rZ   use_fsdpfsdp_cpu_ram_efficient_loadingfsdp_sync_module_statesfsdp_sharding_strategyfsdp_offload_paramsfsdp_min_num_paramsfsdp_auto_wrap_policy"fsdp_transformer_layer_cls_to_wrapfsdp_backward_prefetch_policyfsdp_state_dict_typefsdp_forward_prefetchfsdp_use_orig_paramsuse_megatron_lmmegatron_lm_tp_degreemegatron_lm_pp_degreemegatron_lm_gradient_clippingmegatron_lm_num_micro_batches megatron_lm_sequence_parallelism!megatron_lm_recompute_activations%megatron_lm_use_distributed_optimizerr[   )
r   rR   rO   rP   rQ   r_   rN   rS   rV   prefixs
             r"   prepare_multi_gpu_envr   j   s    D/2M40Ld$56O&9:a&M\,I(JKhL 12k3t'8'8#9:4/D-_)=>D-->)?@D/o->a@Q?R+ST&M(:;(D-->)?@ !'(ABSAT U{ {
 	
 {{t~~KLL	h%	k4(**//#Kzz/5+,dIu-G%DLL4.5K*+7>K3429K./**002Ou'8 14O0DK,-
&t':':'@'@'BC
 0>/C/CK+,,0,<,<K()589R9R5SK1236t7N7N3OK/0}}-3)*..t7S7Svww03D4O4O0P,--01I1I-J-P-P-R)*-01I1I-J)*%%136t7Q7Q3RK/022>:=d>e>e:fK67--9478Z8Z4[K01$$025d6O6O2PK.//243M3M/N/T/T/V+,.1$2K2K.L.R.R.T*+8;D<_<_8`8f8f8h4514T5Q5Q1R1X1X1Z-.4:01,/0J0J,KF[(),/0J0J,KF[()478Z8Z4[F001--98;D<^<^8_K!44500<;>t?d?d;eK!77811=<?@f@f<gK!88955A@CDDnDn@oK!<<=%()I)I%JK!"k  u9/9JJ[\i\n\n\p[qqrsttu  
&t':':'@'@'B&CCTUbUgUgUiTjjkl
 	

s   U #V
 .V
AWc                    t        | d      }t        | d      }t        | d      }t        | d      }d}| j                  t        | dt        d          |dkD  r| j                  t        d   k7  rd	d
g}|j	                  dt        | j                        dt        | j                        g       | j                  '|j	                  dt        | j                        g       nf| j                  '|j	                  dt        | j                        g       n3|j	                  dt        | j                  | j                  z        g       |j	                  dt        |      g       | j                  r| j                  rt        d      | j                  r|j                  d       n| j                  r|j                  d       |j                  | j                         |j	                  | j                          n|dkD  r| j                  t        d   k(  rt        | dt        ||z               t        | dt        |             t        | dt#        | j$                               t        | dd      r-t        | dt        |             t        | dt        |             nAt        | d| d|        n.t        | dt        |             |t        | dt        |             |d}t'        |      rt)        d| d      | j                  r| j                  rt        d      | j                  rt        | d d!       n| j                  rt        | d"d!       t*        j,                  j/                         }| j0                  rd#|d$<   t        | d%d&      }|d&k7  r!| j2                  t5               s||d'<   n||d(<   	 t7        | j8                  j;                               }t?        d,t*        j@                  jC                  d+            |d,<   t        |      |d-<   t        | jD                        j;                         |d.<   d#|d/<   | jF                  t        | jF                        |d0<   | jH                  t        | jH                        |d1<   | jJ                  &t        | jJ                        j;                         |d2<   | jL                  &t        | jL                        j;                         |d3<   | jN                  &t        | jN                        j;                         |d4<   | jP                  &t        | jP                        j;                         |d5<   | jR                  &t        | jR                        j;                         |d6<   | jT                  t        | jT                        |d7<   ||fS # t        $ r= t        d)| j8                  j;                          d*t7        j<                          d+      w xY w)8zt
    Prepares and returns the command list and an environment with the correct DeepSpeed environment variables.
    rR   rO   rP   rQ   Ndeepspeed_multinode_launcherr   r   	deepspeedz--no_local_rankz
--hostfilez
--launcherz	--excludez	--includez
--num_gpusz--master_portr'   z--modulez--no_pythonrb   rc   rd   re   Frf   rg   rh   ri   rj   rk   rl   r?   Tr>   r)   r*   rN   r+   r.   r,   r2   r3   r4   
PYTHONPATHr5   ACCELERATE_CONFIG_DS_FIELDSACCELERATE_USE_DEEPSPEEDACCELERATE_DEEPSPEED_ZERO_STAGE&ACCELERATE_GRADIENT_ACCUMULATION_STEPSACCELERATE_GRADIENT_CLIPPING-ACCELERATE_DEEPSPEED_OFFLOAD_OPTIMIZER_DEVICE)ACCELERATE_DEEPSPEED_OFFLOAD_PARAM_DEVICEACCELERATE_DEEPSPEED_ZERO3_INIT+ACCELERATE_DEEPSPEED_ZERO3_SAVE_16BIT_MODEL ACCELERATE_DEEPSPEED_CONFIG_FILE)+r   r   r   r   rE   rJ   deepspeed_hostfiledeepspeed_exclusion_filterdeepspeed_inclusion_filterrR   rO   r?   r>   r@   rA   rD   rF   r   r   r   r   rG   rH   rI   rM   rN   r   r   rS   rT   rU   env_var_path_addpathabspath'deepspeed_fields_from_accelerate_config
zero_stagegradient_accumulation_stepsgradient_clippingoffload_optimizer_deviceoffload_param_devicezero3_init_flagzero3_save_16bit_modeldeepspeed_config_file)	r   rR   rO   rP   rQ   r^   r_   rN   rS   s	            r"   prepare_deepspeed_cmd_envr      s_    D/2M40Ld$56O&9:
C ((046STU6VWaD==A^_`Aaa-.

L#d&=&=">cRVRsRsNtuv**6JJ778 ,,8JJ778 JJc$*<*<@Q@Q*Q&RST

OS):%;<=;;4>>OPP[[JJz"^^JJ}%

4''(

4,,-		d??C`abCcc&M\,I(JKhL 12k3t'8'8#9:4/D-_)=>D-->)?@D/o->a@Q?R+ST&M(:;(D-->)?@ !'(ABSAT U{ {
 	
 {{t~~KLL	h%	k4(**//#Kzz/5+,dIu-G%DLL4!29K./.5K*+
'(<(<(B(B(DE !1rwws?S TK03O0DK,-14T5a5a1b1h1h1jK-..4K*+"9<T__9M56''3@CDDdDd@e<=)69$:P:P6Q6W6W6Y23$$0GJ4KhKhGiGoGoGqCD  ,CFtG`G`CaCgCgCi?@'9<T=Q=Q9R9X9X9Z56"".EHIdIdEeEkEkEmAB!!-:=d>X>X:Y673  
,T-A-A-G-G-I,JJ[\i\n\n\p[qqrs
 	

s   5#V' 'AW-r_   podc                     | j                   dk(  r| j                  rd|d<   nd|d<   | j                  rd|d<   |r"| j                  | _        | j
                  | _        | |fS )zY
    Prepares and returns an environment with the correct TPU environment variables.
    bf161XLA_DOWNCAST_BF16XLA_USE_BF16r)   r*   )rS   downcast_bf16rM   tpu_vmvmtpu_nametpu)r   r_   r   s      r"   prepare_tpur   H  sf     v%/2K+,*-K'zz/5+,
++==r$   nargsc                 8   t        |       dk  ri S d }t        j                         }|j                  |       \  }}t	        |      D ]  \  }}|j                  d      sd }|dz   t        |      k  r"||dz      j                  d      rt        d      t        d      ||j                  ||       n|j                  ||        |j                  |       j                  j                         D 	ci c]  \  }}	||	dv rt        |	      n|	 c}	}S c c}	}w )	Nr   c                 f    	 t        |       } | dz  | k(  rt        |       S | S # t        $ r | cY S w xY w)Nr   )floatr   r@   )ss    r"   _infer_typez+_convert_nargs_to_dict.<locals>._infer_typea  s=    	aAAv{1vH 	H	s   " " 00)-z--r   ul   SageMaker doesn’t support argparse actions for `store_true` or `store_false`. Please define explicit types)type)action)TrueFalse)lenargparseArgumentParserr   	enumerate
startswithr@   add_argument
parse_args__dict__r   r   )
r   r   r   r   unknownindexargumentr   r    r!   s
             r"   _convert_nargs_to_dictr   \  s6   
5zA~	 $$&F((/JAw$W- =x{+Fqy3w<'519%00=$ G  ! C  ~##H;#?##HV#<#=* !++E2;;AACC 	U.?%?l5!UJ  s   6Dsagemaker_configc                 2	   t        d       | j                  t        j                  d<   | j                  | j                  t        j                  d<   n^|j
                  G|j                  ;|j
                  t        j                  d<   |j                  t        j                  d<   nt        d      t        j                  j                  |j                        }|sd}t        j                  j                  |j                        }|j                  d      st        d	| d
      t        d       t        |j                        }	 t!        |j"                  j%                               }	 t)        |j*                  j-                               }dt/        |      |j0                  |j2                  t/        |j4                        t/        |j6                        | j8                  j0                  d}d }| j8                  t:        j<                  k(  rddddiii}d }	| j>                  t        d| j>                   d       i }	tA        | j>                        5 }
tC        |
      D ]5  \  }}|dk(  r|jE                  d      }|d   jG                         |	|d   <   7 	 d d d        t        d|	        d }| jH                  t        d| jH                   d       g }tA        | jH                        5 }
tC        |
      D ]F  \  }}|dk(  r|jE                  d      }|d   |d   jG                         d}|jK                  |       H 	 d d d        t        d|        t        d       | jL                  ||| jN                  | jP                  | jR                  | jT                  | jV                  | jX                  | jZ                  d||||d }| j\                  t_        | j\                  |      }||	fS # t        $ r= t        d|j"                  j%                          dt!        j&                          d      w xY w# t        $ r= t        d|j*                  j-                          dt)        j&                          d      w xY w# 1 sw Y   xY w# 1 sw Y   JxY w)!Nz(Configuring Amazon SageMaker environmentAWS_DEFAULT_REGIONAWS_PROFILEAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYz]You need to provide an aws_access_key_id and aws_secret_access_key when not using aws_profiler4   z.pyz8Your training script should be a python script and not ""z'Converting Arguments to Hyperparametersr2   r3   r6   r)   )ACCELERATE_USE_SAGEMAKERr5   r7   r8   r9   r:   %ACCELERATE_SAGEMAKER_DISTRIBUTED_TYPEsmdistributeddataparallelenabledTzLoading SageMaker Inputs from z filer   	r   zLoaded SageMaker Inputs: zLoading SageMaker Metrics from )NameRegexzLoaded SageMaker Metrics: zCreating EstimatorF)	image_urientry_point
source_dirroletransformers_versionpytorch_version
py_versionbase_job_nameinstance_countinstance_typedebugger_hook_configdistributionhyperparametersenvironmentmetric_definitions)0printregionrG   rH   profileaws_access_key_idaws_secret_access_keyEnvironmentErrorr   dirnamerD   basenameendswithr@   r   rF   r   rS   rT   rU   r
   rV   rW   rJ   r!   rX   rY   rZ   distributed_typer   DATA_PARALLELsagemaker_inputs_fileopenr   splitstripsagemaker_metrics_filerA   r   iam_role_namer   r   r   r   rO   ec2_instance_typeadditional_argsr   )r   r   r   r   r   rS   rV   r   r   sagemaker_inputsfileilinelsagemaker_metricsmetric_dicts                   r"   prepare_sagemager_args_inputsr    s    

45'7'>'>BJJ#$ +$4$<$<

=!				+0J0J0V*.*@*@

&'.2.H.H

*+k
 	

 !5!56J
''""4#7#78K&ST_S``abcc	
34,T-F-FGO
'(<(<(B(B(DE
&t':':'@'@'BC %+&)/&:%3%9%9"&"2"2+.t/H/H+I),T-D-D)E1A1R1R1X1XK L((,D,R,RR'.9d:K)LM --9./?/U/U.VV[\]"889 	6T$T? 646JJt$)*1 1&	6	6 	)*:);<= ..:/0@0W0W/XX]^_"99: 		6d$T? 646JJt$aDqTZZ\ "((56		6 	*+<*=>? 

%//"  .. 0 E E+;;&11)77*77);; %$*"/D$ ''3+;;TB!!!_  
,T-A-A-G-G-I,JJ[\i\n\n\p[qqrs
 	

  
&t':':'@'@'B&CCTUbUgUgUiTjjkl
 	

2	6 	6		6 		6s4   #O- ,#P6 AQ?.AR-AP36AQ<?R	Rc                     t         j                  j                  | d      j                  d      D cg c]  }t	        |      dkD  s| }}|j                  t        |             dj                  |      S c c}w )z
    Extends a path-based environment variable's value with a new path and returns the updated value. It's up to the
    caller to set it in os.environ.
     ri   r   )rG   rH   getr  r   rA   rJ   join)env_var_namepath_to_addppathss       r"   r   r     sa    
 

|R8>>sCR1s1vPQzQRER	LL[!"88E? Ss   A7A7c                       e Zd ZdZddZd Zy)PrepareForLaunchai  
    Prepare a function that will launched in a distributed setup.

    Args:
        launcher (`Callable`):
            The function to launch.
        distributed_type ([`~state.DistributedType`]):
            The distributed type to prepare for.
        debug (`bool`, *optional*, defaults to `False`):
            Whether or not this is a debug launch.
    c                 @    || _         t        |      | _        || _        y )N)launcherr   r  rM   )selfr!  r  rM   s       r"   __init__zPrepareForLaunch.__init__  s      /0@ A
r$   c                 8   | j                   rt        t        j                  j	                  d            }t        j                  j	                  d      }t
        j                  j                  d|t
        j                  j                  ||      |       n| j                  t        j                  t        j                  t        j                  t        j                  fv rt        |      t        j                  d<   t        t        j                  j	                  dd            }t        t        j                  j	                  dd	            }t        ||z  |z         t        j                  d
<   t        d      t        j                  d<    | j                   |  y )N
WORLD_SIZEACCELERATE_DEBUG_RDV_FILEgloo)rankstore
world_size
LOCAL_RANKNPROCr   	NODE_RANKr   RANKFORK_LAUNCHED)rM   r   rG   rH   r  torchdistributedinit_process_group	FileStorer  r   	MULTI_GPU	MULTI_NPU	MULTI_XPU	MULTI_CPUrJ   r!  )r"  r   r   r*  rdv_filenprocrd   s          r"   __call__zPrepareForLaunch.__call__  s'   ::RZZ^^L9:Jzz~~&ABH00''11(JG%	 1  ""%%%%%%%%	'
 
 (+5zBJJ|$

w23EBJJNN;:;I!$UY%6%>!?BJJv&)!f

?#tr$   N)NOF)__name__
__module____qualname____doc__r#  r:   r$   r"   r  r    s    

r$   r  )F)'r   rG   rB   astr   typingr   r   r   r   r0  commands.config.config_argsr	   utilsr
   r   r   r   r   utils.constantsr   utils.otherr   r   dataclassesr   r   r#   	NamespacerJ   r`   r   r   boolr   r   r  r   r  r@  r$   r"   <module>rJ     s    	 
  ) )  9  < 5 B -/ 8(*<*< 8tCyRVWZ\_W_R`G`Aa 8vj 2 2 jtCH~ jZnH$6$6 n5cDQTVYQYNAZ;[ nd HM


+/S>@D
8tCH~-.('$s) 'S#X 'Tn"%n"-5-?-?n"
8tCH~-.n"b) )r$   