Windows下CUDA+pytorch安装
记录一下Windows下CUDA+pytorch安装的一些参考链接。
1 CUDA与pytorch简介(kimi生成)
1.1 CUDA简介
- 背景与起源:CUDA(Compute Unified Device Architecture)是NVIDIA推出的并行计算架构。它起源于NVIDIA在GPU通用计算领域的探索,旨在打破传统计算中CPU作为唯一计算核心的限制,充分挖掘图形处理器(GPU)在处理大规模并行计算任务方面的潜力。
- 架构与组成:
1.GPU硬件架构:现代GPU采用流式多处理器(SM)架构,每个SM包含多个CUDA核心,这些核心可以同时执行大量线程。GPU还具有较大的显存(VRAM),用于存储数据和中间结果,以满足大规模数据处理的需求。
2.CUDA软件架构:CUDA软件架构分为三层。底层是硬件抽象层,包含寄存器、缓存和内存等。中间层是运行时库,提供API供开发者调用,实现对GPU资源的管理。顶层是工具和语言接口,方便开发者编写、调试和优化CUDA程序。 - 主要特点:
1.并行计算能力:CUDA程序可以在GPU上同时执行数千个线程,实现大规模并行计算,显著提升计算效率,非常适合处理复杂的科学计算、机器学习和深度学习任务。
2.灵活性:CUDA支持C、C++和Fortran等多种编程语言,开发者可以通过简单的扩展语法调用GPU加速功能,同时也允许更细粒度的控制,满足不同应用场景的需求。
3.强大的生态系统:NVIDIA为CUDA提供了丰富的库和工具,如cuBLAS(用于线性代数计算)、cuDNN(用于深度神经网络计算)等,这些库在各自领域都经过了高度优化,开发者可以直接使用,大幅提高了开发效率。 - 应用领域:
1.图形与视觉计算:CUDA在计算机图形学领域应用广泛,可用于实时渲染、物理模拟、图像处理等任务,为游戏、影视特效等行业提供了强大的技术支持。
2.科学计算:在气象预测、分子动力学模拟、天体物理模拟等科学研究中,CUDA强大的并行计算能力能够快速处理海量数据,加速科学发现进程。
3.深度学习与AI:当前,深度学习是CUDA最热门的应用领域之一。以PyTorch和TensorFlow为代表的深度学习框架利用CUDA实现了高效的并行计算,推动了人工智能技术的飞速发展。
1.2 PyTorch简介
- 背景与起源:PyTorch是由Facebook人工智能研究院基于之前的Torch框架开发的一个开源机器学习框架。它诞生于深度学习蓬勃发展的时期,旨在为研究人员和开发者提供一个灵活、高效的工具,以加速深度学习模型的开发、训练和部署。
- 核心组件与架构:
1.张量(Tensor):PyTorch的核心数据结构是张量。张量类似于NumPy中的多维数组,但可以在GPU上运行,从而实现高效的并行计算。与NumPy相比,PyTorch张量支持自动求导,能够自动计算梯度,这是深度学习自动反向传播算法的基础。
2.自动微分(Autograd):Autograd是PyTorch最强大且独特的功能之一。它能够自动记录张量之间的操作,并在反向传播时自动计算梯度,无需用户手动推导复杂的微分公式。这一功能极大地简化了神经网络的训练过程,使开发者能够专注于模型的构建和优化。
3.神经网络模块(nn.Module):PyTorch提供了一个灵活且可扩展的神经网络模块系统。开发者可以像搭积木一样,通过组合各种预定义的层(如卷积层、池化层、全连接层等)来构建复杂的神经网络架构。同时,PyTorch还支持自定义层和模块,满足特殊需求。
4.优化器(torch.optim):PyTorch内置了多种优化算法,如随机梯度下降(SGD)、Adam、RMSprop等。这些优化器可以与自动微分模块无缝配合,自动调整模型参数以最小化损失函数。 - 主要特点:
1.动态计算图:与TensorFlow等基于静态计算图的框架不同,PyTorch采用动态计算图。这意味着计算图可以在运行时构建和修改,更加灵活和直观。开发者可以像编写普通的Python代码一样构建模型,无需预先定义计算图结构,这使得调试和实验更加便捷。
2.易用性和灵活性:PyTorch具有简洁、直观的API,易于上手。其设计风格与Python语言高度契合,许多Python开发者可以很快掌握。同时,PyTorch允许对模型进行细粒度的控制,方便研究人员实现创新的算法和模型结构。
3.强大的社区支持:PyTorch拥有庞大的开发者社区,不断涌现出各种教程、论文实现和开源项目。社区成员相互交流和分享经验,共同推动了PyTorch的快速发展。 - 应用领域:
1.深度学习研究:PyTorch是当前最流行的深度学习研究框架之一。它在自然语言处理、计算机视觉、语音识别、强化学习等领域得到了广泛应用,许多前沿的研究成果都是基于PyTorch实现的。
2.工业应用:随着模型训练效率的提高和部署工具的完善,PyTorch在工业界的应用也越来越广泛。例如,Facebook使用PyTorch进行自然语言处理和推荐系统,Pinterest用它来分析图像数据,许多初创公司也纷纷将其用于开发各种AI驱动的产品和服务。
1.3 CUDA与PyTorch的结合
- CUDA为PyTorch提供硬件支持:PyTorch充分支持CUDA,能够利用GPU的强大计算能力。当使用PyTorch时,只需简单地将张量或模型迁移到GPU上,即可显著加速计算过程。PyTorch的底层设计与CUDA紧密结合,能够高效地调用CUDA库(如cuBLAS和cuDNN)进行线性代数运算和神经网络计算。
- PyTorch简化了CUDA编程:对于深度学习开发者来说,PyTorch提供了一套高级接口,隐藏了CUDA编程的复杂细节。开发者无需深入了解CUDA的底层架构,即可充分利用GPU的计算资源。PyTorch的自动微分和动态计算图功能,使得构建和训练深度学习模型变得更加简单和高效。
- 在深度学习中的应用:在深度学习中,CUDA与PyTorch的结合使得模型训练和推理的速度大幅提升。无论是小型的实验模型还是大型的工业级模型,都可以在GPU上高效运行。此外,结合分布式训练技术,PyTorch可以轻松地实现多GPU并行计算,进一步加速模型训练过程。
综上所述,CUDA和PyTorch分别是GPU计算和深度学习领域的关键技术。它们的紧密合作推动了人工智能的发展,使得各种复杂的计算任务能够高效地完成。
2 CUDA+PyTorch安装教程
基本逻辑是“NVIDIA显卡驱动安装→CUDA安装→Python安装→Pytorch安装”。
NVIDIA显卡驱动根据自己机子的型号到官方网站下载对应的驱动。如果不确定自家显卡的型号,可以打开任务管理器点击到GPU界面查看即可。
下载完以后就只需要图形界面一路安装即可。
接下来是安装CUDA,也是比较麻烦的一步。首先需要确认自己的显卡能接受什么版本的CUDA。这里需要打开命令行,输入如下的命令。
1 | nvidia-smi |
这里Driver Vesrion的版本就是你目前显卡驱动的版本。CUDA Version则是能接受的CUDA最高版本。下面则是正在运行的程序占用GPU的情况。
接下来就是去CUDA官网下载CUDA的安装包。
根据你的机子支持的CUDA先选版本,后续根据机子的系统架构版本选择。这里建议选择local的exe。
接下来双击exe理论就可以安装了。但是遭遇了几次安装失败以后,通过网络搜索发现了关键的问题。每次都是安装Nsight Compute失败,然后全暂停了。而我们下载的exe其实是一个压缩包。因此,只需要先解压(用7-zip或者bandzip之类的软件),单独安装Nsight Compute,然后再安装剩下的CUDA组件即可。因此后续再CUDA安装exe的图形界面里,要把Nisght Compute勾掉,这样就安装成功了。安装成功后在命令行输入如下命令测试。
1 | nvcc -V |
出现如下版本信息即安装成功(下面是在另一台电脑安装成功的输出信息,具体版本根据你安装版本不同决定)。
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Fri_Jun_14_16:44:19_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.6, V12.6.20
Build cuda_12.6.r12.6/compiler.34431801_0
Python安装这里就不赘述了,本站有多篇关于Python,Anaconda,Jupyter以及数据科学开发集成环境的安装配置。
至于Pytorch的安装也是参照官网。
另外用pip直接安装的话需要梯子,建议下载whl文件离线安装。另外换镜像也是一个选择。
安装完成以后可以测试下是否可以用GPU运算。
1 | import torch |
输出true就大功告成。
后面在jupyter测试code时还碰到一个问题(报错信息)。
Disposing session as kernel process died ExitCode: 3, Reason: OMP: Error #~5: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
解决方案是找到你python环境里的dll文件删除即可。
参考链接:
3.关于OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.错误解决方法