L iwddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z  ddl Z dZ edgdZgdZgd Zgd Zgd Zgd Zd ZdZdZdZd2dZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*d Z+d!Z,d"Z-d#Z.d$Z/d%Z0d&Z1d'Z2d2d(Z3d)Z4d*Z5d+Z6d,Z7d-jqZ9d.Z:d/Z;d0ZrTcN||\}}}|dk7ry|jddS)zKRun command using run_lambda and returns first line if output is not empty.rN )splitrWs rRrun_and_return_first_linergs/G$JBQ Qw 99T?1 rTc ttztztztj j dd}t|dj|}||Sdjfd|jDS)N CONDA_EXEcondaz{} listrec3nK|]+jdstfdDr-yw)#c3&K|]}|v ywNrV.0namelines rR z/get_conda_packages...s+NTDDL+NN) startswithanyrprrpatternss @rRrsz%get_conda_packages..s2 s#+NX+N(N s15) CONDA_PATTERNSCOMMON_PATTERNSNVIDIA_PATTERNSONEAPI_PATTERNSr environgetr[formatjoin splitlines)rXrxrjrYs ` rRget_conda_packagesrsw!O3oEW JJNN; 0E :y'7'7'> ?C { 99NN$ rTct|ddS)Nz gcc --versionzgcc (.*)rcrXs rRget_gcc_versionrs $Z+ NNrTct|ddS)Nzclang --versionzclang version (.*)rrs rRget_clang_versionrs $%'< rTct|ddS)Nzcmake --versionz cmake (.*)rrs rRget_cmake_versionrs $Z1BM RRrTchtdk(rd}t||dSt}t||dS)Ndarwinzkextstat | grep -i cudazcom[.]nvidia[.]CUDA [(](.*?)[)]zDriver Version: (.*?) )rErcget_nvidia_smi)rXcmdsmis rRget_nvidia_driver_versionrs@~!'( ?    C $Z6O PPrTctdk(s:trttjdrtjj trtj jrtjj Jtj jd}t|drdj|j}nd}nd}tj jd|zSyt}tjd}||d z\}}}|dk7rytj|d|S) Nrhipr gcnArchNamez ({})NoGCNArchNameOnOldPyTorchz \(UUID: .+?\)z -L)rETORCH_AVAILABLEhasattrr versionrcuda is_availableget_device_propertiesrrget_device_namerr^compilesub)rXpropgcnArchr uuid_regexrNrYrZs rR get_gpu_infors~! EMM5 ) MM   ) uzz668}}  ,zz77:4/%nnT-=-=>G9G::--d3g= =  C-.JC%K(JBQ Qw 66*b# &&rTct|ddS)Nznvcc --versionzrelease .+ V(.*)rrs rRget_running_cuda_versionrs $Z1ACV WWrTctdk(rttjjdd}tjjdd}tjj |dd}dj ||}ntd k(rd }nd }||\}}}t|d k(s |d k7re|d k7r`tjjd}|>tjj|rtjj|Syt} |jdD]R} tjj| } tjj| sB| j| T| syt| } t| d k(r| d Sdj | } dj | S)zHReturn a list of libcudnn.so; it's hard to tell which one is being used.r< SYSTEMROOT C:\Windows CUDA_PATHz %CUDA_PATH%System32wherez{} /R "{}\bin" cudnn*.dllrz ls /usr/local/cuda/lib/libcudnn*z7ldconfig -p | grep libcudnn | rev | cut -d" " -f1 | revrr] CUDNN_LIBRARYNrez!Probably one of the following: {})rEr r}r~pathrrlenisfilerealpathsetrfaddsorted) rX system_root cuda_path where_cmd cudnn_cmdrNrYrZl files_setfnfilesresults rRget_cudnn_versionrsj~ jjnn\=A JJNN; > GGLLj'B 077 9M 8 # 7 M I&JBQ 3x1}qR1W JJNN? + =RWW^^A.77##A& &Iiio WW  b ! 77>>"  MM"   9 E 5zQQx YYu F / 6 6v >>rTcd}tdk(rtjjdd}tjjdd}tjj |dd|}tjj |d |}||g}|D]5}tjj |s#d j|}|S|S) Nz nvidia-smir<rr PROGRAMFILESzC:\Program FileszNVIDIA CorporationNVSMIrz"{}")rEr r}r~rrexistsr)rrprogram_files_root legacy_pathnew_pathsmis candidate_smis rRrrs C~ jjnn\=A ZZ^^Nintel-opencl-icdlibze1 level-zeroz intel-openclrrr* z: r<cygwinzpowershell.exe "gwmi -Class Win32_PnpSignedDriver | where{$_.DeviceClass -eq \"DISPLAY\" -and $_.Manufacturer -match \"Intel\"} | Select-Object -Property DeviceName,DriverVersion,DriverDate | ConvertTo-Json" DeviceName: DriverVersion ( DriverDate)re) rEr~rrappendr[jsonloadsr>list ValueErrorr?r) rXrplatformpkgspkgvertxtobjoes rRget_intel_gpu_driver_versionrNs C~H7    $ #')2 .% & /C' C8Ce| RuCu-. /&&    **S/CCyD AJJQ|_-R/0B/C2a oEVVWX  RO 45RL8I7J!LM 99S>  JJsO JJs1v   s:A0C;; D9+D44D9cpg}t}|dk(rt|d}|re tj|}|j dg}t |t r|r|jd|Dn|jdn|jd|dvrt|d}|rf tj|}t |t r|r|jd|Dn$|jd |j d dn|jdd j|S#ttf$r5}|j||jt|Yd}~d}~wwxYw#t$r5}|j||jt|Yd}~d}~wwxYw) Nrzxpu-smi discovery -j device_listc3,K|] }d|dyw)r device_nameNrVrpdevices rRrsz(get_intel_gpu_onboard..sVF=$9#:;Vrrzpowershell.exe "gwmi -Class Win32_PnpSignedDriver | where{$_.DeviceClass -eq \"DISPLAY\" -and $_.Manufacturer -match \"Intel\"} | Select-Object -Property DeviceName | ConvertTo-Json"c3,K|] }d|dyw)rrNrVrs rRrsz(get_intel_gpu_onboard..sMvF<$8#9:Mrrrre) rEr[rrr~ isinstancerextendrr TypeErrorr?r)rXrrrrrrs rRget_intel_gpu_onboardrsrC~H7z+AB  #jjo!ggmR8 k40[JJV+VVJJu% JJu &&  m   #jjoc4(SJJMMMJJCGGL%$@#ABC JJu  99S>/ * # 3 3q6"" #$ # 3 3q6"" #s1A#D0)A$E70E4?+E//E47 F5+F00F5c trttdsytjj }|dk(ryt |Dcgc]'}d|dtjj |)}}dj|Scc}w)Nxpurrz* [z] re)rrr r device_countrangerr)rXridevicess rRget_intel_gpu_detectedr s '%"799))+LqBG|AT<=#aS599221567G 99W s ,Bc d\}}}tdk(r |d\}}}ntdk(r|d\}}}|dk(rg} tj|}t|turP|D]J}|j d|j |jDcgc] \}}|d|c}}Ln7|j |jDcgc] \}}|d|c}}d j|}ntd k(r |d \}}}d } |dk(r|} | S|} | Scc}}wcc}}w#t$r5} |j ||j t| Yd} ~ d} ~ wwxYw) N)rrrrlscpur<zpowershell.exe "gwmi -Class Win32_Processor | Select-Object -Property Name,Manufacturer,Family, Architecture,ProcessorType,DeviceID,CurrentClockSpeed,MaxClockSpeed,L2CacheSize,L2CacheSpeed,Revision | ConvertTo-Json"rz----------------------rrerz"sysctl -n machdep.cpu.brand_stringNone) rErrr>rrritemsrr?r) rXrNrYrQrrrkvrrs rR get_cpu_inforsmLBS~ !'* C 7 "!  C 7C #jjo9$ J #;< aggi#HFQqcA3K#HIJJJ#))+FA1#Rs FG))C.C 8 #!"FG CH Qw O O$IF # 3 3q6"" #s7AD5D) -)D5D/ 'D5) D55 E3>+E..E3c"tjjdrytjjdrytjjdrytjjdrytjS)Nrr<rr)sysrrurVrTrRrErE"s` ||w'   )   *   *||rTct|ddS)Nzsw_vers -productVersionz(.*)rrs rRget_mac_versionr/s $Z1JG TTrTct|d} tj|}|dd|dd|dd}|S#t$r}|dt |z }Yd}~|Sd}~wwxYw) Nzpowershell.exe "gwmi -Class Win32_OperatingSystem | Select-Object -Property Caption, OSArchitecture,Version | ConvertTo-Json"CaptionrVersionrOSArchitecturerre)r[rrrr?)rXrrrs rRget_windows_versionr3s  2 C jjoY 3y>"2!C8H4I3J!L J  CF8} Js)9 AAAct|ddS)Nzlsb_release -azDescription:\t(.*)rrs rRget_lsb_versionrAs $$&; rTct|ddS)Nzcat /etc/*-releasezPRETTY_NAME="(.*)"rrs rRcheck_release_filerGs $(*? rTc`ddlm}t}|dvr t|S|dk(r%t |}|ydj ||S|dk(r_t |}|dj ||St|}|dj ||Sdj ||S|S)Nr)machinerrz macOS {} ({})rz{} ({}))rrrErrrrr)rXrrrdescs rRget_osr!Ms ~H&&":..8!*- ?%%gwy997z*  ##D')4 4"*-  ##D')4 4')44 OrTc*ddl}|jSNrrr$s rRget_python_platformr%ls    rTcdddl}tdk7rydj|jS)Nrrr-)rrErlibc_verr$s rRget_libc_versionr)rs*~  88H%%' ((rTcFttztztztj j dk(rdnd}dtjd<t|tjdddg}|||fSd jfd |jD}||fS) zZReturn `pip list` output. Note: will also find conda-installed pytorch and numpy packages.pip3pip1PIP_DISABLE_PIP_VERSION_CHECKz-mpiprz--format=freezerec3NK|]tfdDsyw)c3&K|]}|v ywrnrVros rRrsz-get_pip_packages...s0S$0SrtN)rvrws @rRrsz#get_pip_packages..s#S0S(0S-Ss%%) PIP_PATTERNSrzr{r|r version_infomajorr r}r[ executablerr)rXrxrrY filtered_outs ` rRget_pip_packagesr7zs/1OCoU,,22a7&UK25BJJ./ S^^Wf6GH C {C99)L  $$rTctjjdd}|s tjjdd}|S)NPYTORCH_CUDA_ALLOC_CONFrPYTORCH_HIP_ALLOC_CONF)r r}r~) ca_configs rRget_cachingallocator_configr<s5 8"=I JJNN#;R@ rTctr^tjjr@tjj t j jdd}|Sy)NCUDA_MODULE_LOADINGrr)rr rrinitr r}r~)configs rRget_cuda_module_loading_configrAs?5::224  5r: rTcjtr-ddl}t|jjj Sy)Nrr)rtorch.backends.xnnpackr?backendsxnnpackenabled)r s rRrrs&%5>>))1122rTc t}t|\}}trtj}t tj j}t tjj}tj j}t tjj}tjjrS|ddtj jdzdt|dzdt|dzdt|z}ttj drtj jdx}x} } nod} tj j#j%d} | | d } | | d } d}tj j}ndx}x}x}x}}dx}x} } t&j j)dd } t+|}t-d(id |d |ddj/| t&j0j3dzdt5d|d|dt7|dt9dt;|dt=|dt?|d|d|d| d| d|d|d|d tA|d!tCd"tE|d#tG|d$tI|d%tKd&tMd'tO|S))a Collects environment information to aid in debugging. The returned environment information contains details on torch version, is debug build or not, cuda compiled version, gcc version, clang version, cmake version, operating system, libc version, python version, python platform, CUDA availability, CUDA runtime version, CUDA module loading config, GPU model and configuration, Nvidia driver version, cuDNN version, pip version and versions of relevant pip and conda packages, HIP runtime version, MIOpen runtime version, Caching allocator config, XNNPACK availability and CPU information. Returns: SystemEnv (namedtuple): A tuple containing various environment details and system information. rezXPU used to build PyTorch: zIntel GPU driver version: zIntel GPU models onboard: zIntel GPU models detected: rrcl|Dcgc]}||vs|jddd}}|r|dSdScc}w)Nr]rr)rsplit)cfgprefixs_lsts rRget_version_or_naz'get_env_info..get_version_or_nasB7:J!fkq)"-JJ"&tAw1E1Ks 11z HIP RuntimeMIOpenrrrrz{} ({}-bit runtime)r]rrrrrrrrrrrrrrrr r r r r rrrrV)(rSr7rr __version__r?rdebugrrrrrr rr_C _show_configrfrreplacerrrmaxsize bit_lengthr%rrArrrr!r)rrrr<rr)rXrpip_list_output version_strdebug_mode_strcuda_available_strcuda_version_strxpu_available_strrrrrOrK sys_versionrs rR get_env_infor_sD J#3J#? K'' U]]001 !8!8!:; ==-- 6 6 89 99 ! ! #$%R(/ 0A0A/B"EF/0LZ0X/YY[\]00Ej0Q/RRTUV11G 1S0TU V  u-1B1B1JRW W W#69O 2(('')//5C"3C"G %6sH%E "$ #(==#4#4 chh hnh'9h5 6237 8j)9 rTau PyTorch version: {torch_version} Is debug build: {is_debug_build} CUDA used to build PyTorch: {cuda_compiled_version} ROCM used to build PyTorch: {hip_compiled_version} OS: {os} GCC version: {gcc_version} Clang version: {clang_version} CMake version: {cmake_version} Libc version: {libc_version} Python version: {python_version} Python platform: {python_platform} Is CUDA available: {is_cuda_available} CUDA runtime version: {cuda_runtime_version} CUDA_MODULE_LOADING set to: {cuda_module_loading} GPU models and configuration: {nvidia_gpu_models} Nvidia driver version: {nvidia_driver_version} cuDNN version: {cudnn_version} Is XPU available: {is_xpu_available} HIP runtime version: {hip_runtime_version} MIOpen runtime version: {miopen_runtime_version} Is XNNPACK available: {is_xnnpack_available} CPU: {cpu_info} Versions of relevant libraries: {pip_packages} {conda_packages} cX dd}dd}dd}dd}d}|j ||j d<gd}|dgz}t fd |D}tr=tj j s|r|D]} d | < |jd d <|  |  | d  d <| d d< d r(| d dj|j d < dr| dd d<|j d<tjdi S)NcF|jD] }|| |||<|Srnkeys)dct replacementkeys rR replace_nonesz!pretty_str..replace_nones%s488: #C3x#"CH # rTcd|jD]}||dur|||<||dus|||<|S)NTFrb)rdtruefalserfs rR replace_boolsz!pretty_str..replace_bools,sH88: !C3x4CSU" C  !  rTct|jd}|Dcgc]}||z }}dj|Scc}w)Nre)rfr)texttaglinesrr updated_liness rRprependzpretty_str..prepend4s; 4 056t6 6yy''7s 5c*|t|dk(r|S|Sr#)r)rmres rRreplace_if_emptyz$pretty_str..replace_if_empty9s  D Q  rTcf|.t|jddkDrdj|S|S)Nrer]z {} )rrfr)strings rRmaybe_start_on_next_linez,pretty_str..maybe_start_on_next_line>s1  #fll4&8"9A"=??6* * rTr)rrrrc3,K|] }|du ywrnrV)rpfield mutable_dicts rRrszpretty_str..Rs *(- Ut#*szNo CUDAr rrrz[{}] z[conda] r)zCould not collect)YesNo)z [prepend])zNo relevant packagesrV) _asdictrallrr rrrrrr env_info_fmt) envinforgrkrqrsrvdynamic_cuda_fieldsall_cuda_fieldsall_dynamic_cuda_fields_missingrxrys @rR pretty_strr$s(   ??$L)A!!)L$%  *_,==O&)*1D*'#  '') +$ ,E"+L  ,  ( ( 04:L0 1!.L!.L$4L4P#QL %5lCS6T%UL!"N#'.  ('..9L9L*M( ^$$%)0 ) *J* %& '//L    . ..rTc(ttS)a Returns a pretty string of environment information. This function retrieves environment information by calling the `get_env_info` function and then formats the information into a human-readable string. The retrieved environment information is listed in the document of `get_env_info`. This function is used in `python collect_env.py` that should be executed when reporting a bug. Returns: str: A pretty string of the environment information. )rr_rVrTrRget_pretty_env_inforws ln %%rTc0tdt}t|trjttdrXttj dr 12 "F &M  E7 # EKK!1 2{{11FF <<7 "rww~~l'C=?ZZ =U59 \40EBGG$4$45FGG$$V,E$--;;EBKK#MBHHM``  #CJJ '(D " 3 $  s'F__main__rn)>rrrFr r^r@r collectionsrtypingrrr r ImportError NameErrorAttributeErrorOSErrorrrzr{r|ryr2rSr[rcrgrrrrrrrrrrrrrr rrErrrrr!r%r)r7r<rArr_rIr~rrr__name__rVrTrRrsm   " O   @$0 +" O SQ'4X"?J$!H.b$N tD U   > )%.Up> EG? DP/f &(: zF] Y8OsC C&%C&