U
    0-e%                     @   s$  d dl 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
Z
ddlmZmZmZ ddlmZmZmZ ejedejed	d
dZejedZejedZejedZejesejeseZneZdd ZeG dd dZeG dd deZeG dd deZ dS )    N)	dataclass)Enum)ListOptionalUnion   )ComputeEnvironmentDistributedTypeSageMakerDistributedType)SAGEMAKER_PYTHON_VERSIONSAGEMAKER_PYTORCH_VERSIONSAGEMAKER_TRANSFORMERS_VERSIONZHF_HOMEXDG_CACHE_HOMEz~/.cacheZhuggingfaceZ
acceleratezdefault_config.yamlc              
   C   s   | d k	r&t j| s*td|  dnt} t| ddd}| drt|	dt
jt
jkrdt}nt}|j| dW  5 Q R  S t|	dt
jt
jkrt}nt}|j| d	W  5 Q R  S W 5 Q R X d S )
NzThe passed configuration file `z` does not exist. Please pass an existing file to `accelerate launch`, or use the the default one created through `accelerate config` and run `accelerate launch` without the `--config_file` argument.rutf-8encodingz.jsoncompute_environment)	json_file)	yaml_file)ospathisfileFileNotFoundErrordefault_config_fileopenendswithjsonloadgetr   LOCAL_MACHINEClusterConfigSageMakerConfigfrom_json_fileyaml	safe_loadfrom_yaml_file)config_filefZconfig_class r)   g/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/accelerate/commands/config/config_args.pyload_config_from_file+   s,    

r+   c                   @   sz   e Zd ZU eed< eeef ed< eed< e	ed< e	ed< dd Z
edd	d
Zdd ZedddZdd Zdd ZdS )
BaseConfigr   distributed_typemixed_precisionuse_cpudebugc                 C   s\   | j }| D ]6\}}t|tr*|j||< t|trt|sd ||< qdd | D }|S )Nc                 S   s   i | ]\}}|d k	r||qS Nr)   ).0kvr)   r)   r*   
<dictcomp>[   s       z&BaseConfig.to_dict.<locals>.<dictcomp>)__dict__items
isinstancer   valuedictbool)selfresultkeyr9   r)   r)   r*   to_dictS   s    


zBaseConfig.to_dictNc              	   C   s  |d krt n|}t|ddd}t|}W 5 Q R X d|krFtj|d< d|krjd|krb|d rbdnd |d< d|krx|d= d|kr|d}|dkri nd|i|d	< d
|krd|d
< d|krd|d< tt|	 t| j
	  }t|dkrtd| d| d| f |S )Nr   r   r   r   r.   fp16dynamo_backendNOdynamo_configr/   Fr0   r   The config file at  had unknown keys (s), please try upgrading your `accelerate` version or fix (and potentially remove) these keys from your config file.)default_json_config_filer   r   r   r   r    popsortedsetkeys__dataclass_fields__len
ValueError)clsr   r(   config_dictrA   
extra_keysr)   r)   r*   r#   ^   s,    

zBaseConfig.from_json_filec              	   C   s@   t |ddd(}tj|  dddd }|| W 5 Q R X d S )Nwr   r      T)indent	sort_keys
)r   r   dumpsr?   write)r<   r   r(   contentr)   r)   r*   to_json_filey   s    zBaseConfig.to_json_filec              	   C   s,  |d krt n|}t|ddd}t|}W 5 Q R X d|krFtj|d< d|krjd|krb|d rbdnd |d< t|d tr|d sd|d< d|kr|d= d|kr|d}|d	kri nd|i|d
< d|krd|d< d|krd|d< t	t
| t
| j  }t|dkr"td| d| d| f |S )Nr   r   r   r   r.   r@   norA   rB   rC   r/   Fr0   r   rD   rE   rF   )default_yaml_config_filer   r$   r%   r   r    r8   r;   rH   rI   rJ   rK   rL   rM   rN   )rO   r   r(   rP   rA   rQ   r)   r)   r*   r&   ~   s0    

zBaseConfig.from_yaml_filec              	   C   s.   t |ddd}t|  | W 5 Q R X d S )NrR   r   r   )r   r$   Z	safe_dumpr?   )r<   r   r(   r)   r)   r*   to_yaml_file   s    zBaseConfig.to_yaml_filec                 C   s^   t | jtrt| j| _t | jtrJ| jtjkr>t| j| _nt| j| _| jd krZi | _d S r1   )	r8   r   strr   r-   ZAMAZON_SAGEMAKERr
   r	   rC   r<   r)   r)   r*   __post_init__   s    
zBaseConfig.__post_init__)N)N)__name__
__module____qualname__r   __annotations__r   r	   r
   r^   r;   r?   classmethodr#   rZ   r&   r]   r`   r)   r)   r)   r*   r,   K   s   
r,   c                       sN  e Zd ZU eed< dZeed< dZeed< dZee	 ed< dZ
ee	 ed< dZee ed	< d
Zee	 ed< dZee ed< dZe	ed< dZeed< dZeed< dZeed< dZeed< dZeed< dZe	ed< dZe	ed< dZeed< dZeed< dZe	ed< dZee	 ed< dZee	 ed< dZee	 ed< dZeed<  fddZ   Z!S ) r!   Znum_processesr   machine_rank   num_machinesNgpu_idsmain_process_ipmain_process_portZstaticrdzv_backendFsame_networkmainmain_training_functiondeepspeed_configfsdp_configmegatron_lm_configipex_configdowncast_bf16tpu_nametpu_zonetpu_use_clustertpu_use_sudocommand_filecommandstpu_vmtpu_envrC   c                    sJ   | j d kri | _ | jd kr i | _| jd kr0i | _| jd kr@i | _t  S r1   )rp   rq   rr   rs   superr`   r_   	__class__r)   r*   r`      s    



zClusterConfig.__post_init__)"ra   rb   rc   intrd   rf   rh   ri   r   r^   rj   rk   rl   rm   r;   ro   rp   r:   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r   r{   r|   rC   r`   __classcell__r)   r)   r~   r*   r!      s0   
r!   c                   @   s   e Zd ZU eed< eed< dZee ed< dZee ed< dZeed< dZ	e
ed	< d
Zeed< de	 Zeed< eZeed< eZeed< eZeed< dZeed< dZeed< dZeed< dZeed< dS )r"   Zec2_instance_typeZiam_role_nameN	image_uriprofilez	us-east-1regionrg   rh   allri   zaccelerate-sagemaker-base_job_namepytorch_versiontransformers_version
py_versionsagemaker_inputs_filesagemaker_metrics_fileadditional_argsrC   )ra   rb   rc   r^   rd   r   r   r   r   rh   r   ri   r   r   r   r   r   r   r   r   r   r   r:   rC   r)   r)   r)   r*   r"      s   
r"   )!r   r   dataclassesr   enumr   typingr   r   r   r$   utilsr   r	   r
   Zutils.constantsr   r   r   r   
expandusergetenvjoinZhf_cache_home	cache_dirrG   r\   r   r   r+   r,   r!   r"   r)   r)   r)   r*   <module>   s.    ^/