当前位置: 首页 > news >正文

Nvidia GPU benchmark压力测试工具

一、参考资料

使用Pytorch测试cuda设备的性能(单卡或多卡并行)

GPU:使用gpu-burn压测GPU

二、GPU压力测试方法

1. PyTorch 方式

使用 torch.ones 测试CUDA设备。

import torch
import timedef cuda_benchmark(device_id, N=1000000):# 指定要使用的显卡设备torch.cuda.set_device(device_id)# 创建输入数据data = torch.ones(N).cuda()# 启动CUDA操作,并记录执行时间start_time = time.time()for i in range(10000):data += 1torch.cuda.synchronize()  # 等待CUDA操作执行完成end_time = time.time()# 将结果从GPU内存下载到主机内存result = data.cpu().numpy()# 打印Benchmark结果和执行时间print(f"Benchmark结果:{result[:10]}")print(f"执行时间:{end_time - start_time} 秒")if __name__ == '__main__':# 测试第一块显卡device_id = 0cuda_benchmark(device_id, 10000000)

2. CUDABenchmarkModel 方式

使用自带的 CUDABenchmarkModel 测试CUDA设备。

import torch
import torch.nn as nn
import timeclass CUDABenchmarkModel(nn.Module):def __init__(self):super(CUDABenchmarkModel, self).__init__()self.fc = nn.Linear(10, 10).cuda()def forward(self, x):return self.fc(x)def cuda_benchmark(device_ids, N=10000000):# 创建模型model = CUDABenchmarkModel()model = nn.DataParallel(model, device_ids=device_ids)# 创建输入数据data = torch.ones(N, 10).cuda()# 启动CUDA操作,并记录执行时间start_time = time.time()for i in range(10000):output = model(data)torch.cuda.synchronize()  # 等待CUDA操作执行完成end_time = time.time()# 打印执行时间print(f"执行时间:{end_time - start_time} 秒")if __name__ == '__main__':# 同时测试3块显卡device_ids = [0, 1, 3]cuda_benchmark(device_ids=device_ids)

3. nccl 方式

使用nccl多进程的方式测试CUDA设备。

import torch
import torch.nn as nn
import torch.distributed as dist
import torch.multiprocessing as mp
import timedef cuda_benchmark(device_id, N=10000000):# 指定要使用的显卡设备torch.cuda.set_device(device_id)print(f"该GPU的核心数量为:{torch.cuda.get_device_properties(device_id).multi_processor_count}")# 创建输入数据data = torch.ones(N).cuda()# 启动CUDA操作,并记录执行时间start_time = time.time()for i in range(10000):data += 1torch.cuda.synchronize()  # 等待CUDA操作执行完成end_time = time.time()# 将结果从GPU内存下载到主机内存result = data.cpu().numpy()# 打印Benchmark结果和执行时间print(f"Benchmark结果:{result[:10]}")print(f"执行时间:{end_time - start_time} 秒")def main(num):# 初始化多进程mp.spawn(run, args=(num,), nprocs=num)def run(rank,world_size):"""每个进程的入口函数"""# 初始化进程组dist.init_process_group("nccl", init_method="tcp://127.0.0.1:23456", rank=rank, world_size=world_size)# 指定设备IDdevice_id = rank# 在多个GPU上并行执行操作model = cuda_benchmark(device_id)if __name__ == '__main__':# 同时启用3个进程(一个进程对应一块显卡)device_numbers = 3main(device_numbers)

4. gpu-burn 方式

gpu_burn 代码仓库:https://github.com/wilicc/gpu-burn

4.1 总体步骤

git clone https://github.com/wilicc/gpu-burn
cd gpu-burn
make

4.2 make编译

yoyo@yoyo:~/360Downloads/gpu-burn$ make COMPUTE=8.6
g++  -O3 -Wno-unused-result -I/usr/local/cuda/include -std=c++11 -DIS_JETSON=false -c gpu_burn-drv.cpp
PATH="/opt/ros/kinetic/bin:/home/yoyo/360Downloads/cmake-3.21.1-linux-x86_64/bin:/home/yoyo/miniconda3/condabin:/home/yoyo/bin:/home/yoyo/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda/bin::." /usr/local/cuda/bin/nvcc  -I/usr/local/cuda/include -arch=compute_86 -ptx compare.cu -o compare.ptx
g++ -o gpu_burn gpu_burn-drv.o -O3  -lcuda -L/usr/local/cuda/lib64 -L/usr/local/cuda/lib64/stubs -L/usr/local/cuda/lib -L/usr/local/cuda/lib/stubs -Wl,-rpath=/usr/local/cuda/lib64 -Wl,-rpath=/usr/local/cuda/lib -lcublas -lcudart

安装成功

编译成功后,将生成 gpu_burn 二进制文件。

yoyo@yoyo:~/360Downloads/gpu-burn$ ./gpu_burn -h
GPU Burn
Usage: gpu-burn [OPTIONS] [TIME]-m X	Use X MB of memory.
-m N%	Use N% of the available GPU memory.  Default is 90%
-d	Use doubles
-tc	Try to use Tensor cores
-l	Lists all GPUs in the system
-i N	Execute only on GPU N
-c FILE	Use FILE as compare kernel.  Default is compare.ptx
-stts T	Set timeout threshold to T seconds for using SIGTERM to abort child processes before using SIGKILL.  Default is 30
-h	Show this help messageExamples:gpu-burn -d 3600 # burns all GPUs with doubles for an hourgpu-burn -m 50% # burns using 50% of the available GPU memorygpu-burn -l # list GPUsgpu-burn -i 2 # burns only GPU of index 2

4.3 测试GPU

测试单卡:

yoyo@yoyo:~/360Downloads/gpu-burn$ ./gpu_burn 120
Using compare file: compare.ptx
Burning for 120 seconds.
GPU 0: NVIDIA GeForce RTX 3060 (UUID: GPU-a460cb29-b0ea-f6a5-b261-590f0a23f79e)
Initialized device 0 with 12050 MB of memory (11457 MB available, using 10311 MB of it), using FLOATS
Results are 268435456 bytes each, thus performing 38 iterations
10.8%  proc'd: 76 (7234 Gflop/s)   errors: 0   temps: 57 C Summary at:   2024年 09月 05日 星期四 22:53:05 CST25.0%  proc'd: 190 (7106 Gflop/s)   errors: 0   temps: 62 C Summary at:   2024年 09月 05日 星期四 22:53:22 CST37.5%  proc'd: 266 (7019 Gflop/s)   errors: 0   temps: 65 C Summary at:   2024年 09月 05日 星期四 22:53:37 CST50.0%  proc'd: 380 (7000 Gflop/s)   errors: 0   temps: 67 C Summary at:   2024年 09月 05日 星期四 22:53:52 CST

测试多卡:

export CUDA_VISIBLE_DEVICES=0,1
./gpu_burn 100

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 003: Visual Studio 配置 VTK 开发环境的方法与比较
  • Qt工程实践_06_Qt MSVC2O17编译器下的程序添加VS2017生成的动态链接库方法
  • Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)
  • 科研绘图系列:R语言柱状图分布(histogram plot)
  • Mybatis【分页插件,缓存,一级缓存,二级缓存,常见缓存面试题】
  • 重头开始嵌入式第三十四天(数据库二)
  • html备忘录
  • IDEA 2024最新软件下载
  • 【全网最全】2024年数学建模国赛C题超详细保奖思路+可视化图表+成品论文+matlab/python代码等(后续会更新
  • Elastic Stack--ELFK实例与Dashboard界面
  • docker实战基础四(如何在容器中调试和排查运行问题)
  • 基于PyTorch分布式训练的实现与优化(以CIFAR-10为例)
  • 如何搭建RGBD GS-ICP SLAM环境以及如何与自己编的pcl并存
  • 如何在JSON对象中查询特定的值?C语言实现
  • Linux 命令行/bash脚本 批量创建文件
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • mysql 5.6 原生Online DDL解析
  • MySQL数据库运维之数据恢复
  • React的组件模式
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 和 || 运算
  • 技术发展面试
  • 聚类分析——Kmeans
  • 如何实现 font-size 的响应式
  • 如何学习JavaEE,项目又该如何做?
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 王永庆:技术创新改变教育未来
  • 7行Python代码的人脸识别
  • postgresql行列转换函数
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 安徽锐锋科技IDMS系统简介
  • (1)Android开发优化---------UI优化
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (第61天)多租户架构(CDB/PDB)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)scrum常见工具列表
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .cn根服务器被攻击之后
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 使用反射注册事件
  • .Net中wcf服务生成及调用
  • .net中应用SQL缓存(实例使用)
  • @javax.ws.rs Webservice注解
  • @PostConstruct 注解的方法用于资源的初始化