深度学习环境配置系列文章(一):专业名称和配置方案介绍

深度学习环境配置系列文章目录

第一章 专业名称和配置方案介绍
第二章 Anaconda配置Python和PyTorch
第三章 配置VS Code和Jupyter的Python环境
第四章 配置Windows11和Linux双系统
第五章 配置Docker深度学习开发环境



前言

人工智能的学习需要理论知识和编程能力同步开展。理论知识主要指的是高等数学、线性代数、概率论这些基础数学知识,这些是理解模型算法的先决条件。编程能力指的是编程语言、编程框架的运用,是实现算法、验证模型的手段,也是解决生活中实际问题的基础。两者相辅相成,缺一不可。理论精、编程弱,就如纸上谈兵,空有想法而不得验证;编程精而理论弱的人难有创新,现实中常被称为调参侠。本章主要介绍深度学习的环境配置,包括常见的专业名称介绍以及配置方案,是学习编程的第一步。


一、专业名称介绍

深度学习是实现人工智能的手段,本质上是一些数学算法。我们需要用编程的方式将这些数学公式编写进计算机,成为计算机解决问题的方法。不管是在编程环境配置,还是在编程开发过程中,我们经常会听到很多的专业名称。这里先对这些名词做解释,然后手把手地带领大家配置深度学习的开发环境。

1.Python

Python作为一门编程语言,这门语言的魅力和影响力已经远超C++、C#等编程语言前辈,被程序员誉为“美好的”编程语言。Python可以说是全能的,可以用于系统运维、图形处理、数学处理、文本处理、数据库编程、网络编程、Web编程、多媒体应用、PYMO引擎、黑客编程、爬虫编写、机器学习、人工智能等各种应用领域。如果想要深入学习Python,可以参考第三章的详细介绍和入门学习。

2.Anaconda

Anaconda是开源的Python发行版本,里面包含了Python、Conda(一个开源的软件包管理系统和环境管理系统)和各种用于科学计算的包,可以完全独立地使用,无须额外下载Python。
使用Anaconda的最大好处是它引入了虚拟环境的概念,每个环境都是相互隔离的,可以设置不同的Python版本和各种包,与系统不会发生冲突,可以方便地切换或删除整个环境。例如,当我们手头有两个Python项目:一个项目需要Python2版本,另一个需要Python3版本。如果同时在电脑中装载这两个不同版本的Python,就会产生冲突。但是,使用Anaconda可以创建两个隔离的虚拟环境,分别安装这两个版本的Python,以解决这个问题。Anaconda的安装方法详见2.2节。

3.PyTorch

PyTorch于2016年首次推出。在PyTorch之前,深度学习框架通常只注重速度或可用性,而不能兼顾二者。PyTorch将可用性和速度考虑结合在一起,它提供了一种命令式和Python编程风格,支持将代码作为模型,使调试变得容易。此外,它还支持GPU等硬件加速器。
PyTorch是一个基于Python 的库,它通过自动微分和GPU加速执行动态张量计算,同时保持与当前最快的深度学习库相当的性能。大部分 PyTorch的核心代码都是用C++编写的,这也是PyTorch与其他框架相比可以实现低得多的开销的主要原因之一。由于其能够大幅缩短特定用途的新神经网络的设计、训练和测试周期,因此PyTorch在研究界非常流行。
可以与PyTorch分庭抗礼的另一个深度学习开源框架是Google开发的TensorFlow。以下是这两个框架的一些对比。
1)TensorFlow和PyTorch在准确性方面表现相当,但是TensorFlow的训练时间要长得多,然而内存使用量要少一些。
2)PyTorch允许比TensorFlow更快的原型设计,但如果神经网络中需要自定义功能,TensorFlow可能是更好的选择。
3)TensorFlow将神经网络视为静态对象,即如果你想改变你的模型的行为,你必须从头开始。而使用PyTorch,可以在运行时动态调整神经网络,从而更容易优化模型。
4)PyTorch和TensorFlow都提供了加速模型开发和减少样板代码量的方法。然而,PyTorch基于面向对象的方法,更加“Pythonic”。与此同时,TensorFlow提供了更多可供选择的选项,因此总体上具有更高的灵活性。
5)2015年11月9日:TensorFlow1.0发布,引起了大量深度学习研究者们的追随。然而,2016年发布的PyTorch是一匹黑马,用户体验度和文档易读性方面都优于TensorFlow,追随者人数甚至一度反超TensorFlow。直到2019年TensorFlow2.0发布后,两个框架似乎又回归平衡,各有优劣。
6)PyTorch的入门学习详见3.6节。

4.VS Code

VS Code是微软主推的轻量级代码编辑器,本身只包含必要的配置和功能。但是,VS Code配合大量的插件可以实现很多特殊功能,例如Python解释器、远程连接器、PDF阅读器等,使得VS Code的生态变得非常丰富。安装Python插件后,可以编译Python代码,相较于Jupyter,VS Code更适合用于项目开发或日常脚本编写,是全能型集成开发环境平台(IDE)。同时VS Code也支持Jupyter Notebook,通过下载插件的方式就可以实现。实际上,VS Code的插件库非常庞大,这使得VS Code几乎可以扩展到满足绝大多数编程需求,并且是免费使用的。美中不足的是,当下载插件过多时,增加插件时可能出现延迟和错误。
除此之外,还有两个常用的编辑平台:Jupyter Notebook和PyCharm。
Jupyter是近年流行起来的开发工具,基于IPython交互式命令行界面,主要应用于数据分析、机器学习。Jupyter实际上是一个web应用,可以在浏览器上编写Python代码,即写即运行,适用于数据探索分析。虽然Jupyter数据开发模式很方便,但是它的使用场景有一定限制,不适合脚本编写和项目开发,并且在调试等功能方面还需要改进。
相对上面两个IDE,PyCharm的体积较大、对硬件消耗较高、不够轻便。此外,PyCharm分为社区版和专业版,专业版需要付费。当然,PyCharm也有它的优点,PyCharm是专业的Python开发工具,所以在开发功能上比VS Code更强大,但VS Code胜在拓展强,类似于安卓,而PyCharm则更像iOS。
VS Code的下载和安装详见2.3节。

5.Linux

大家可能听说过在Linux上进行编程的优势,相较于Windows,程序员更频繁地使用它。当然,基于Linux内核的操作系统是免费和开源的,这与Windows相比是一个巨大的优势,但对于编程来说,最主要的优势是什么?
下面,我们将解释为什么Linux更适合编程,并讨论Linux系统相对于Windows的主要优势。
1)容易配置开发环境
Linux的体系结构使得配置编程环境变得非常容易。Eclipse、LightTable、Sublime Text、Brackets、DartEditor、VS Code、KDevelop、Geany IDE和NetBeans等都是Linux的代码工具,还有Shell Check能够识别不规范的写法,以及Axel多线程下载工具等。当然,Docker和WSL在过去几年出现,使得在Windows中设置编程环境和检查程序变得更加容易,但在Linux中更容易做到这一点。
2)一个完整的终端
终端是Linux的一大优势。自Unix时代以来,开发了一套控制台工具和它们之间的交互方式。例如,“grep”命令可以搜索很多文件,而“find”命令实用程序允许用户按名称、权限和修改日期进行搜索。如果想在不使用集成开发环境的情况下查看其他人的项目并找到一些功能,所有这些都非常有用。
3)生产就绪环境
如果不是为桌面开发应用程序,而是用Java编写Web应用程序或企业解决方案,那么它们将来很可能会在Linux服务器上运行。Windows和Linux完全不同,在Windows上运行的东西在Linux服务器上可能无法运行或无法正常运行。这就是为什么生产就绪环境也很重要和方便的原因。
4)安全性
相对于Windows,Linux的安全性无可比拟。目前看来,与Mac和Windows相比,Linux的病毒数量非常少。这是因为Linux的代码开源,全球技术社区会共同努力发现和修补漏洞,使大多数漏洞被消除。此外,Linux的操作系统也是开源的,因此许多Linux版本都会添加一些安全设置,可以通过及时的更新补丁来进一步增强安全性。最后,Linux执行每一个应用程序和病毒都需要密码形式的管理员授权,一般的病毒难以执行,更不可能自动安装,因此,安全性相对于Windows更高。
5)开源性
李纳斯•托瓦兹开发的Linux只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理和网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心,再根据自己的喜好进行桌面环境设计,就构成了市面上不同种类的发行版,例如Gentoo Linux特点是高度的自制,因此,此发行版也更适用于Linux高手使用;Ubuntu Linux由于对硬件的支持度较大,此版本也广受大众喜欢。Debian和Fedora则更适合于技术较好的程序员。Linux发行版中有上百种不同风格的操作系统,用户可以根据自己的喜好,选择适合自己的操作系统。
6)性能稳定
Linux可以持续长时间运行且运行速度不会减慢,而Windows在长时间运行下,运行速度会相对减慢。Linux对网络功能提供支持,可以更加便捷地进行服务器设置。此外,Linux可以运行几乎所有格式的文件。
通过以上的介绍,我们可以看到在Linux系统上编程的好处。当然,如果你已经使用Windows系统很长时间,并不想完全转向Linux,那么也可以通过在Windows系统中使用WSL2来配置Linux子系统。在接下来的第2.4节中,我们将介绍如何进行配置。

6.WLS

作为一名合格的程序员,无论是在Linux系统下写代码、编译还是调试都是必不可少的。但是很少有同学会直接使用Linux真机作为工作平台,除非是利用远程服务器来编译的场景。更普遍的使用场景是:在一台Windows/Mac系统中,安装虚拟机,然后在虚拟机中安装Linux操作系统。Windows系统中常用的虚拟机有:VirtualBox、VMWare,Mac系统中则通常使用Parallels Desktop。
在Windows系统中,还有一种安装Linux系统的方式,既WSL,全称为Windows Subsystem for Linux。WLS是微软公司开发的Linux子系统,是一个独立完整的并行在Windows系统上的Linux系统。它可以让开发人员直接在Windows原样运行GNU/Linux环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。
另一种实现方法是在本机上直接安装双系统,在开机自启时可以选择启动Window系统或Linux系统。不过这里不建议这么做,因为双系统的安装很麻烦,而且容易出错,因为涉及一些硬件配置的问题,例如主板型号等,由于电脑品牌的不同,操作也不同。
这三种方法的简单对比如下。
方便性:WSL>虚拟机>双系统
性能:双系统>虚拟机>WSL
使用开销:双系统>虚拟机>WSL

7.Docker

Docker是一个开源的应用容器引擎,它允许开发者将他们的应用程序以及依赖包打包到一个可移植的容器中。该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必要资源。通过使用容器,可以实现方便、快速、解耦的自动化部署方式。无论在哪个环境下进行部署,容器中的应用程序都能在同样的环境中运行。简单来说,经过Docker封装的项目可以直接从开发平台移植到应用平台或其他的开发平台上,而不需要重新配置任何开发执行环境。
Docker的五大优势。
1)更高效地利用系统资源
Docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。
2)更快速地启动
传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无须启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发测试,部署的时间。
3)一致的运行环境
开发过程中常见的一个问题是环境不一致,由于开发环境,测试环境,生产环境不一致,导致有些Bug并未在开发过程中发现。而Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会再出现“这段代码在我机器上没问题”这类情况。
4)更轻松地迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易地将一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
5)更轻松地维护和拓展
Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker团队同各个开源项目团队一起维护着一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大地降低了应用服务的镜像制作成本。

二、Window配置PyTorch深度学习环境初级方案

首先,在Window下配置环境深度学习环境需要完成以下基础配置。

  • 1.选择环境管理器:这里建议选择Anaconda进行Python的环境管理,详见系列文章第二章。
  • 2.选择深度学习框架:这里建议选择PyTorch深度学习框架,详见系列文章第二章。
  • 3.选择编辑平台:这里建议选择VS Code和Jupyter Notebook,基本可以满足绝大部分的深度学习开发需求,详见系列文章第三章。

完成以上三步,我们就完成了本地Window系统下的深度学习环境配置了。

三、Window配置PyTorch深度学环境进阶方案

注意,这一节的配置必须在完成上述基础配置后才能进行。我们将介绍通过WSL2配置Window和Linux双系统,并使用Docker对整体的开发环境进行封装,便于日后的环境迁移。

  • 1.使用WSL2实现双系统:Window11配置WSL2的详细步骤和常见错误,详见系列文章第四章。
  • 2.使用Docker封装开发环境,并使用VS Code连接Docker容器,详见系列文章第五章。

总结

本章介绍了深度学习环境配置中的常见概念,并推荐了初级和进阶两种环境配置的方案。

猜你喜欢

转载自blog.csdn.net/qq_39297053/article/details/130653119