【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)

简介: 【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)

0. 前言

按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。


本文基于PyTorch通过tensor点积所需要的时间来对比GPU与CPU的计算速度,并介绍tensorboard的使用方法。


我在前面的科普文章——GPU如何成为AI的加速器GPU如何成为AI的加速器_使者大牙的博客-CSDN博客GPU如何成为AI的加速器 解释了GPU的多核心架构相比CPU更适合简单大量的计算,而深度学习计算的底层算法就是大量矩阵的点积和相加,本文将通过张量的点积运算来说明:与CPU相比,GPU有多“适合”深度学习算法。


加法相比于点积的计算量太小了,我感觉体现不出GPU的优势,所以没有用加法来对比两者的算力差距。

1. 准备工作

1.0 一台有Nvidia独立显卡的电脑

既然要使用GPU计算,一台有Nvidia独立显卡=支持CUDA的GPU的电脑就是必须的前置条件。如果不清楚CUDA、GPU和Nvidia关系的同学,可以再看下我的文章:GPU如何成为AI的加速器_使者大牙的博客-CSDN博客


1.1 PyTorch

在PyTorch的官网:Start Locally | PyTorch 选择合适的版本:

这里需要注意的是PyTorch的CUDA版本需要匹配电脑的GPU的CUDA版本,一般来说电脑>PyTorch的CUDA版本就没问题了。


例如我安装的PyTorch是CUDA 11.8版本,我的GPU驱动版本是12.2(查看路径:Nvidia控制面板>帮助>系统信息)。


1.2 Tensorboard

Tensorboard是TensorFlow官方提供的一个可视化工具,用于可视化训练过程中的模型图、训练误差、准确率、训练后的模型参数等,同时还提供了交互式的界面,让用户可以更加方便、直观地观察和分析模型。


这里需要注意的是Tensorboard虽然是由TensorFlow提供的,但是使用Tensorboard不需要安装TensorFlow!只要在虚拟环境下安装TensorboardX和Tensorboard即可,我使用的是Anaconda Prompt:


pip install tensorboardX
pip install tensorboard

其使用方法为:

from torch.utils.tensorboard import SummaryWriter
 
 
writer = SummaryWriter("../logs")  #这里有两个"."
 
writer.add_scalars(main_tag, tag_scalar_dict, global_step=None):
 
writer.close()


另外需要注意SummaryWriter后面的路径要有两个“.”,这是因为我的代码文件在D:\DL\CUDA_test二级文件夹下面,我们需要把生成的tensorboard的event文件放在D:\DL\logs下面,而不是D:\DL\CUDA_test\logs路径下。这样做的理由是避免tensorboard报“No scalar data was found”



这里使用的是.add_scalars()方法来绘制多条曲线,参数如下:


  • main_tag:字符串类型,要绘制的曲线主标题,本实例为“GPU vs CPU”
  • tag_scalar_dict:字典类型,要绘制多条曲线的因变量,本实例为GPU和CPU的计算时间

{'GPU':CUDA,'CPU':CPU}

  • global_step: 标量,要绘制多条曲线的因变量,本实例为张量的大小tensor_size


在event文件生成后再在PyCharm的终端输入 tensorboard --logdir=logs ,点击链接就可以在浏览器中查看生成的曲线了。



2. 对比GPU与CPU的计算速度

本文的实例问题非常简单:分别使用CPU和GPU对尺寸为[tensor_size, tensor_size]的2个张量进行点积运算,使用time库工具对计算过程进行计时,对比CPU和GPU所消耗的时间。张量的大小tensor_size取值从1到10000。


我使用的硬件信息如下:

CPU:AMD Ryzen 9 7940H

GPU:NVIDIA GeForce RTX 4060


CPU计算时间:


import torch
import time
 
 
def CPU_calc_time(tensor_size):
    a = torch.rand([tensor_size,tensor_size])
    b = torch.rand([tensor_size,tensor_size])
    start_time = time.time()
    torch.matmul(a,b)
    end_time = time.time()
 
    return end_time - start_time


GPU计算时间:


import torch
import time
 
def CUDA_calc_time(tensor_size):
    device = torch.device('cuda')
 
    a = torch.rand([tensor_size,tensor_size]).to(device)
    b = torch.rand([tensor_size,tensor_size]).to(device)
    start_time = time.time()
    torch.matmul(a,b).to(device)
    end_time = time.time()
 
    return end_time - start_time


3. 结果分析

最终生成的CPU和GPU计算张量点积的时间曲线如下:

从图中可以看出,随着张量尺寸的增大,CPU计算时间明显增加(0~11.3s),而GPU的计算时间基本不变(0.001s左右),张量尺寸越大GPU的计算优势就越明显。

4. 完整代码

import torch
import time
from torch.utils.tensorboard import SummaryWriter
from tqdm import tqdm
 
torch.manual_seed(1)
 
def CPU_calc_time(tensor_size):
    a = torch.rand([tensor_size,tensor_size])
    b = torch.rand([tensor_size,tensor_size])
    start_time = time.time()
    torch.matmul(a,b)
    end_time = time.time()
 
    return end_time - start_time
 
def CUDA_calc_time(tensor_size):
    device = torch.device('cuda')
 
    a = torch.rand([tensor_size,tensor_size]).to(device)
    b = torch.rand([tensor_size,tensor_size]).to(device)
    start_time = time.time()
    torch.matmul(a,b).to(device)
    end_time = time.time()
 
    return end_time - start_time
 
 
if __name__ == "__main__":
 
    writer = SummaryWriter("../logs")
 
    for tensor_size in tqdm(range(1,10000,50)):
 
        CPU = CPU_calc_time(tensor_size)
        CUDA = CUDA_calc_time(tensor_size)
        writer.add_scalars('GPU vs CPU',{'GPU':CUDA,'CPU':CPU},tensor_size)
 
    writer.close()
 
# Command Prompt   "tensorboard --logdir=logs"


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
人工智能 并行计算 PyTorch
以Lama Cleaner的AI去水印工具理解人工智能中经常会用到GPU来计算的CUDA是什么? 优雅草-卓伊凡
以Lama Cleaner的AI去水印工具理解人工智能中经常会用到GPU来计算的CUDA是什么? 优雅草-卓伊凡
287 4
|
2月前
|
机器学习/深度学习 人工智能 芯片
42_大语言模型的计算需求:从GPU到TPU
随着2025年大语言模型技术的持续突破和规模化应用,计算资源已成为推动AI发展的关键驱动力。从最初的CPU计算,到GPU加速,再到专用AI加速器的崛起,大语言模型的计算需求正在重塑全球数据中心的基础设施架构。当前,全球AI半导体市场规模预计在2027年将达到2380亿美元(基本情境)甚至4050亿美元(乐观情境),这一增长背后,是大语言模型对计算能力、内存带宽和能效比的极致追求。
|
8月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
1678 0
|
3月前
|
机器学习/深度学习 人工智能 容灾
硅谷GPU云托管:驱动AI革命的下一代计算基石
在人工智能与高性能计算席卷全球的今天,硅谷作为科技创新的心脏,正通过GPU云托管服务重新定义计算能力的边界。无论您是初创公司的机器学习工程师,还是跨国企业的研究团队,硅谷GPU云托管已成为实现突破性创新的关键基础设施。
|
8月前
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
4990 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
7月前
|
人工智能 并行计算 监控
在AMD GPU上部署AI大模型:从ROCm环境搭建到Ollama本地推理实战指南
本文详细介绍了在AMD硬件上构建大型语言模型(LLM)推理环境的全流程。以RX 7900XT为例,通过配置ROCm平台、部署Ollama及Open WebUI,实现高效本地化AI推理。尽管面临技术挑战,但凭借高性价比(如700欧元的RX 7900XT性能接近2200欧元的RTX 5090),AMD方案成为经济实用的选择。测试显示,不同规模模型的推理速度从9到74 tokens/秒不等,满足交互需求。随着ROCm不断完善,AMD生态将推动AI硬件多元化发展,为个人与小型组织提供低成本、低依赖的AI实践路径。
2950 1
在AMD GPU上部署AI大模型:从ROCm环境搭建到Ollama本地推理实战指南
|
9月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
839 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
10月前
|
存储 机器学习/深度学习 PyTorch
PyTorch Profiler 性能优化示例:定位 TorchMetrics 收集瓶颈,提高 GPU 利用率
本文探讨了机器学习项目中指标收集对训练性能的影响,特别是如何通过简单实现引入不必要的CPU-GPU同步事件,导致训练时间增加约10%。使用TorchMetrics库和PyTorch Profiler工具,文章详细分析了性能瓶颈的根源,并提出了多项优化措施
522 1
PyTorch Profiler 性能优化示例:定位 TorchMetrics 收集瓶颈,提高 GPU 利用率
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
921 7

热门文章

最新文章

推荐镜像

更多