文章

VSCode部署Pytorch机器学习框架

本文介绍了 Pytorch 机器学习框架的下载和部署,以及 Pytorch 开发环境的配置。


1. 简介

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(类似NumPy)。2、包含自动求导系统的的深度神经网络。

吃别人一记强力安利:PyTorch到底好用在哪里?

2. 配置Python开发环境

参考《VSCode部署Python开发环境》配置。

3. 配置PyTorch

3.1. 部署PyTorch

前往官网(https://pytorch.org/get-started/locally/),根据自身的开发环境,获取PyTorch安装命令行。以Windows 10系统+RTX2060显卡为例,采用pip安装,如图选择,得到安装命令行

安装命令行

注意,PyTorch包含两个版本,CPU版(CUDA=None)和GPU版,若计算机没有合适的独立显卡,则CUDA选择None。不过GPU版同样包含CPU版的所有功能,因此完全可以安装GPU版,然后不用GPU计算加速功能。

注意,请自行确认独立显卡驱动支持的CUDA版本。打开控制面板,选择查看方式为“小图标”,选择“Nvidia控制面板”,然后如图所示的步骤依次打开“系统信息” => “组件”,查看 “NVCUDA.DLL” 的产品名称,并选择不超过其版本号的CUDA版本号

CUDA版本查看

确定CUDA版本号后,根据官网给出的命令安装(可以灵活选择,比如用不到torchaudio就删了)。

1
2
# 20230422 win11 rtx2060 miniconda python 3.9
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

打开Anaconda Navigator,激活相应的环境,打开环境的终端,输入上述命令即可完成PyTorch的安装。

2023.04.22补充】注意,使用 conda 通过官网命令行安装也可能安装为 cpu 版本,推荐 pip 安装。

2020.09.07补充】请务必尽量用官网提供的命令行安装,直接从 Anaconda 界面安装的是 cpu 版本

20210524补充】尝试过各种加速下载的方法,卒,老老实实用官方命令安装吧,且用conda时最好关闭任何fq代理,而且不要用国内源,而是使用官方默认源(也即删除.conrc文件),否则会报如下代理连接错误 ProxyError: Conda cannot proceed due to an error in your proxy configuration.

2021.05.25更新】,经测试可使用的GPU版本的PyTorch包含以下组件:

  • pytorch 1.8.1
  • torchvision 0.9.1
  • cuda 10.2.89
  • cudnn 7.6.5(与cuda版本有关)

2023.04.22更新】win11+RTX2060,经测试可使用的GPU版本的PyTorch包含以下组件(官网默认源pip安装命令2.1G):

  • pytorch 1.12.1+cu113
  • torchvision 0.13.1+cu113
  • cuda 11.1.105 (官网下载 cuda_11.1.1_win10_network.exe,命令行 nvcc -V
  • cudnn 8.9.0 (官网下载 cudnn-windows-x86_64-8.9.0.131_cuda11-archive.zip 解压覆盖至 CUDA 安装路径)

3.2. 部署其它包

3.2.1. CUDA

CUDA(Compute Unified Device Architecture),是NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序。所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。

CUDA依赖显卡驱动,提前更新显卡驱动并确认显卡驱动支持的CUDA版本号。

采用命令行安装 PyTorch 时,命令行中已经带有安装CUDA的指令 cudatoolkit=xx.x。CUDA Toolkit 可理解为是 CUDA 的一个子集,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。conda安装只会安装一些计算库,不会安装编译工具。而官方的 CUDA 包包含的东西会完整一些。 在运行基于pytorch的代码时会使用conda提供的cudatoolkit包,而忽视Nvidia官方的CUDA Toolkit。这也就是为什么有时候我们通过nvcc -V查看的CUDA运行API版本很低(比如7.5),但是能成功运行cuda9.0的pytorch的原因。 但是需要注意: 如果项目代码需要使用python setup.py develop或./make.sh来编译依赖cuda的torch模块(如C语言脚本)时候,这个时候可能会导致错误,错误原因是编译过程使用的是系统自带的CUDA而不是conda安装的CUDA包,当系统自带CUDA版本不支持项目代码时,会引发一些奇怪的问题,所以最好的办法是保持pytorch安装的cudatoolkit版本与系统自带版本(nvcc -V)查看一致。

可通过Anaconda界面安装。

若界面安装仍然失败,可尝试手动安装,请前往 手动部署CUDA和cuDNN

3.2.2. cuDNN

可通过Anaconda界面安装。

若界面安装失败,可尝试手动安装,请前往 手动部署CUDA和cuDNN

3.2.3. Numpy

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

  • 注意!numpy若通过 conda 或 Anaconda 界面安装可能存在问题,需要用 pip 安装
  • 注意!基础包一定要先安装并测试好能用,再安装其他包。比如先装numpy,再安装scipy,matplotlib等。

采用命令行安装

1
2
conda install numpy
pip install numpy

或者通过Anaconda界面进行安装。

3.2.4. matplotlib

matplotlib包用以进行绘图,采用命令行安装

1
conda install matplotlib

或者通过Anaconda界面进行安装

安装matplotlib

3.2.5. pandas

pandas包用于输入输出和处理csv格式数据,采用命令行安装

1
conda install pandas

或者通过Anaconda界面进行安装

安装matplotlib

3.3. 手动部署CUDA和cuDNN

若自动安装CUDA和cuDNN失败,也可选择手动安装部署CUDA。

首先需要更新自己的显卡驱动,此处不再赘述。

若要手动部署CUDA和cuDNN,必须遵循先CUDA后cuDNN的顺序。

首先前往官网(https://www.nvidia.com/)下载CUDA。

2023.04.22更新】官网下载页面和网址天天变,大家自己找一下把…

1
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_network

然后根据自己的实际情况选择相应的CUDA版本下载安装。

安装cuda2

手动安装CUDA后需要进行检查。win+R 输入 cmd 回车,打开命令提示符,输入

1
nvcc -V

若成功返回cuda版本等信息则表示安装成功。

CUDA版本

继续输入(其中路径自行根据CUDA安装路径调整)

1
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\demo_suite

然后输入 deviceQuery.exe,执行此程序。出现 PASS 即表示CUDA安装成功。

CUDA版本

然后,前往此处(https://developer.nvidia.com/cudnn ),点击 “Download cuDNN” 按钮下载cuDNN。下载前需要注册账号并登陆。注意,cuDNN版本与CUDA版本间存在匹配关系,下载时一定要注意。

下载解压后得到的文件直接覆盖到CUDA安装路径,如下图所示。

CUDNN安装

3.4. 测试

在环境中启动终端,激活 pytorch 安装的环境

1
conda activate [name_of_your_env]

输入

1
python

启动python环境。

12.test1

检查pytorch是否能够正确调用GPU驱动和是否能够启用CUDA,输入:

1
2
import torch
torch.cuda.is_available()

返回 True 即可。

14.test3

然后一行行输入以下命令

1
2
3
from __future__ import print_function
x = torch.rand(5, 3)
print(x)

上面的代码用于产生一个5行3列的随机矩阵(张量),输出应该为下面类似的形式

1
2
3
4
5
tensor([[0.3380, 0.3845, 0.3217],
        [0.8337, 0.9050, 0.2650],
        [0.2979, 0.7141, 0.9069],
        [0.1449, 0.1132, 0.1375],
        [0.4675, 0.3947, 0.1426]])

13.test2

推出 python

1
exit()

4. 常见错误

4.1. RuntimeError:An attempt has been made…

1
2
3
4
5
6
7
8
RuntimeError:An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
 
        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:
 
            if __name__ == '__main__':
                freeze_support()

出错的位置一般在如下位置

1
for i, (inputs, labels) in enumerate(train):

解决办法是,在包含这个 for 循环的训练函数前面,包上 main 函数 if __name__=="__main__":。因为在 Windows 中,多线程程序要放在主函数中训练。而前面的 train 数据集很可能来源于另一个 .py 文件进行处理的结果,如

1
2
3
4
5
if __name__ == '__main__':
  train = torch.utils.data.DataLoader(
      DATA(root, train=True, transform=transform),  # from DATA.py
      batch_size=batch_size, shuffle=True, **kwargs)

requires_grad 与 requires_grad_ 混淆

  • 所有的 tensor 都有 .requires_grad 属性,可以在初始化时设置这个属性
1
x = tensor.ones(2,4,requires_grad=True)
  • 如果想改变这个属性,就调用 tensor.requires_grad_() 方法
1
x.requires_grad_(False)

5. 参考文献

[1] Sunnyside_Bao. Anaconda+vscode+pytorch环境搭建.

本文由作者按照 CC BY 4.0 进行授权