a
    d!                     @   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 u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  d    S t|	dt
jt
jkrt}nt}|j| d	W  d    S W d    n1 s0    Y  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)   o/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/accelerate/commands/config/config_args.pyload_config_from_file+   s,    

r+   c                   @   sr   e Zd ZU eed< eeef 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_cpuc                 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 ur||qS Nr)   ).0kvr)   r)   r*   
<dictcomp>Z       z&BaseConfig.to_dict.<locals>.<dictcomp>)__dict__items
isinstancer   valuedictbool)selfresultkeyr9   r)   r)   r*   to_dictR   s    


zBaseConfig.to_dictNc                 C   s   |d u rt n|}t|ddd}t|}W d    n1 s>0    Y  d|vrZtj|d< d|vr~d|v rv|d rvdnd |d< d|v r|d= d|v r|d}|dkri nd|i|d	< d
|vrd|d
< | f i |S )Nr   r   r   r   r.   fp16dynamo_backendNOdynamo_configr/   F)default_json_config_filer   r   r   r   r    pop)clsr   r(   config_dictrA   r)   r)   r*   r#   ]   s    (

zBaseConfig.from_json_filec                 C   sT   t |ddd2}tj|  dddd }|| W d    n1 sF0    Y  d S )Nwr   r      T)indent	sort_keys
)r   r   dumpsr?   write)r<   r   r(   contentr)   r)   r*   to_json_fileo   s    zBaseConfig.to_json_filec                 C   s   |d u rt n|}t|ddd}t|}W d    n1 s>0    Y  d|vrZtj|d< d|vr~d|v rv|d rvdnd |d< t|d tr|d sd|d< d|v r|d= d|v r|d}|d	kri nd|i|d
< d|vrd|d< | f i |S )Nr   r   r   r   r.   r@   norA   rB   rC   r/   F)	default_yaml_config_filer   r$   r%   r   r    r8   r;   rE   )rF   r   r(   rG   rA   r)   r)   r*   r&   t   s"    (

zBaseConfig.from_yaml_filec                 C   sB   t |ddd }t|  | W d    n1 s40    Y  d S )NrH   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 u rZi | _d S r0   )	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
   rT   r;   r?   classmethodr#   rP   r&   rS   rV   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 u ri | _ | jd u r i | _| jd u r0i | _| jd u r@i | _t  S r0   )rf   rg   rh   ri   superrV   rU   	__class__r)   r*   rV      s    



zClusterConfig.__post_init__)"rW   rX   rY   intrZ   r\   r^   r_   r   rT   r`   ra   rb   rc   r;   re   rf   r:   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   r   rq   rr   rC   rV   __classcell__r)   r)   rt   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regionr]   r^   allr_   zaccelerate-sagemaker-base_job_namepytorch_versiontransformers_version
py_versionsagemaker_inputs_filesagemaker_metrics_fileadditional_argsrC   )rW   rX   rY   rT   rZ   rx   r   ry   rz   r^   rv   r_   r|   r   r}   r   r~   r   r   r   r   r   r:   rC   r)   r)   r)   r*   r"      s   
r"   )!r   r   Zdataclassesr   enumr   typingr   r   r   r$   utilsr   r	   r
   Zutils.constantsr   r   r   r   
expandusergetenvjoinZhf_cache_home	cache_dirrD   rR   r   r   r+   r,   r!   r"   r)   r)   r)   r*   <module>   s.    M/