o
    IiN                     @   s:  d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZ dd	 Zd
d ZdefddZeejddZdd Zejedk dddd Zejedk dddd Zejedk ddd+defddZejedk d dd,d#edefd$d%Zed&d' Zd(d) Ze d*kre  dS dS )-zT
Test file to ensure that in general certain situational setups for notebooks work.
    N)markraises)ChildFailedError)PartialStatenotebook_launcher)require_bnb)is_bnb_availableis_xpu_availablec                   C   s   t dt   d S )NPartialState:
)printr    r   r   _/home/ubuntu/.local/lib/python3.10/site-packages/accelerate/test_utils/scripts/test_notebook.pybasic_function      r   c                 C   sF   |   rd S |  }|dkr| |d  tdtdt   d S )Nr      z&The nut hasn't cracked yet! Try again.r
   )emptygetputRuntimeErrorr   r   )queuetrialr   r   r   tough_nut_function"   s   r   	sleep_secc                 C   s*   t  }|jd dkrtdt|  d S )N   r   +I'm an even process. I don't like to sleep.)r   process_indexr   timesleep)r   stater   r   r   bipolar_sleep_function-   s   r   ACCELERATE_NUM_PROCESSESr   c                   C   s   t tdtd d S )Nr   num_processesr   r   NUM_PROCESSESr   r   r   r   test_can_initialize8   s   r%   r   z<Need at least 2 processes to test static rendezvous backends)reasonc                   C      t tdtdd d S )Nr   staticr"   rdzv_backendr#   r   r   r   r   test_static_rdzv_backend<   r   r+   z:Need at least 2 processes to test c10d rendezvous backendsc                   C   r'   )Nr   c10dr)   r#   r   r   r   r   test_c10d_rdzv_backendA   r   r-   z1Need at least 2 processes to test fault tolerance   max_restartsc                 C   sP   dd l m} t r|d}n|d}| }||  tt|ft| d d S )Nr   spawnfork)r"   r/   )	torch.multiprocessingmultiprocessingr	   get_contextQueuer   r   r   r$   )r/   mpctxr   r   r   r   test_fault_tolerantF   s   

r8   z,Need at least 2 processes to test monitoring{Gz?d   monitor_intervalc                 C   sb   t   }ttdd tt|ft| d W d    n1 sw   Y  t   | |k s/J dd S )Nr   match)r"   r;   z,Monitoring did not stop the process in time.)r   r   r   r   r   r$   )r;   r   
start_timer   r   r   test_monitoringU   s   r?   c                  C   sH   t tdd dd l} ttdtd W d    d S 1 sw   Y  d S )NzPlease keep these importsr<   r   r   r!   )r   r   bitsandbytesr   r   r$   )bnbr   r   r   test_problematic_importsb   s   "rB   c                   C   st   t d t  t d t  t d t  t d t  t d t  t r-t d t  tdkr8t	 
  d S d S )NzTest basic notebook can be ranzTest static rendezvous backendzTest c10d rendezvous backendzTest fault tolerantzTest monitoringzTest problematic imports (bnb)r   )r   r%   r+   r-   r8   r?   r   rB   r$   r   destroy_process_groupr   r   r   r   mainj   s    rD   __main__)r.   )r9   r:   )!__doc__osr   pytestr   r   0torch.distributed.elastic.multiprocessing.errorsr   
accelerater   r   accelerate.test_utilsr   accelerate.utilsr   r	   r   r   intr   environr   r$   r%   skipifr+   r-   r8   floatr?   rB   rD   __name__r   r   r   r   <module>   s6   



