上一章我们简要谈了PyTorch到底是什么?这一章我们将简要谈谈PyTorch的安装指南。
关于本系列文章的相关声明
创作声明
本系列的内容创作分为如下三个部分:
-
个人阅读文档之后的理解
-
对原文档的部分翻译
-
无关紧要部分的AI辅助创作
-
部分相关信息的引用及二次创作
本系列的图片来自于:
-
PPT图形制作
-
幕布思维导图工具
-
AI绘画辅助创作
-
网络(如侵权,请联系作者删除)
在此向人类艺术家与一切内容创作者,AI科学家与工程师,程序员团体致以最崇高的敬意。
费曼学习法声明
费曼学习法(Feynman Technique)是一种通过将所学知识用简单明了的语言解释给别人听来加深自己的理解和记忆的学习方法。这种方法最初由物理学家理查德·费曼(Richard Feynman)提出。
费曼学习法的基本思想是:将所学知识用自己的语言表达出来,以便理解、记忆和应用。
瞳君通过边学边创作的方式,将所学知识用简单明了的语言解释给大家,以加深自己的理解和记忆。由于个人理解的局限性,创作内容可能存在错误,欢迎各位专家批评指正。
实验&创作就是失败,失败就是学习,学习就是进步。
原创声明
本系列下的文章引用皆包含出处,未包含出处的皆为瞳君原创@搞知识的觉之瞳,遵循相应平台的相关协议进行分发。如需转载,请根据相关平台的内容规定进行转载。
动动手指点击关注,这是免费的,而且你也可以随时改变主意,享受你的阅读吧!
It's free and you can always change your mind, enjoy your reading!
首先,我们需要缕一缕PyTorch的依赖情况:

声明:其实这样的定义并不算很严谨,因为该模块拥有自己的c++前端,归根到底,在没有进行源码分析之前,瞳君认为绿色部分的编程语言应该是该模块的一个前端,而该模块作为后端。相当于PyTorch在后面都帮你把事情做好了,然后呈现的工作交给了编程语言
就像分组讨论,课堂上你们小组讨论的人肯定不止一个,但是站起来发言的人一定只有一个。这就是后端和前端的区别了,后端是那些讨论的人,他们负责讨论并总结出重要信息,前端是站起来发言的那一个,负责把信息呈现出来。
如图,PyTorch依赖于Python,C++,Java,同时由于PyTorch似乎使用了C进行加速(存疑,待源码解析验证),并且其GPU搭建依赖于底层的显卡硬件,因此同时又受到底层操作系统平台与显卡体系的影响。换而言之,底层操作系统平台与显卡体系的不同会影响到该模块的安装情况。同时包管理软件的不同也会影响到该模块的安装。
目前PyTorch对于平台,显卡体系,编程语言的支持情况如下:
| 目标 | 支持情况 |
|---|---|
| 操作系统平台 | Linux,Mac,Windows |
| 运算体系 | CUDA,ROCm,CPU |
| 编程语言 | Python,C++,Java |
| 构建形式(对于Python) | Conda,Pip |
| 构建形式(对于C与Java) | LibTorch,Source(从源代码构建) |
关于LibTorch,Pip,CUDA,ROCm与Conda
LibTorch
LibTorch是PyTorch的C++前端,它是一个用于C++编程的机器学习库。PyTorch是一个流行的深度学习框架,LibTorch提供了一个在C++中构建和运行PyTorch模型的方法。
LibTorch可以作为一个独立的库使用,也可以与其他C++库和框架集成。它提供了一个高效的C++接口,使得在C++中使用PyTorch变得更加容易。使用LibTorch,你可以在C++中加载和运行PyTorch模型,以及进行前向推理和反向梯度计算等操作。
LibTorch支持多种硬件架构和操作系统,包括CPU、GPU、Linux、Windows和macOS等。它还提供了一些工具和API,如Tensor API、Autograd API和Dataloader API等,以帮助C++开发人员更好地构建和训练深度学习模型。
说白了,这货是C++版PyTorch库。
Pip
Pip是Python语言的一个包管理工具,用于安装、管理和卸载Python软件包。它可以从Python Package Index(PyPI)等不同来源获取Python软件包,并自动解决依赖关系。
Pip是Python标准库之外的一个第三方工具,可以通过命令行界面使用。使用Pip,你可以轻松地安装、更新和卸载Python软件包,也可以查看已安装的软件包列表、版本和依赖关系等信息。
Pip支持各种操作系统,包括Windows、Linux和macOS等。它是Python社区中最流行的包管理工具之一,被广泛应用于Python开发和数据科学领域。
说白了,还记得我们之前举的管家和采购商的例子吗?这货是采购商的一种,它采购的范围仅限于Python模块,换句话来讲,如果你的管家想使用C语言编写出来的工具箱,用这位管家去采购是不一定可行的(这句话并不严谨,仅供理解)
Conda
Conda是一个流行的开源软件包管理系统和环境管理系统,用于在多种操作系统上安装、管理和升级软件包。它是Anaconda发行版的核心组件之一,也可以独立使用。
Conda可以用于安装和管理Python包、R软件包和其他各种软件包。它可以在不同环境之间切换,以便在同一系统上运行不同版本的软件包。这种能力使得Conda成为一个流行的数据科学工具,因为它可以帮助数据科学家在不同项目和环境下管理和使用不同的软件包,而不会发生版本冲突或其他问题。
Conda还提供了一些其他有用的功能,如自动解决软件包依赖关系、创建和共享环境、安装和管理虚拟环境、备份和恢复环境等。这些功能可以帮助用户更好地管理和维护他们的软件包和环境。
说白了,还记得我们之前举的管家和采购商的例子吗?这货就是采购商的一种,他采购的范围比楼上那位大的多,楼上那位只能采购python模块,他能采购的似乎并不止。
CUDA
CUDA是英伟达公司开发的一个并行计算平台和编程模型,用于在NVIDIA GPU上进行高性能计算和深度学习训练。CUDA使得程序员可以通过使用C语言、C++或Python等编程语言来利用GPU进行并行计算,以加速计算任务的处理速度。
CUDA平台包括一个CUDA编译器、CUDA运行时库和一个CUDA工具包。使用CUDA编程模型,程序员可以将计算任务划分为多个线程,同时利用GPU的并行性来加速计算,从而获得更快的计算速度。
CUDA广泛应用于科学计算、图像处理、计算机视觉、自然语言处理、深度学习等领域。它被视为一个领先的高性能计算和深度学习平台,因为它可以通过利用GPU的高并行性来加速大规模计算任务的处理。
同样还是以管家和采购商的例子来讲,这次采购商采购给管家的并不是工具箱,而是一位代理商,你跟管家下发的命令,管家分类之后将代理商专精的命令交给代理商做,代理商做完之后再把结果返回给管家,管家把结果返回给你。在这里:管家是PyTorch,代理商是CUDA,如果使用了依赖于CUDA的方法构建了PyTorch,那么在遇到需要显卡加速计算的情况时,如果指定了显卡加速计算,管家(Python with PyTorch)就会把任务丢给代理商(CUDA)进行计算,计算完之后管家会收到任务完成的结果,并进一步进行处理。
这货是英伟达的代理商,电脑是英伟达显卡的情况下才能大展身手
ROCm
ROCm是AMD公司开发的一个并行计算平台和编程模型,用于在AMD GPU上进行高性能计算和深度学习训练。ROCm提供了一种开放的、可移植的编程模型,使得程序员可以在多种AMD GPU架构上进行高效的并行计算。
ROCm平台包括一个ROCm编译器、ROCm运行时库和一个ROCm工具包。使用ROCm编程模型,程序员可以将计算任务划分为多个线程,同时利用GPU的并行性来加速计算,从而获得更快的计算速度。
ROCm广泛应用于科学计算、图像处理、计算机视觉、自然语言处理、深度学习等领域。它被视为一个领先的高性能计算和深度学习平台,因为它可以通过利用AMD GPU的高性能和灵活性来加速大规模计算任务的处理。
说白了,跟上面那位的地位是一样的,他也是代理商,只不过是AMD的代理商,电脑是AMD显卡且必须携带Linux系统的情况下才能大展身手
其他的专业术语就不用提了吧~
Linux是什么?。。。。。。好吧,最后提一嘴(AI时代建议简单问题问GPT去)
Linux
Linux是一种自由和开放源代码的操作系统,它以GPL(通用公共许可证)作为许可证发布。它是一个多用户、多任务、支持多种处理器架构的操作系统,可以运行在各种设备上,包括个人电脑、服务器、移动设备等。
Linux最初是由芬兰学生Linus Torvalds于1991年开发的,它是基于Unix操作系统的设计理念和思想,但是与Unix不同的是,Linux是一个自由和开放源代码的操作系统,任何人都可以查看、修改和分发它的源代码。
Linux有许多不同的发行版,如Ubuntu、Debian、Fedora、Red Hat等,每个发行版都有自己的特点和优势。Linux发行版通常包含一个Linux内核、一组GNU工具和其他应用程序,如文本编辑器、图形界面、网络应用程序等。
Linux具有许多特点,包括强大的网络支持、高度可定制性、良好的安全性、良好的兼容性等。它也被广泛应用于各种领域,如服务器、超级计算机、网络设备、移动设备、嵌入式设备、桌面计算机等。
说白了,跟windows一个地位的东西,但是可以不用图形化界面。所谓没有图形化界面,你可以点击你电脑左下角的搜索找一找cmd,打开这个程序后,全屏这个程序,Linux没有图形化界面就大概是这个样子的
前置准备
在安装PyTorch时,你需要有一些前置准备:
-
检查操作系统的情况
-
检查显卡配置情况
-
安装一类Torch前端
-
安装其他官网说明的相关配置
检查操作系统的情况
首先最简单也是最重要的就是要确定你的操作系统到底是什么,照道理来讲,你买电脑的时候就应该知道电脑里预装的是什么操作系统了,绝大多数都是windows,部分苹果电脑可能是MacOS
(当然也有可能是你自己的组装机这种情况可能开局是Linux,但是这种情况你就应该是个熟知电脑的大佬了,也不需要我多说什么了)
一些小方法
-
Windows操作系统:在桌面上,右键单击“此电脑”或“我的电脑”图标,然后选择“属性”选项。在打开的窗口中,你可以看到你的Windows版本和其他详细信息。
-
macOS操作系统:在菜单栏上,点击“”图标,然后选择“关于本机”选项。在打开的窗口中,你可以看到你的macOS版本和其他详细信息。
-
Linux操作系统:打开终端,输入“lsb_release -a”命令并按回车键。在命令输出中,你可以看到你的Linux版本和其他详细信息。
-
Android操作系统:在应用程序菜单中,找到“设置”应用程序,然后选择“关于手机”或“关于设备”选项。在打开的窗口中,你可以看到你的Android版本和其他详细信息。
-
iOS操作系统:在主屏幕上,打开“设置”应用程序,然后选择“通用”选项。在打开的窗口中,你可以看到你的iOS版本和其他详细信息。
同时你也要确定一下官网上显示的配置支持情况,如果要是你的电脑系统配置实在是太低了,以至于运行不了这个模块,那就没办法装了
以下配置内容引用自Start Locally | PyTorch
对于Windows:
支持windows7以上的,最好是windows10 对于Windows Server而言,支持2008 R2及更高的情况
PyTorch is supported on the following Windows distributions:
-
Windows 7 and greater; Windows 10 or greater recommended.
-
Windows Server 2008 r2 and greater
对于Linux:
支持使用 glibc>=2.17版本以上构建的Linux系统,包含了下面所述的发行版本,这里不一一翻译了
PyTorch is supported on Linux distributions that use glibc >= v2.17, which include the following:
-
Arch Linux, minimum version 2012-07-15
-
CentOS, minimum version 7.3-1611
-
Debian, minimum version 8.0
-
Fedora, minimum version 24
-
Mint, minimum version 14
-
OpenSUSE, minimum version 42.1
-
PCLinuxOS, minimum version 2014.7
-
Slackware, minimum version 14.2
-
Ubuntu, minimum version 13.04
对于Mac:
PyTorch 在 macOS 10.15 (Catalina) 或更高版本上受支持。
PyTorch is supported on macOS 10.15 (Catalina) or above.
引用结束
检查显卡配置情况
检查完了操作系统的支持情况,你还需要检查显卡配置的相关情况,显卡在国内分为两大类,一类是AMD显卡,还有一类是英伟达显卡(英特尔显卡没有存在感),刚刚我们引用了管家,采购商,代理商的例子,目前pytorch支持的显卡体系,只有AMD和英伟达。因此你首先要做的就是确定你的电脑上安装的到底是哪一类显卡。
下面提供了两类方式用于确定电脑的显卡类型:
点击式
在Windows操作系统中,可以按照以下步骤进行:
-
右键单击桌面上空白处,选择“显示设置”或“屏幕分辨率”选项。
-
在打开的窗口中,选择“高级显示设置”或“高级显示选项”选项。
-
在高级显示设置或高级显示选项窗口中,选择“显示适配器属性”或“显卡属性”选项。
-
在显示适配器属性或显卡属性窗口中,你可以看到你的显卡类型和其他详细信息,例如制造商、型号、驱动程序版本等。
在macOS操作系统中,你可以按照以下步骤进行:
-
选择“关于本机”选项。
-
在打开的窗口中,选择“系统报告”选项。
-
在系统报告窗口中,选择“图形/显示”选项。
-
在图形/显示选项下,你可以看到你的显卡类型和其他详细信息,例如制造商、型号、驱动程序版本等。
在Linux操作系统中,你可以打开终端,输入“lspci | grep VGA”命令并按回车键。在命令输出中,你可以看到你的显卡类型和其他详细信息,例如制造商、型号、驱动程序版本等。
命令式
通过使用"nvidia-smi"命令来查看NVIDIA显卡的详细信息,例如显存使用情况、功耗、温度等。
AMD显卡目前找不到相关的命令可以判断
(但其实没有英伟达显卡,基本上深度学习可以判半个死刑了,一般通用的都是英伟达显卡)
安装一类PyTorch前端
接下来你要做的就是安装一类PyTorch前端,这里我们回顾一下刚刚我在图片底下写的碎碎念:
声明:其实这样的定义并不算很严谨,因为该模块拥有自己的c++前端,归根到底,在没有进行源码分析之前,瞳君认为绿色部分的编程语言应该是该模块的一个前端,而该模块作为后端。相当于PyTorch在后面都帮你把事情做好了,然后呈现的工作交给了编程语言
这里我们要再套一层,同样以管家和采购商的例子来说,管家现在找采购商要求说采购一套能够用于深度学习的工具箱,采购商说没问题,但是采购来的不是个工具箱,而是个代理商A(pytorch),这个代理商说要我做事情没问题,但是呢,关于深度学习加速的部分,我需要委托给另外一个代理商B(CUDA or ROCm)来做,于是乎,你的命令下发给管家(python),管家将涉及到pytorch的相关操作交给了代理商A,代理商A将涉及到深度学习加速运算的部分交给了代理商B,于是乎,代理商B把活做完,然后回传给A, A回传给管家,管家回传给你,就完成了深度学习的一个基本流程。
(但其实这里还是不够严谨,因为代理商B在收到任务的时候也不是自己做的,他实际上是转交给了更底层的家伙来干活,所以说这里的部分应该还要再嵌套一层,但是这里就不详细展开了,等到了之后解析英伟达的部分再说)

好了,回到前端的话题上来,所以这个地方就有一个前后端的关系,我们从管家的视角来看,代理商a是管家角度的前端,因为管家和代理商a是直接交流的,他并不管代理商a在接到任务之后在后面干了些什么。而代理商b于管家而言则是后端,因为管家不知道代理商b的存在,他也不知道代理商b干了些什么。
然后现在我们从用户的视角来看,对于用户来说管家就是前端,因为用户直接与管家进行交流,而不知道背后有代理商,而从用户的视角来看代理商a和b均是后端,因为用户不知道二者的存在,也不知道他俩到底干了些什么。
那这么一说,其实编程语言归根到底来讲就是一个前端,所以我们这边写的并不是要找一个编程语言,而是去找一类前端的原因就是这样。 话说回来,PyTorch的前端有C++,Python,Java三类,因此我们在安装时,电脑上首先得有这三类软件的其中一个。至于这仨怎么安装嘛,无非大体上就遵循以下这几个流程:
-
官网或者二次分发商处(Anaconda,Miniconda,Oracle Java)下载安装包
-
根据安装包上的指示进行安装到指定的目录或者是直接解压到某个目录(对于c来讲可能是直接解压)
-
完成安装之后将执行程序的路径放到一个叫环境变量的位置里(环境变量可以理解成昵称,通过叫昵称可以直接摇人,不需要叫全名(具体的路径,长长的一串))(如果没有这个过程,说明安装包自己帮你干了,anaconda就是这样)
-
完成配置,电脑重启
安装其他官网说明的相关配置
由于内容撰写具有时效性,因此看到本文的你,不知道是已经猴年马月还是什么时候了,这种情况建议直接去官网一看查看一下,还有没有什么更新的配置。
传送门(不排除10年后失效可能性):Start Locally | PyTorch
现在是,安装时间!
这边我们以Python为例进行讲解,首先你需要下载一个anaconda(对于新手而言),对于已经熟悉conda的老手而言,直接下miniconda。按照网络上的讲解安装完毕之后,你的电脑里就有了一个默认Python环境,接下来你要创建一个虚拟环境,用来放置PyTorch
创建环境的命令:conda create -n 环境的名字
安装界面大概长下面这个亚子:

第1行选择要安装的版本,一般有稳定版和前瞻版两种选择,前者稳定,后者不稳定,但有新特性,自行选择。可以再往上划一划,找到之前的版本进行安装。
第2行选择你的操作系统operate system,这个之前提过了。
第3行选择你的包管理软件
-
对于使用C++进行搭建的,可选项只有LibTorch与Source
-
对于使用原版Python进行构建的,只能选择pip
-
对于使用了anaconda与miniconda进行搭建的,可以选择conda或pip,建议创建一个虚拟环境(conda create -n 环境的名字),然后通过conda进行安装。
第4行选择你的安装语言,有Python和Java/C两种选择,一般选python
第5行选择计算平台,计算平台的前三类是显卡,后一类是CPU,其中显卡的前两类是英伟达的显卡工具库版本,后一类是AMD的显卡工具库版本。注意AMD的显卡工具库支持仅在Linux系统下可用。
等你把上面的选项都选好之后,底下的run this command就会有一行命令,直接把这行命令复制到你的命令行运行就可以了,当然在命令运行之前,你还需要激活你的环境。激活环境的命令如下:
首先,打开cmd,然后输入:
conda activate 你的环境名字
如果这串命令显示conda找不到,检查一下环境变量配置了没有,conda其实是你安装的路径下conda.exe的昵称,如果配置的环境变量,那么这个昵称就是可用的,你喊一声他就来了,如果你没有配置环境变量,那么系统就找不到这个东西。所以自然而然也就没有反应。
当然你也可以指定完整的路径,例如D:/xxxx/xxxx/..../conda.exe,但想必这样是非常麻烦的,不建议。
之后只要等待安装完成就可以了。
关于安装过程中的一些细节
接下来我们需要探讨一些安装过程中的细节,也就是关于不同包管理软件,他到底是如何进行安装的? 用大白话讲,也就是接下来我们要探讨一下各位代理商们的能力了。 这里我们要用到一个东西来做实验,他就是大名鼎鼎的docker。
什么是docker?
这个话题说不定以后会详细介绍的,所以这边我就简单介绍一下:
当你在安装一个软件时,这个软件也许需要要求非常多的环境,众所周知,一个软件的运行是有非常多的依赖的,毕竟程序员不可能通过01来完成一整个windows系统的编程(除非是大佬),也就是说一个软件的运行,它可能依赖着另外一些软件,当我们在使用主要的那一个软件时,我们需要配置这个软件所拥有的一系列其他支持,也就是这个软件运行所必要的其他软件。
用大白话来讲,我们同样以管家和采购商的例子来说,采购商买来的工具包肯定不是一个箱子而已,箱子里面肯定还有其他的一系列套件,而这些套件又被装在一系列的小盒子里分门别类的摆放着,这些小盒子,就是这整个工具箱的依赖,没有这些小盒子,整个工具箱就没法顺利的运转起来,因此采购商在采购工具箱的时候,或多或少都会把工具箱的依赖采购全,以防造成不必要的麻烦。
但是对于不同的包管理软件,也就是对于不同的采购商而言,他的采购方式和买回来的东西可能是不一样的,甚至对于不同的电脑和平台而言,采购回来的东西也会有所不同。那既然出现了这样麻烦的情况,一个程序在你的电脑上跑得通,在我的电脑上或许他就歇菜了。为了解决这种麻烦的问题,程序员们搞出了一个叫容器化的思想。
这边我们讲的通俗一点,容器话其实可以理解成把一个工具箱放在一个专门的工具房间,然后这个工具房间专门用于服务于管家执行的某一功能,这样不同的事物就可以放在不同的房间里面进行工作,不同的房间里面有着分门别类的工具箱,管家在使用工具箱进行业务的时候,只要进入到不同的房间,其他房间的工具箱,就不会对管家的工作造成影响,也就不会出现工具乱放乱摆的情况。
形象一点嘛......类似于下图:

不好意思放错了,应该是这图(不过领域的概念和容器的概念也差不多,只要处在自己的领域里面,就不会被其他的领域干涉)

(每个工作区域是互不干涉的)
所以我们通过这玩意可以非常快速的部署一个环境,并直接对这个环境里面的一些特性进行测试,测试完之后不要的环境可以直接扔了,也不用担心卸载之后存在安装残留等等的问题。
接下来我们开始测试安装情况,值得注意的是,docker里面的任何软件的安装均是基于Linux系统的,因为docker的软件设计是依赖于Linux虚拟机的,因此安装上去的都是Linux版本,windows版本这里就不多做测试了,因为对于跨平台的语言来说(python),二者应该是差不多的。
下面我们仅对conda与pip这两个包管理软件进行测试,因为大部分安装的时候是通过这两个包管理命令进行安装的。 (你想从源码构建也可以,那说明你是个大佬doge)
计划的方法
第一步,整一个docker容器:

第二步,docker容器内部装着conda:

第三步,conda内部整两个个虚拟环境,一个用来测试,另一个安装virtualenv(python虚拟环境包)

第四步,通过virtualenv再整一个环境用于测试pip安装:



最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



