a
    Df                     @   sT   d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
 ddd	ZdddZdS )z
Auto-batch utils
    )deepcopyN)LOGGERcolorstr)profile  Tc                 C   sD   t jj|" tt|  |W  d    S 1 s60    Y  d S )N)torchcudaampautocast	autobatchr   train)modelimgszr	    r   E/data/NAS7/SABIOD/METHODE/ermites/yolo-dyni/yolov5/utils/autobatch.pycheck_train_batch_size   s    r   皙?   c                    s^  t d}t| d   t|  j}|jdkrLt| d|  |S tjj	j
rnt| d|  |S d}t| }tj|}|j| }	tj|| }
tj|| }|	|
|  }t| | d|j d|	d	d
|
d	d|d	d|d	d g d}z& fdd|D }t|| d|d}W n8 tyb } zt| |  W Y d }~n
d }~0 0 dd |D }tj|d t| |dd}t|| |d  |d  }d |v r|d }||| kr|t|d d }|dk s|dkr|}t| d t|||
 | |	 }t| d| d| d|	| d	d|	d	d|d dd  |S )!NzAutoBatch: z)Computing optimal batch size for --imgsz cpuz0CUDA not detected, using default CPU batch-size uP    ⚠️ Requires torch.backends.cudnn.benchmark=False, using default batch-size i   @z (z) z.2fz	G total, zG reserved, zG allocated, zG free)            r   c                    s   g | ]}t |d   qS )   )r   empty).0br   r   r   
<listcomp>5       zautobatch.<locals>.<listcomp>r   )ndevicec                 S   s   g | ]}|r|d  qS )r   r   )r   xr   r   r   r   ;   r   r   )degr   i   uV   WARNING ⚠️ CUDA anomaly detected, recommend restart environment and retry command.zUsing batch-size z for  zG/zG (d   z.0fu   %) ✅)r   r   infonext
parametersr!   typer   backendscudnn	benchmarkstrupperr   get_device_propertiestotal_memorymemory_reservedmemory_allocatednamer   	Exceptionwarningnppolyfitlenintindexmaxpolyval)r   r   fraction
batch_sizeprefixr!   gbd
propertiestrafbatch_sizesimgresultseypr   ir   r   r   r      sH    	


<(

<r   )r   T)r   r   r   )__doc__copyr   numpyr6   r   utils.generalr   r   utils.torch_utilsr   r   r   r   r   r   r   <module>   s   
