a
    Ad
                     @   s:   d dl Z d dlZd dlmZ d dlZG dd de jZdS )    N)defaultdictc                   @   sX   e Zd ZdZdZdZdZdZdd Zdd Z	dd Z
d	d
 Zdd Zdd Zdd ZdS )MemUsageMonitorNFc              
   C   s   t j|  || _|| _|| _d| _t  | _t	t
| _z|   tj| j W n: ty } z"td| d d| _W Y d }~n
d }~0 0 d S )NTzWarning: caught exception 'z', memory monitor disabled)	threadingThread__init__namedeviceoptsdaemonEventrun_flagr   intdatacuda_mem_get_infotorchcudamemory_stats	Exceptionprintdisabled)selfr   r   r	   e r   6/var/www/html/stable-diffusion-webui/modules/memmon.pyr      s    

zMemUsageMonitor.__init__c                 C   s*   | j jd ur| j jntj }tj|S N)r   indexr   r   current_devicemem_get_info)r   r   r   r   r   r       s    z!MemUsageMonitor.cuda_mem_get_infoc                 C   s   | j r
d S | j  tj  | j  | jj	dkr@| j  q
| 
 d | jd< | j r
| 
 \}}t| jd || jd< td| jj	  qRq
d S )Nr   min_free   )r   r   waitr   r   reset_peak_memory_statsr   clearr	   memmon_poll_rater   is_setmintimesleep)r   freetotalr   r   r   run$   s    




zMemUsageMonitor.runc                 C   s   t | d |   D ]\}}t ||d   qt | d tj| j}| D ]0\}}d|vrbqPt d|v rpdnd||d   qPt tj  d S )Nzrecorded data:i  zraw torch memory stats:bytespeak	 )r   readitemsr   r   r   r   memory_summary)r   kvtmr   r   r   
dump_debug:   s    

 zMemUsageMonitor.dump_debugc                 C   s   | j   d S r   )r   setr   r   r   r   monitorH   s    zMemUsageMonitor.monitorc                 C   s   | j s|  \}}|| jd< || jd< tj| j}|d | jd< |d | jd< |d | jd< |d	 | jd
< || jd  | jd< | jS )Nr(   r)   zactive.all.currentactivezactive_bytes.all.peakZactive_peakzreserved_bytes.all.currentreservedzreserved_bytes.all.peakZreserved_peakr   Zsystem_peak)r   r   r   r   r   r   r   )r   r(   r)   Ztorch_statsr   r   r   r/   K   s    

zMemUsageMonitor.readc                 C   s   | j   |  S r   )r   r"   r/   r7   r   r   r   stopZ   s    
zMemUsageMonitor.stop)__name__
__module____qualname__r   r   r   r	   r   r   r   r*   r5   r8   r/   r;   r   r   r   r   r      s   r   )r   r&   collectionsr   r   r   r   r   r   r   r   <module>   s   