o
    
i                     @   st   d Z ddlmZmZmZmZmZ ddlZddlZddl	m
Z
 ddlmZ 				dd	ed
edededef
ddZdS )zZ
A logger that queries PyTorch metrics and passes that information to downstream loggers.
    )DictAnyOptionalTupleION)Language   )LoggerTpytorchallprefixdevicecuda_mem_poolcuda_mem_metricreturnc                    sT   zdd l W n ty   tdw tjtjfdtdtdtf fdd}|S )Nr   zThe 'torch' library could not be found - did you install it? Alternatively, specify the 'ConsoleLogger' in the 'training.logger' config section, instead of the 'PyTorchLogger'.nlpstdoutstderrc                    s   d}d}|vrt d d| d|vr"t d d| ddtdtd	tttf fd
d dttttf  f fdd}dd }||fS )N)r   
large_pool
small_pool)r   currentpeak	allocatedfreezGot CUDA memory pool 'z', but expected one of: ''zGot CUDA memory metric 'namevaluer   c                 S   s&   d| v rt dd| |d fS | |fS )N_bytes
_megabytesg      0A)resub)r   r    r!   I/home/ubuntu/.local/lib/python3.10/site-packages/spacy_loggers/pytorch.pynormalize_mem_value_to_mb(   s   zJpytorch_logger_v1.<locals>.setup_logger.<locals>.normalize_mem_value_to_mbinfoc              
      s   | d u rd S j }| D ]i\}}|d}t|dkrI|\}}}||\}}|kr0q dkr9| kr9q||  d| d| d| < qt|dkrp|\}}||\}} dkrc| krcq||  d| d| < q||  d| < qd S )N.   r      )cudamemory_statsitemssplitlen)r$   cuda_mem_statsstatvalsplitsr   poolmetric)r   r   r   r#   r   torchr!   r"   log_step.   s*   

 z9pytorch_logger_v1.<locals>.setup_logger.<locals>.log_stepc                   S   s   d S )Nr!   r!   r!   r!   r"   finalizeH   s   z9pytorch_logger_v1.<locals>.setup_logger.<locals>.finalize)
ValueErrorstrintr   floatr   r   r   )r   r   r   expected_cuda_mem_poolexpected_cuda_mem_metricr4   r5   r   r   r   r   r3   )r#   r"   setup_logger   s   (z'pytorch_logger_v1.<locals>.setup_logger)r3   ImportErrorsysr   r   r   r   )r   r   r   r   r=   r!   r<   r"   pytorch_logger_v1   s   ,2r@   )r
   r   r   r   )__doc__typingr   r   r   r   r   r   r?   spacyr   utilr	   r7   r8   r@   r!   r!   r!   r"   <module>   s*    