
    big                     J   d dl Z d dlZd dlmZ d dlZd dlmZ  G d de j                        Zdddej                  ej                  d	d
ddej                  ddej                  ddZdddddddddddddZ ej                  e      Zd ZdedefdZddZdedefdZd Zy)    N)Path)CustomArgumentParserc                       e Zd ZdZdZy)ConversionStatusr   N)__name__
__module____qualname__NOT_YET_IMPLEMENTEDREMOVED     W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/accelerate/commands/to_fsdp2.pyr   r      s    Gr   r   fsdp_versionfsdp_reshard_after_forwardfsdp_auto_wrap_policyfsdp_cpu_ram_efficient_loadingfsdp_offload_paramsfsdp_state_dict_type"fsdp_transformer_layer_cls_to_wrapfsdp_min_num_paramsfsdp_activation_checkpointing)r   r   r   fsdp_backward_prefetchfsdp_forward_prefetchr   r   fsdp_sharding_strategyr   fsdp_sync_module_statesr   r   fsdp_use_orig_paramsr   TF)
FULL_SHARDSHARD_GRAD_OPHYBRID_SHARDHYBRID_SHARD_ZERO2NO_SHARD)r   r   c                 T   t        | j                        j                         st        d| j                   d      | j                  s| j
                  t        d      | j                  s=t        | j
                        j                         rt        d| j
                   d      y y )NzConfig file z
 not foundz9If --overwrite is not set, --output_file must be providedzOutput file z* already exists and --overwrite is not set)r   config_fileexistsFileNotFoundError	overwriteoutput_file
ValueErrorFileExistsError)argss    r   _validate_to_fsdp2_argsr,   G   s      !((*,t/?/?.@
 KLL>>d..6TUU>>d4#3#34;;=T-=-=,>>hijj >>r   configreturnc                    | j                  di       }|st        j                  d       | S i }|j                  dd      dk(  r,t        j                  d       t        j                  d       | S |j	                         D ]  \  }}t
        j                  |d       }t        |t              s||}|||<   6|t        j                  k(  rt        j                  d| d	       c|t        j                  k(  rt        j                  d| d
       |t        j                  d| d       |||<   |t        v rt        |   j                  ||      }||t
        |   <    d|d<   || d<   | S )Nfsdp_configz?No FSDP config found in the config file, skipping conversion...r         z5Config already specfies FSDP2, skipping conversion...zaIf the config doesn't use new argument names, change `fsdp_version` to `1` and rerun the command.z	Argument z0 has been removed in FSDP2, skipping this key...z6 is not yet implemented in FSDP2, skipping this key...z- is not being converted, skipping this key...)getloggerinfowarningitemsARGUMENT_KEY_MAPPING
isinstancer   r   r   ARGUMENT_VALUE_MAPPING)r-   r0   new_fsdp_configkeyvalueconversion_statuss         r   convert_config_to_fsdp2r?   R   sx   **]B/KUVO~q)Q.NOo	
 !'') ?
U044S$?')9:>O>W #16O-. 0 8 88NNYse+[\] 0 D DDNNYse+abc$NNYse+XYZ#(OC ,,.s377uE9>O056+?. '(ON#+F=Mr   c                    d}| | j                  d|      }nt        |      }|j                  dt        dd       |j                  dd	d
d       |j                  dt        dd        | |j	                  t
               |S )Nz0Convert an Accelerate config from FSDP1 to FSDP2zto-fsdp2)descriptionz--config_filez#The config file to convert to FSDP2T)typehelprequiredz--overwrite
store_truez&Overwrite the config file if it existsF)actionrC   defaultz--output_filezThe path to the output file to write the converted config to. If not provided, the input file will be overwritten (if --overwrite is set))rB   rC   rG   )func)
add_parserr   add_argumentstrset_defaultsto_fsdp2_command)
subparsersrA   parsers      r   to_fsdp2_command_parserrP   ~   s    DK&&z{&K%+>
c8]hlm
5	    Y	   !12Mr   r$   c                     t        |       5 }t        j                  |      }d d d        st        d      |S # 1 sw Y   xY w)NzConfig file is empty)openyaml	safe_loadr)   )r$   fr-   s      r   load_configrV      sC    	k	 #a"#/00M# #s	   9Ac                 .   t        |        t        | j                        }| j                  r| j                  | j                  | _        t        |      }t        | j                  d      5 }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nw)	r,   rV   r$   r'   r(   r?   rR   rS   dump)r+   r-   
new_configrU   s       r   rM   rM      sy    D!))*F~~$**2++(0J	d	$ !		*a ! ! !s   +BB)N)enumloggingpathlibr   rS   accelerate.commands.utilsr   Enumr   r   r   r8   r:   	getLoggerr   r4   r,   dictr?   rP   rK   rV   rM   r   r   r   <module>rb      s   "     :tyy  #"> 5.66-AA&F0:2/77*N0,44%D# , # ## " 
		8	$k)D )T )X6S T 
!r   