o
    Ii                     @   s   d dl mZ d dlZddlmZmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZ dZd	efd
efddZdd Zdd ZdS )    )PathN   )is_hpu_availableis_mlu_availableis_musa_availableis_neuron_availableis_npu_availableis_sdaa_availableis_xpu_available   )ClusterConfigdefault_json_config_file)SubcommandHelpFormatterzFCreate a default config file for Accelerate with only a few flags set.nosave_locationc                 C   s  t |}|jjddd | rtd| d dS |  } | dvr)td|  d| d	}t rKtj	
 }||d
< d|d< |dkrGd|d< nd|d< t ritj
 }||d
< d|d< |dkrdd|d< nd|d< nt rtj
 }||d
< d|d< |dkrd|d< nd|d< nt rtj
 }||d
< d|d< |dkrd|d< nd|d< ntj rtj
 }||d
< d|d< |dkrd|d< npd|d< nkt rtj
 }	|	|d
< d|d< |	dkrd|d< nRd|d< nMt rtj
 }
|
|d
< d|d< |
dkrd|d< n3d|d< n.t r"tj
 }||d
< d|d< |dkrd|d< nd|d< nd}	d|d< d|d
< d|d< d|d< d|d< tdi |}|| |S )a  
    Creates and saves a basic cluster config to be used on a local machine with potentially multiple GPUs. Will also
    set CPU if it is a CPU-only machine.

    Args:
        mixed_precision (`str`, *optional*, defaults to "no"):
            Mixed Precision to use. Should be one of "no", "fp16", or "bf16"
        save_location (`str`, *optional*, defaults to `default_json_config_file`):
            Optional custom save location. Should be passed to `--config_file` when using `accelerate launch`. Default
            location is inside the huggingface cache folder (`~/.cache/huggingface`) but can be overridden by setting
            the `HF_HOME` environmental variable, followed by `accelerate/default_config.yaml`.
    T)parentsexist_okz Configuration already exists at zZ, will not override. Run `accelerate config` manually or pass a different `save_location`.F)r   fp16bf16fp8zL`mixed_precision` should be one of 'no', 'fp16', 'bf16', or 'fp8'. Received LOCAL_MACHINE)compute_environmentmixed_precisionnum_processesuse_cpur   	MULTI_MLUdistributed_typeNO
MULTI_SDAA
MULTI_MUSA	MULTI_HPU	MULTI_GPU	MULTI_XPU	MULTI_NPUMULTI_NEURONr   debugenable_cpu_affinityN )r   parentmkdirexistsprintlower
ValueErrorr   torchmludevice_countr	   sdaar   musar   hpucudais_availabler
   xpur   npur   neuronr   to_json_file)r   r   pathconfignum_mlus	num_sdaas	num_musasnum_hpusnum_gpusnum_xpusnum_npusnum_neuron_coresr'   r'   V/home/ubuntu/.local/lib/python3.10/site-packages/accelerate/commands/config/default.pywrite_basic_config%   s   


























rE   c                 C   sL   | j d|ttd} | jdtddd | jdg dtd	d
d | jtd | S )Ndefault)r   helpformatter_classz--config_fileaT  The path to use to store the config file. Will default to a file named default_config.yaml in the cache location, which is the content of the environment `HF_HOME` suffixed with 'accelerate', or if you don't have such an environment variable, your cache directory ('~/.cache' or the content of `XDG_CACHE_HOME`) suffixed with 'huggingface'.r   )rF   rG   destz--mixed_precision)r   r   r   zWhether or not to use mixed precision training. Choose between FP16 and BF16 (bfloat16) training. BF16 training is only supported on Nvidia Ampere GPUs and PyTorch 1.10 or later.r   )choicestyperG   rF   )func)
add_parserdescriptionr   add_argumentr   strset_defaultsdefault_config_command)parserr   r'   r'   rD   default_command_parser   s    	rT   c                 C   s(   t | j| j}|rtd|  d S d S )Nz"accelerate configuration saved at )rE   r   r   r+   )argsconfig_filer'   r'   rD   rR      s   rR   )pathlibr   r.   utilsr   r   r   r   r   r	   r
   config_argsr   r   config_utilsr   rN   rP   rE   rT   rR   r'   r'   r'   rD   <module>   s   $	i