@@ -149,6 +149,47 @@ def query_npu_smi(query=None, index=None, dtype=None):
149149 return ret
150150
151151
152+ def query_xpu_smi (query = None , index = None , dtype = None ):
153+ if not has_xpu_smi ():
154+ return []
155+
156+ cmd = ["xpu-smi" ]
157+
158+ if not isinstance (dtype , list ) or len (dtype ) != len (query ):
159+ dtype = [str ] * len (query )
160+
161+ output = subprocess .check_output (cmd , timeout = 3 )
162+ lines = output .decode ("utf-8" ).split (os .linesep )
163+ ret = []
164+ i = 0
165+
166+ for line in lines :
167+ if not line :
168+ continue
169+ result = re .split (r',|/|\s+|\|' , line )
170+ length = len (result )
171+ if length not in [23 ] or "XPU" in result :
172+ continue
173+ result = [item for item in result if item ]
174+ info = Info ()
175+ utilization_xpu = float (re .findall (r'\d+\.\d+|\d+' , result [9 ])[0 ])
176+ mem_total = float (re .findall (r'\d+\.\d+|\d+' , result [8 ])[0 ])
177+ mem_used = float (re .findall (r'\d+\.\d+|\d+' , result [7 ])[0 ])
178+ result = [
179+ i ,
180+ utilization_xpu ,
181+ mem_total ,
182+ mem_used ,
183+ (mem_total - mem_used ),
184+ time .strftime ("%Y-%m-%d %H:%M:%S" , time .localtime ()),
185+ ]
186+ i += 1
187+ for k , v , d in zip (query , result , dtype ):
188+ setattr (info , k .replace ("." , "_" ), d (v ))
189+ ret .append (info )
190+ return ret
191+
192+
152193def get_gpu_info (index = None ):
153194 q = "index,uuid,driver_version,name,gpu_serial,display_active,display_mode" .split (
154195 ","
@@ -175,9 +216,10 @@ def get_gpu_util(index=None):
175216 )
176217 if paddle .device .is_compiled_with_rocm ():
177218 return query_rocm_smi (q , index = index , dtype = d )
178-
179219 elif paddle .device .is_compiled_with_custom_device ('npu' ):
180220 return query_npu_smi (q , index = index , dtype = d )
221+ elif paddle .is_compiled_with_xpu ():
222+ return query_xpu_smi (q , index = index , dtype = d )
181223 return query_smi (q , index = index , dtype = d )
182224
183225
@@ -205,6 +247,10 @@ def has_npu_smi():
205247 return shutil .which ("npu-smi" )
206248
207249
250+ def has_xpu_smi ():
251+ return shutil .which ("xpu-smi" )
252+
253+
208254if __name__ == '__main__' :
209255 print (get_gpu_info (0 ))
210256 print (get_gpu_util (0 ))
0 commit comments