o
    Ďi                     @   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 sw   Y  d S )N)torchcudaampautocast	autobatchr   train)modelimgszr	    r   R/home/jeff/fluffinator/venv/lib/python3.10/site-packages/yolov5/utils/autobatch.pycheck_train_batch_size   s   $r   皙?   c                    sT  t d}t| d   t|  j}|jdkr&t| d|  |S tjj	j
r7t| 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 n ty } zt| |  W Y d }~nd }~ww 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   s    zautobatch.<locals>.<listcomp>r   )ndevicec                 S   s   g | ]}|r|d  qS )r   r   )r   xr   r   r   r   ;   s    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      sL   	


<
<r   )r   T)r   r   r   )__doc__copyr   numpyr5   r   yolov5.utils.generalr   r   yolov5.utils.torch_utilsr   r   r   r   r   r   r   <module>   s   
