首页 > 其他分享 >测试GPU的占用情况

测试GPU的占用情况

时间:2024-09-04 19:23:54浏览次数:11  
标签:str 占用 value times print 测试 usage GPU line

测试GPU的占用情况

文章目录


前言

本文简单介绍测试GPU占用情况和模型耗时统计的代码。

一、测试GPU的占用情况

统计脚本

tegrastats --interval 10 > *.txt

import re
import numpy as np
 
 
# 定义正则表达式模式来匹配 GPU、CPU 和显存占用率
gpu_pattern = re.compile(r"GR3D_FREQ (\d+)%@")
cpu_pattern = re.compile(r"CPU \[([0-9%@,]+)\]")
memory_pattern = re.compile(r"RAM (\d+)/(\d+)MB")
 
# 初始化变量来累积 GPU、CPU 和显存的使用率
gpu_usage = []
cpu_usage = [[] for _ in range(12)]  # 假设有 12 个 CPU 核心
memory_usage = []
 
# 读取文件内容
with open('*.txt', 'r') as file:
    for line in file:
        # 提取 GPU 使用率
        gpu_match = gpu_pattern.search(line)
        if gpu_match:
            gpu_usage.append(int(gpu_match.group(1)))
         
        # 提取 CPU 使用率
        cpu_match = cpu_pattern.search(line)
        if cpu_match:
            cpu_data = cpu_match.group(1).split(',')
            for i, cpu in enumerate(cpu_data):
                usage = int(cpu.split('%')[0])
                cpu_usage[i].append(usage)
         
        # 提取显存使用情况
        memory_match = memory_pattern.search(line)
        if memory_match:
            used_memory = int(memory_match.group(1))
            total_memory = int(memory_match.group(2))
            memory_usage.append(used_memory)
 
# 计算平均 GPU 使用率、P99 和最大值
avg_gpu_usage = np.mean(gpu_usage) if gpu_usage else 0
p99_gpu_usage = np.percentile(gpu_usage, 99) if gpu_usage else 0
max_gpu_usage = np.max(gpu_usage) if gpu_usage else 0
 
# 计算每个 CPU 核心的平均使用率、P99 和最大值
avg_cpu_usage = [np.mean(core_usage) if core_usage else 0 for core_usage in cpu_usage]
p99_cpu_usage = [np.percentile(core_usage, 99) if core_usage else 0 for core_usage in cpu_usage]
max_cpu_usage = [np.max(core_usage) if core_usage else 0 for core_usage in cpu_usage]
 
# 计算显存的平均使用率、P99 和最大值
avg_memory_usage = np.mean(memory_usage) if memory_usage else 0
p99_memory_usage = np.percentile(memory_usage, 99) if memory_usage else 0
max_memory_usage = np.max(memory_usage) if memory_usage else 0
 
# 输出结果
print(f"Average GPU Usage: {avg_gpu_usage:.2f}%")
print(f"P99 GPU Usage: {p99_gpu_usage:.2f}%")
print(f"Max GPU Usage: {max_gpu_usage:.2f}%")
 
for i, (avg, p99, max_val) in enumerate(zip(avg_cpu_usage, p99_cpu_usage, max_cpu_usage)):
    print(f"Average CPU Core {i} Usage: {avg:.2f}%")
    print(f"P99 CPU Core {i} Usage: {p99:.2f}%")
    print(f"Max CPU Core {i} Usage: {max_val:.2f}%")
 
print(f"Average Memory Usage: {avg_memory_usage:.2f} MB")
print(f"P99 Memory Usage: {p99_memory_usage:.2f} MB")
print(f"Max Memory Usage: {max_memory_usage:.2f} MB")

二、耗时统计

计算日志中的耗时

import re
import numpy as np

txt_path = '/home/li/11.txt'
# s = '1-2*(60+(-40.35/5.3+1.2)-(-4*3))'
# num = re.findall('\-?\d+\.?\d*',s) 
# print(num)
with open(txt_path, 'r') as f:
    lines = f.readlines()


float_pattern = r'-?\d+\.?\d*e?-?\d*'
float_compile = re.compile(float_pattern)


preprocess_str = 'preprocess time: '
preprocess_times = []


doInference_str = 'doInference time: '
doInference_times = []


postprocess_str = 'postprocess time: '
postprocess_times = []

ai_str = 'ai time: '
ai_times = []

rule_str = 'rule time: '
rule_times = []

all_str = ', timecost ='
all_times = []

count = 0
for line in lines:
    if preprocess_str in line and 'brake' not in line and 'm_nCycleNum' not in line:
        idx = line.index(preprocess_str)
        # print(line, line[idx])
        finded_str = line[idx:]
        # print(finded_str)
        value, *_ = float_compile.findall(finded_str)
        value = float(value)
        if value > 0.05:
            print(preprocess_str, line)#;continue
        preprocess_times.append(value)
    elif doInference_str in line and 'brake' not in line:
        idx = line.index(doInference_str)
        finded_str = line[idx:]
        value, *_ = float_compile.findall(finded_str)
        value = float(value)
        if value > 1.0:
            print(doInference_str, line)
            count += 1
            continue
        doInference_times.append(value)
    elif postprocess_str in line and 'brake' not in line:
        idx = line.index(postprocess_str)
        finded_str = line[idx:]
        value, *_ = float_compile.findall(finded_str)
        value = float(value)
        if value > 0.05:
            print(postprocess_str, line);continue
        postprocess_times.append(value)
    elif ai_str in line and 'brake' not in line:
        idx = line.index(ai_str)
        finded_str = line[idx:]
        value, *_ = float_compile.findall(finded_str)
        value = float(value)

        #if value < 0.01:
        #    continue
        ai_times.append(value)
    elif rule_str in line and 'brake' not in line:
        idx = line.index(rule_str)
        finded_str = line[idx:]
        value, *_ = float_compile.findall(finded_str)
        value = float(value)
        if value > 0.05:
            print(line);continue
        rule_times.append(value)
    elif all_str in line:
        idx = line.index(all_str)
        finded_str = line[idx:]
        value, *_ = float_compile.findall(finded_str)
        value = float(value)
        #if value > 0.05:
        #    print(line);continue
        all_times.append(value)

rule_times = np.array(rule_times)
ai_times = np.array(ai_times)
preprocess_times = np.array(preprocess_times)
doInference_times = np.array(doInference_times)
postprocess_times = np.array(postprocess_times)
all_times = np.array(all_times)
print(f'count={count}')
print(f'total time: {np.mean(all_times)}')
print(f'\trule time: {np.mean(rule_times)}')
print(f'\tai time: {np.mean(ai_times)}')
print(f'\t\tpreprocess time: {np.mean(preprocess_times)}')
print(f'\t\tdoInference time: {np.mean(doInference_times)}')
print(f'\t\tpostprocess time: {np.mean(postprocess_times)}')
print()

for value in range(90, 91):
    print(f'{value}:total_time: {np.percentile(all_times, value, axis=0)}')
    print(f'{value}:rule_time: {np.percentile(rule_times, value, axis=0)}')
    print(f'{value}:ai_time: {np.percentile(ai_times, value, axis=0)}')
    print(f'\t{value}:preprocess_time: {np.percentile(preprocess_times, value, axis=0)}')
    print(f'\t{value}:doInference_time: {np.percentile(doInference_times, value, axis=0)}')
    print(f'\t{value}:postprocess_time: {np.percentile(postprocess_times, value, axis=0)}')
    print()

总结

本文简单介绍测试GPU占用情况和模型耗时统计的代码。

标签:str,占用,value,times,print,测试,usage,GPU,line
From: https://blog.csdn.net/c15901088098/article/details/141901737

相关文章

  • 氧气电还原测试流程
    1.测试前的准备准备电解液酸性电解液:0.5MH2SO4或0.1MHClO4。注:贵金属催化剂尤其是铂基催化剂必须使用高氯酸才能获得较好的性能。碱性电解液:0.1MKOH中性电解液:0.1MPB(磷酸缓冲液)准备参比电极酸性电解液:Ag/AgCl(sat.KCl)参比电极碱性电解液:Hg/HgO(1MKOH)参比电......
  • 一图速览9种API接口测试
    一图速览9种API接口测试,大家都懂了吗?值得收藏! ......
  • 软件测试学习笔记丨Pytest+Allure测试计算器
    本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31954二、项目要求2.1项目简介计算器是一个经典的编程场景,可以获取两个数据的计算结果。2.1.1知识点Pytest测试框架基本用法2.1.2受众初级测试工程师2.1.3作业内容使用Pytest编写自动化测试用例对相加函数进行测试......
  • 软件项目管理资料归总(规格说明书;详细设计;测试计划;验收报告)
     前言:在软件开发过程中,文档资料是非常关键的一部分,它们帮助团队成员理解项目需求、设计、实施、测试、验收等各个环节,确保项目的顺利进行。以下是各个阶段的文档资料概述:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研......
  • 基于微信小程序的大学生体质测试管理系统的设计与实现
    摘要大学生体质健康水平可以有效反映我国国民的体质健康状况,同时也是影响一个国家综合实力的重要因素之一。2021年9月教育部公布的“第八次全国学生体质与健康调研结果”表明:我国大学生的身体素质仍然呈下滑的趋势,大学生体质健康水平持续下降的问题仍没有得到有效遏制。《国......
  • 2-STM32F103+ML307(中移4G Cat1)基本控制篇(自建物联网平台)-整体运行测试-Android扫
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明这节测试一......
  • 详细AS32 TTL-100/-C LoRa模块配置及stm32+as32 ttl-100代码测试(总结了坑点)
    1.相关工具准备AS32TTL-100/C  泽耀官网卖的usb或者普通usb转ttl 上位机及串口调试助手,下载链接(官方资料)https://pan.baidu.com/s/14l6000nr3SR8pzBdyclYfg提取码:2580    也可去官网下泽耀科技(ashining.com)2.摘要(遇到坑点) ①MD0与MD1必须接,不能留空。A......
  • DAB+测试认证
    DAB+是一种数字广播标准,旨在提供高质量的音频和数据服务。其技术基于欧洲电信标准化协会(ETSI)制定的一系列标准。DAB+测试认证确保数字广播设备(如发射机、接收机等)符合DAB+技术规范,并能稳定、准确地发送和接收数字音频广播信号。这种认证有助于确保广播设备的质量和性能,提高用户满......
  • 导入excel测试分析与测试验证点
    前言:excel导入是一个很常见的功能,基本上toB的系统在web端都能用到,能够解决大批数据快速生成,是快速创建/修改数据的绝佳方式;通常导入excel分了2种,一种是导入后新增数据,一种是导入后修改数据。笔者曾经在公司对内的销售系统,CRM,监管系统等都见过类似的功能,用于快速创建大批客户数据......
  • Python2数据传输测试脚本
    服务端#-*-coding:utf-8-*-importsocketimportthreadingHOST='0.0.0.0'PORT=12345defhandle_client(conn,addr):print"连接地址:",addrtry:whileTrue:data=conn.recv(1024000)......