AI学习(2): PyTorch2.x环境安装

news2024/9/23 9:37:20

1.介绍

@注:下面是对PyTorch进行了简单的介绍,不喜欢可直接跳过

1.1 什么是PyTorch

PyTorch是一个由Facebook人工智能研究团队开发的开源机器学习库,用于开发人工智能和深度学习的应用程序。PyTorch支持广泛的机器学习和深度学习算法,并基于强大的GPU加速计算库CUDA,提供了高效的张量计算(如数组计算)和深度神经网络功能。

PyTorch的主要特性:

  • 易用性PyTorch提供了一个类似于 NumPy的编程环境,以及全面的深度学习功能,使得神经网络的构造和训练都变得非常直观。
  • 动态计算图PyTorch使用动态计算图,这意味着您可以在运行过程中更改图形。这在某些模型(例如循环神经网络或递归神经网络)中非常有用,这些模型的结构可能需要在运行时进行更改。
  • Python支持PyTorch完全集成在 Python中,可以与其他 Python库(如 NumPyCython)无缝地协作。
  • 分布式训练PyTorch支持在多个 GPU上分布式的训练模型,可以有效地加速大数据集的模型训练过程。
  • ONNX兼容性PyTorch支持 Open Neural Network Exchange(ONNX)模型格式。这意味着您可以在不同的深度学习框架(例如 Caffe2、Microsoft Cognitive Toolkit、MXNet等)之间轻松迁移模型。

1.2 PyTorch发展史

  1. 初始发布(2016年): PyTorch最初由 Facebook的人工智能研究实验室( Facebook AI Research,简 称FAIR)开发,并于2016年首次发布。初始版本主要以动态计算图为特点,这使得定义和修改模型变得非常灵活。
  2. 动态计算图(2016-2017年): PyTorch最初的设计采用动态计算图,这使得用户能够更自由地调试和修改模型。这种灵活性对研究人员和实践者来说是一个吸引点,尤其在处理变化的输入大小时更为方便。
  3. 静态计算图的引入(2017年): 随着 TensorFlow等框架采用静态计算图的方式, PyTorch也在2017年引入了静态计算图的支持,这使得 PyTorch更适用于一些需要性能优化的应用。
  4. PyTorch 1.0(2018年): PyTorch 1.0的发布标志着一个重要的里程碑。它引入了 Eager Execution(即动态计算图)和TorchScript(即静态计算图)的融合,使得用户可以在训练和部署中选择合适的计算图方式。
  5. TorchServe和TorchElastic(2019年): 在2019年, PyTorch推出了 TorchServeTorchElastic,这是用于模型部署和分布式训练的工具,使得将PyTorch模型投入实际应用更为方便。
  6. PyTorch 1.7和Beyond(2020年以后): 后续版本不断改进性能、增加新特性,并推动 PyTorch在深度学习社区中的广泛采用。 PyTorch继续保持开源性质,积极响应用户需求和社区贡献。
  7. PyTorch 2.0(2023年3月): 推出新的编译器 torch.compile。它将 PyTorch的性能推向了新的高度,并开始将 PyTorch的部分内容从 C++中移回到 Python中。据称,使用 torch.compile对模型进行编译可以提升模型速度 30%

2.安装环境

2.1 安装python3.10

为了保证pytorch运行环境的干净,这里单独为其创建一个新环境。

# 安装
$ conda create -n pytorch310 python=3.10
# 激活环境
$ conda activate pytorch310
# 查看版本
$ python -V
Python 3.10.13

2.2 安装依赖包

$ conda install numpy  matplotlib
  • numpy 提供了强大的数组和矩阵操作,与 PyTorch 的张量操作兼容,常用于数据处理和转换。
  • matplotlib: 可视化训练过程中的损失曲线、模型输出、数据分布等;

这两个包的具体使用教程可查看文章:

  • Python常用库(六):科学计算库Numpy-上篇:创建、访问、赋值 https://mp.weixin.qq.com/s/b0aPs1VMh0l0QM2D_q1OHw
  • Python库学习(七):Numpy-续篇一:结构数组 https://mp.weixin.qq.com/s/ThdIwvSaUFZEWks1D0RYzw
  • Python库学习(八):Numpy-续篇二:数组操作 https://mp.weixin.qq.com/s/5VXpfL-P8b0Li3wn5BKu4w
  • Python库学习(九):Numpy-续篇三:数组运算 https://mp.weixin.qq.com/s/qtGHvB33-KewrUtIDU5JIw
  • Python库学习(十):Matplotlib绘画库 https://mp.weixin.qq.com/s/Pb0kO6R3Q7ejX6x51y4TPw

2.3 安装PyTorch

安装命令直接访问官网生成: https://pytorch.org

alt

@注意: 由于本人使用是Mac,没办法享受CUDA加速,后面在想办法体验~

# 运行安装
$ conda install pytorch::pytorch torchvision torchaudio -c pytorch

验证安装结果:

import torch
if __name__ == '__main__':
    print("torch版本:", torch.__version__)

# torch版本: 2.1.2

3.PyTorch核心模块

3.1 核心模块

PyTorch的核心模块主要包括以下几个部分:

  • torch 提供了张量( tensor)的基本操作,类似于 NumPy 数组。 PyTorch 中的张量是深度学习模型的基本构建块。
  • torch.nn 提供了构建神经网络模型所需的各种类和函数。包括神经网络的层、损失函数、优化器等。
  • torch.optim 包含了各种优化算法,例如随机梯度下降 (SGD)、Adam、RMSprop 等,用于优化神经网络的参数。
  • torch.autograd 实现了自动求导机制,允许用户定义的操作在反向传播过程中自动计算梯度。
  • torch.utils.data 提供了用于加载和处理数据的工具,包括 DatasetDataLoader 类,使得数据在训练时更容易进行批量处理。
  • torchvision 提供了处理图像数据集的工具,包括常用的图像变换、数据集加载等。
  • torchtext 用于处理文本数据的工具,包括加载文本数据集、文本变换等。
  • torch.nn.functional 包含一些不具有内部状态的函数,这些函数通常在神经网络的中间层中使用,例如激活函数、池化操作等。
  • torch.distributed 提供了分布式训练的工具,用于在多个 GPU 或多台机器上进行模型的训练。
  • torchaudio 用于处理音频数据的工具,包括加载音频数据集、音频变换等。

3.2 PyTorch2.0新模块

PyTorch 2.0中,引入了一些新的模块和功能:

  • TorchDynamo:Python代码 JIT编译成 FX图的新特性,可以提高模型训练速度。
  • AOTAutograd: 预编译自动求导函数的新特性,可以提高模型训练速度。
  • PrimTorch: 一个用于定义更小且更稳定的运算符集的新特性,可以提高模型训练速度。
  • TorchInductor: 一个用于为多个加速器和后端生成快速代码的新特性,可以提高模型训练速度。

4.版本介绍

上面我们安装的PyTorch版本的是2.1.2,后面学习也是基于这个版本;

4.1 Pytorch2.x Vs Pytorch1.x

以下是PyTorch 2.0PyTorch 1.x之间的主要区别:

  • 编译器支持: 在 PyTorch 2.0中,已经支持了编译器模式,可以提高模型训练速度。这是 PyTorch 2.0PyTorch 1.x之间的一个主要区别。
  • API更新: 在 PyTorch 2.0中,进行了一些API更新,以便更好地支持深度学习任务。这使得 PyTorch 2.0PyTorch 1.x之间的API使用有所不同。
  • 新功能: 在 PyTorch 2.0中,添加了一些新功能,如编译器模式、新的数据加载和预处理工具等。这使得 PyTorch 2.0PyTorch 1.x之间的功能有所不同。
  • 性能提升: 在 PyTorch 2.0中,实现了性能提升,如模型训练速度的提高。这使得 PyTorch 2.0PyTorch 1.x之间的性能有所不同。

4.2 PyTorch 2.x

PyTorch 2.0在 2023.03发布,对之前的1.x版本是100%兼容。

PyTorch版本发布历史信息中,可以看出PyTorch1.3版本之后,后面版本直接就到了2.0;为什么会有这么大的跳跃呢?官方解释如下:

PyTorch 2.0 is what 1.14 would have been. We were releasing substantial new features that we believe change how you meaningfully use PyTorch, so we are calling it 2.0 instead.

// 译文
PyTorch 2.0是1.14的延续。我们发布了一些重大新功能,我们相信这些功能会改变您对PyTorch的实质性使用方式,因此我们将其称为2.0而不是1.14

其中最重要的新功能是:torch.compile,据官方描述,其可以大幅提高模型训练速度。而且使用特别简单,仅仅是一行代码:model = torch.compile(model),下面是官方描述(==汉字是软件译文==):

alt

4.3 PyTorch2.0性能测试

为了验证PyTorch2.0带来的性能提升,官方从机器学习开源社区收集了163个模型,用于验证;

163个模型数据,具体来源如下:

  • 46 models from HuggingFace Transformers
  • 61 models from TIMM: a collection of state-of-the-art PyTorch image models by Ross Wightman
  • 56 models from TorchBench: a curated set of popular code-bases from across github

除了使用torch.compile对上述模型进行编译,不改其他代码的前提下,测试性能如下:

alt

微信搜索【猿码记】查看更多文章

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1397993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发系列教程(五)--ArkTS语言:组件开发

1、基础组件 组件API文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/84_u58f0_u660e_u5f0f_u5f00_u53d1_u8303_u5f0f_uff09-0000001427744776-V2 查看组件API 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 容…

gdip-yolo项目解读:gdip模块 |mdgip模块 |GDIP regularizer模块的使用分析

gdip-yolo是2022年提出了一个端到端的图像自适应目标检测框架,其论文中的效果展示了良好的图像增强效果。其提出了gdip模块 |mdgip模块 |GDIP regularizer模块等模块,并表明这是效果提升的关键。为此对gdip-yolo的项目进行深入分析。 gdip-yolo的论文可以…

Linux网络命令

一、网络配置命令 查看linux基础的网络设置: 网关:route -nIP地址:ifconfig ip aDNS服务器:cat /etc/resolv.conf主机名:hostname路由:route -n网络连接状态:ss 或 netstat域名解析nslookup ho…

【ARMv8M Cortex-M33 系列 7.2 -- HardFault 问题定位 1】

请阅读【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】 文章目录 问题背景堆栈对齐要求Cortex-M33 的 FPU 功能 问题背景 rt-thread 在PendSV_Handler退出的时候发生了HardFault_Handler是什么原因?且 LR 的值为0xfffffffd 堆栈对齐要求 在 ARM Cortex-M 架构中…

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址(含历史版本):https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1,安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料(Qt C…

air001研究笔记.基于arduino快速开发简单项目

一、air001芯片简介 air001是厂商合宙推出的一款tssop封装的mcu芯片。支持swd与串口烧录,多面向简单的功能简单类别的电子产品,因为官方文档齐全上手简易,所以也特别适合非专业爱好者乃至于幼儿编程。芯片内置资源:AIR001芯片数据…

蓝桥杯-最少刷题数

📑前言 本文主要是【算法】——最少刷题数的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#x…

微前端-无界wujie

无界微前端方案基于 webcomponent 容器 iframe 沙箱,能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户的核心诉求。 主项目安装无界 vue2项目:npm i wujie-vue2 -S vue3项目…

从零开始配置vim(Windows版)

事情是这样的,之前linux下vim用习惯了...然后就给自己win下vscode也装了个vim插件,用下来还是感觉不顺手,并且处理太多文本时有明显卡顿,于是乎自己配了下win版的vim。 不过好像也并不是从零开始的...初始基础版的.vimrc有copy他们…

【正点原子STM32连载】 第四十五章 内存管理实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四…

近期学习文章

DNSlog在渗透测试中的实战技巧 - 网安隐藏源IP,提高溯源难度的几种方案 - 网安FreeBuf网络安全行业门户 【漏洞公告】某平台一个有意思的CSRF // SecTrain安全博客 浅谈Web源码泄漏-安全客 - 安全资讯平台 红队-C2 Server基础构建 - 先知社区FreeBuf网络安全行业…

erlang (OS 操作模块)学习笔记

cmd: env: 返回所有环境变量的列表。 每个环境变量都表示为元组 {VarName,Value},其中 VarName 是 变量和 Value 其值。 例: {VarName,Value} {"ERLANG_HOME","C:\\Program Files\\erl-24.3.4.2\\bin\\erl-24.3.4.2"}…

C语言第三弹---数据类型和变量

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeo…

无/自监督去噪(1)——一个变迁:N2N→N2V→HQ-SSL

目录 1. 前沿2. N2N3. N2V——盲点网络(BSNs,Blind Spot Networks)开创者3.1. N2V实际是如何训练的? 4. HQ-SSL——认为N2V效率不够高4.1. HQ-SSL的理论架构4.1.1. 对卷积的改进4.1.2. 对下采样的改进4.1.3. 比N2V好在哪&#xff…

旅游项目day08

1. 旅游日记(游记) 后端:实体类,列表,查看,审核 前端:目的地明细中-游记->带范围条件查询,游记首页,【扩展】游记添加/编辑,【扩展】添加游记时间没登录时…

计算机安全学习笔记(V):UDP和网络扫描

User Datagram Protocol (UDP) UDP是最简单的传输协议。多个程序(服务)可以在主机上侦听,因此操作系统需要知道将流量发送到哪个程序。 在传输协议中,每个程序都与源和目标处的端口相关联,该端口显示为程序的套接字。…

Java入门——开发环境、入门程序(搭建Java开发环境、安装JDK 验证、JDK、编写代码、编译代码、运行代码)

目录 前言 搭建Java开发环境 获取JDK 安装JDK 验证JDK DOS窗口常用命令 入门程序 编写代码 编译代码、运行代码 前言 Java是美国sun公司(Stanford University Network)在1995年推出的一门计算机高级编程语言。Java早期称为Oak(橡树)&#xf…

python里的神奇bug

都知道python里列表必须用逗号分隔开 我再给大家看个神奇的东西 import numpy as npb np.array([2, 1, 2 ,1 ,-1 ,2]); print(b) print(b.shape)b np.array([2, 1, 2 ,1 -1 ,2]); print(b) print(b.shape)结果如下 注意我下面的一个是没有逗号的,而且1和-1之间是…

鸿蒙开发系列教程(四)--ArkTS语言:基础知识

1、ArkTS语言介绍 ArkTS是HarmonyOS应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开…

Jvm相关知识(面试高级必备)

类的实例化顺序 先静态、先父后子 先静态:父静态>子静态 优先级:父类>子类 静态代码块>非静态代码块>构造函数 一个类的实例化过程: ①.父类的static代码块,当前类的static; ②.顺序执行…