
    ϰi              
           d Z ddlZddlZddlZddlZddlZddlmZ dZdZdddd	dd
dd	dddd	dddd	dddd	gZ	g dZ
dddZdeddfdZdedz  fdZd"d#dZdededededef
dZd#d Zed!k(  r e        yy)$u   
GTX 1060 6GB faster-whisper GPU 최적화 벤치마크 스크립트
Task: 932.2 | Engineer: Kartikeya (dev4)
GPU: GTX 1060 6GB, CC 6.1 | CUDA 12.2
CTranslate2 지원 compute types: int8, int8_float32, float32 (float16 미지원)
    N)datetimez7/home/jay/workspace/teams/dev4/task-932.2/test_5min.wavz@/home/jay/workspace/teams/dev4/task-932.2/benchmark_results.jsoncudafloat32zGPU + float32)devicecompute_typelabelint8_float32u   GPU + int8_float32 (혼합)int8z
GPU + int8cpuzCPU + int8 (baseline)float16u    GPU + float16 (에러 캡처용))tinybasesmallmediumzlarge-v2ko   )language	beam_sizemsgreturnc                 p    t        j                         j                  d      }t        d| d|  d       y)u'   타임스탬프와 함께 stdout 출력z%H:%M:%S[] T)flushN)r   nowstrftimeprint)r   tss     6/home/jay/workspace/teams/dev4/task-932.2/benchmark.pylogr    $   s.    		 	 	,B	AbTC5/&    c                      	 t        j                  g dt         j                  d      } t        | j	                         j                  d      d         S # t        $ r}t        d|        Y d}~yd}~ww xY w)uA   nvidia-smi 로 현재 VRAM 사용량(MB) 반환. 실패 시 None.)z
nvidia-smiz--query-gpu=memory.usedz--format=csv,noheader,nounitsT)stderrtext
r   u#     [WARN] nvidia-smi 쿼리 실패: N)
subprocesscheck_outputDEVNULLintstripsplit	Exceptionr    )outes     r   get_vram_used_mbr/   *   sl    	%%V%%

 399;$$T*1-.. 1!56s   AA 	A6A11A6c                     | ~ t        j                          	 ddl}|j                  j	                          y# t
        $ r Y yw xY w)u   GPU 메모리 해제Nr   )gccollecttorchr   empty_cacheImportError)modelr3   s     r   free_gpu_memoryr7   8   s>    JJL

  s   8 	AA
model_sizer   r   r   c                 B   ddl m} | |||ddddddddd}d}	 t        d|  d| d| d       t               }t	        j
                         } || ||	      }t	        j
                         |z
  }	t               }
t        |	d
      |d<   |
|d<   t        d|	dd| d|
 d       t        dt         d       t	        j
                         } |j                  t        fi t        \  }}t        |      }t	        j
                         |z
  }t               }t        |d
      |d<   ||d<   t        |      |d<   dj                  d |D              }|dd |d<   t        d|ddt        |       d| d       t        d|dd        d |d!<   t!        |       t               }t        d%| d       |S # t        $ r<}t        |      j                   d"| }||d#<   d#|d!<   t        d$|        Y d}~fd}~ww xY w# t!        |       t               }t        d%| d       w xY w)&u   
    단일 (model_size, device, compute_type) 조합 테스트.
    에러가 발생해도 dict를 반환하며, 다음 테스트는 계속 진행됨.
    r   )WhisperModelNpending)r8   r   r   r   load_time_sectranscribe_time_secvram_after_load_mbvram_after_transcribe_mbtranscript_previewsegment_counterrorstatusu     로딩 중:  / z ...)r   r      r<   r>   u     로딩 완료: z.2fz	s | VRAM u   MB → MBu     전사 시작 (z) ...r=   r?   rA    c              3   4   K   | ]  }|j                     y wN)r$   ).0segs     r   	<genexpr>z"run_single_test.<locals>.<genexpr>x   s     ;#SXX;s      r@   u     전사 완료: u   s | 세그먼트 u   개 | VRAM u     미리보기: d   successrC   : rB   z
  [ERROR] u     메모리 해제 후 VRAM: )faster_whisperr:   r    r/   timeperf_counterround
TEST_AUDIO
transcribeTRANSCRIBE_KWARGSlistlenjoinr,   type__name__r7   )r8   r   r   r   r:   resultr6   vram_beforet0	load_timevram_after_loadt1segmentsinfo	collectedtranscribe_timevram_after_transcribe	full_textr.   err_msg
vram_freeds                        r   run_single_testrk   D   s}   
 , !$#"$("F E.<nZLF83|nDIJ&( Z\R%%'",	*,"'	1"5'6#$	#i}GOK\\^_` 	
|512 )))*J8IJ$ N	++-2 0 2(-oq(A$%-B)*"%i. HH;;;	'0##$44Ec)nEUU`av`wwyz{y#123$x 	%'
+J<r:;M  $!W%%&b,!w"xj	"##	$ 	%'
+J<r:;s*   E1F0 0	G592G0+G8 0G55G8 8&Hc                     t        d       t        d       t        dt                t        dt                t        d       t               } t        d|  d       g }t	        t
              t	        t              z  }d}t
        D ]  }t        d       t        d        t        d	|j                                 t        d        t        D ]  }|d
z  }|d   }|d   }|d   }t        d       t        d| d| d| d|        t        d|d|       t        ||||      }	|j                  |	       t        t        dd      5 }
t        j                  ||
dd       d d d          t        d       t        d       t        d       t        d       |D cg c]  }|d   dk(  s| }}|D cg c]  }|d   dk(  s| }}t        d| d t	        |       d!t	        |              t        d       |rt        d"       d#d$d%d&d'd%d(d$d%d)d$d%d*d$	}t        |       t        d+t	        |      z         t        |d, -      D ]8  }t        |d.   d$d%|d   d'd%|d/   d0d%|d1   d0d%t        |d2         d$	       : |r:t        d       t        d3       |D ]  }t        d4|d.    d5|d    d6|d           ! t        d       t        d7t                t        d8       y # 1 sw Y   +xY wc c}w c c}w )9Nz<============================================================u&   faster-whisper GPU 벤치마크 시작u   테스트 오디오: u   결과 저장 위치: u   초기 VRAM 사용량: rF   r    u   모델:    r   r   r   r   /r   z | z	  device=z, compute_type=)r8   r   r   r   wzutf-8)encodingF   )ensure_asciiindentu   벤치마크 완료 — 요약rC   rO   rB   u   총 u   건 | 성공: u    | 실패: u0   [ 성공 결과 — 전사 시간 오름차순 ]u   모델z<10rG   u   설정z<30u	   로딩(s)u	   전사(s)zVRAM(MB)-c                     | d   S )Nr=    )xs    r   <lambda>zmain.<locals>.<lambda>   s    q9N7O r!   )keyr8   r<   z<10.2fr=   r?   u   [ 실패 결과 ]z  rD   rP   u   전체 결과 JSON: u   벤치마크 종료.)r    rU   RESULTS_FILEr/   rY   MODEL_SIZESCONFIGSupperrk   appendopenjsondumpsortedstr)	vram_initall_resultstotal_teststest_idxr8   cfgr   r   r   r]   frsuccess_resultserror_resultsheaders                  r   mainr      s^   M01

|,-
 /0M !"I
!)B/0Kk"S\1KH! H
Bvhhz'')*+,vh 	HCMH]F~.LLEG!H:Q{m2j\UGDE)F:_\4DEF$%)	F v& lC': Ha		+quQGH H'	HH: GM()M"-JQ8	1IqJOJ"-HQ81GqHMH${m>#o*>)?{3}K]J^_`G >?S>8C.+c1B!KPSCTTUV`adUefFC#f+-OP 	A\?3'q7C(8_%f-Qq1F/G.Oqq345c:<	 B  	EA"Q|_%S7BqzlCD	E G
|n-.IH H KHs$   K1"K>0K>:LL1K;__main__rI   )r   N)__doc__r1   r   r&   sysrR   r   rU   r{   r}   r|   rW   r   r    r)   r/   r7   dictrk   r   r\   rw   r!   r   <module>r      s    
   
  F
Q yP~@]^vMv@WXy@bc >  'S 'T '#* 	G GS G GC GTX GTL ^ zF r!   