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

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

以下CUDA设备泛指NVIDIA显卡 或 启用ROCm的AMD显卡

  • 测试环境:
    • Distributor ID: Ubuntu
    • Description: Ubuntu 22.04.3 LTS
    • Release: 22.04
    • Codename: jammy

1.首先,简单使用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测试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, 2]cuda_benchmark(device_ids=device_ids)

3.使用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)
http://www.lryc.cn/news/237664.html

相关文章:

  • SpringBoot-AOP-基础到进阶
  • Midjourney绘画提示词Prompt参考学习教程
  • 美国费米实验室SQMS启动“量子车库”计划!30+顶尖机构积极参与
  • DCDC同步降压控制器SCT82A30\SCT82630
  • 本地/笔记本/纯 cpu 部署、使用类 gpt 大模型
  • 企企通亮相广东智能装备产业发展大会:以数字化采购促进智能装备产业集群高质量发展
  • pycharm安装教程
  • LeetCode【76】最小覆盖子串
  • 光谱图像超分辨率综述
  • Ubuntu apt-get换源
  • 磐舟CI-Web前端项目
  • Flink 运行架构和核心概念
  • 中间件安全:Apache Tomcat 文件上传.(CVE-2017-12615)
  • Linux 命令补充
  • HTTP常见面试题(小林coding版总结)
  • 一整个分析模型库,大数据分析工具都这么玩了吗?
  • 最新企业服务总线ESB的国内主要厂商和开源厂商排名,方案书价格多少
  • react重要知识点(面经)
  • 面试题-6
  • 九宫格 图片 自定义 路径
  • Leetcode经典题目之“双指针交换元素“类题目
  • 计算机基础知识54
  • 深度系统(Deepin)开机无法登录,提示等待一千五百分钟
  • 工具及方法 - 多邻国: Duolingo
  • Redis篇---第十一篇
  • linux CentOS7 安装git 配置秘钥公钥克隆代码
  • 深度学习之生成唐诗案例(Pytorch版)
  • 算法设计与分析算法实现——删数问题
  • 基于Vue+SpringBoot的超市账单管理系统 开源项目
  • 【Linux 内核分析课程作业 1】mmap 实现一个 key-valueMap