o v_fl@sdZddlZddlZddlZddlmZmZddlZddlm Z ddl m Z Gddde ZGddde ZGd d d eZd d ZdS) z Copyright (c) 2022, salesforce.com, inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause N) defaultdictdeque) dist_utilsc@speZdZdZdddZdddZd d Zed d Zed dZ eddZ eddZ eddZ ddZ dS) SmoothedValuezsTrack a series of values and provide access to smoothed values over a window or the global series average. NcCs.|durd}t|d|_d|_d|_||_dS)Nz{median:.4f} ({global_avg:.4f}))maxlengr)rtotalcountfmt)self window_sizer r A/mnt/petrelfs/wufan/project/UnimerDemo/unimernet/common/logger.py__init__s   zSmoothedValue.__init__cCs0|j||j|7_|j||7_dSN)rappendr r)r valuenr r rupdate s zSmoothedValue.updatecCs\tsdStj|j|jgtjdd}tt || }t |d|_|d|_dS)z: Warning: does not synchronize the deque! Ncuda)dtypedevicerr) ris_dist_avail_and_initializedtorchtensorr rfloat64distbarrier all_reducetolistint)r tr r rsynchronize_between_processes%s z+SmoothedValue.synchronize_between_processescCstt|j}|Sr)rrlistrmedianitemr dr r rr%2s zSmoothedValue.mediancCs"tjt|jtjd}|S)N)r)rrr$rfloat32meanr&r'r r ravg7s zSmoothedValue.avgcCs |j|jSr)rr r r r r global_avg<s zSmoothedValue.global_avgcCs t|jSr)maxrr,r r rr.@ zSmoothedValue.maxcCs |jdS)N)rr,r r rrDr/zSmoothedValue.valuecCs |jj|j|j|j|j|jdS)N)r%r+r-r.r)r formatr%r+r-r.rr,r r r__str__HszSmoothedValue.__str__)rN)r)__name__ __module__ __qualname____doc__rrr#propertyr%r+r-r.rr2r r r rrs         rc@sPeZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dS) MetricLogger cCstt|_||_dSr)rrmeters delimiter)r r;r r rrSs  zMetricLogger.__init__cKsL|D]\}}t|tjr|}t|ttfsJ|j||qdSr) items isinstancerTensorr&floatr!r:r)r kwargskvr r rrWs  zMetricLogger.updatecCs>||jvr |j|S||jvr|j|Stdt|j|)Nz!'{}' object has no attribute '{}')r:__dict__AttributeErrorr1typer3)r attrr r r __getattr__^s    zMetricLogger.__getattr__cCs:g}|jD]\}}|d|t|q|j|S)Nz{}: {})r:r<rr1strr;joinr Zloss_strnamemeterr r rr2gs zMetricLogger.__str__cCs8g}|jD]\}}|d||jq|j|S)Nz {}: {:.4f})r:r<rr1r-r;rIrJr r rr-ms zMetricLogger.global_avgcCs|jD]}|qdSr)r:valuesr#)r rLr r rr#ss z*MetricLogger.synchronize_between_processescCs||j|<dSr)r:)r rKrLr r r add_meterwszMetricLogger.add_meterNc csd}|sd}t}t}tdd}tdd}dtttt|d} |d| dd d d d g} tjr=| d |j | } d} |D]v} | t|| V| t|||dksl|t|dkr|j t||} tt j t| d}tjrt| j|t||t|t|t|tj| dnt| j|t||t|t|t|d|d7}t}qGt|}tt j t|d}td|||t|dS)Nrz {avg:.4f})r :r(z[{0z}/{1}]z eta: {eta}z{meters}z time: {time}z data: {data}zmax mem: {memory:.0f}g0Ar)seconds)etar:timedatamemory)rRr:rSrTz!{} Total time: {} ({:.4f} s / it))rSrrHlenrr is_availablerr;rIrr-datetime timedeltar!printr1max_memory_allocated)r iterableZ print_freqheaderi start_timeendZ iter_timeZ data_timeZ space_fmtZlog_msgMBobjZ eta_secondsZ eta_string total_timetotal_time_strr r r log_everyzst           zMetricLogger.log_every)r9r) r3r4r5rrrGr2r-r#rNrer r r rr8Rs  r8cseZdZfddZZS)AttrDictcs tt|j|i|||_dSr)superrfrrC)r argsr@ __class__r rrs zAttrDict.__init__)r3r4r5r __classcell__r r rirrfsrfcCs*tjtr tjntjdtgddS)Nz'%(asctime)s [%(levelname)s] %(message)s)levelr1handlers)logging basicConfigris_main_processINFOWARN StreamHandlerr r r r setup_loggers  rt)r6rXrnrS collectionsrrrtorch.distributed distributedrunimernet.commonrobjectrr8dictrfrtr r r rs  ?f