1、Pytorch介绍与安装

1、Pytorch介绍

PyTorch 是由 Facebook AI Research (FAIR) 团队开发并维护的一款开源深度学习框架,于 2016 年首次发布。它因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一。

1.1、核心理念

PyTorch 最显著的特点是其 “Pythonic” 的设计哲学和 动态计算图 (Dynamic Computational Graph) 机制。

  1. Pythonic 设计: PyTorch 深度融入 Python 生态系统,其 API 设计自然、简洁,非常符合 Python 程序员的思维习惯。你可以像操作普通的 Python 对象(如 NumPy 数组)一样操作张量(Tensor),使用标准的 Python 控制流(如 ifforwhile)来构建模型结构。这种无缝集成极大地降低了学习门槛,让开发者能够专注于模型设计和算法本身,而非框架的复杂性。

  2. 动态计算图 (Define-by-Run): 这是 PyTorch 区别于早期静态图框架(如 TensorFlow 1.x)的关键。计算图在代码运行时动态构建。每一步张量操作都会实时扩展计算图,并立即执行。这种机制带来了革命性的优势:

    • 直观的调试: 由于图是动态生成的,你可以像调试普通 Python 程序一样,使用 print 语句、IDE 的断点调试器逐行检查张量的值和模型的行为,极大简化了复杂模型和训练过程的调试。

    • 无与伦比的灵活性: 动态图允许模型结构在运行时根据数据或条件动态改变(如 RNN 中可变长度序列处理、树状结构网络、条件计算)。这种灵活性对于前沿研究(如元学习、神经架构搜索)和构建复杂模型至关重要。

    • 更易理解的代码: 模型定义和训练循环的代码流程清晰、线性,更易于阅读和理解。

1.2、核心组件与功能

PyTorch 提供了一套完整的工具链来支持深度学习工作流:

  1. 强大的张量库: torch.Tensor 是其核心数据结构,支持高效的 CPU 和 GPU 加速计算。它提供了丰富的数学运算(线性代数、随机数生成等),并高度兼容 NumPy(通过 .numpy() 和 torch.from_numpy() 轻松转换)。

  2. 自动微分引擎 (Autograd): torch.autograd 模块是 PyTorch 的基石。它通过在动态计算图上自动追踪张量操作,实现反向传播时梯度的自动计算。只需在张量上设置 .requires_grad=True,框架就会记录所有相关操作,并在调用 .backward() 时自动计算梯度。这极大地简化了梯度计算,让开发者无需手动推导和实现复杂的反向传播。

  3. 神经网络模块 (torch.nn): 该模块提供了构建神经网络所需的所有基础构件:

    • 层 (Layers): 预定义了各种层(如 Linear, Conv2d, RNN, LSTM, Transformer, Dropout, BatchNorm 等)。

    • 损失函数 (Loss Functions): 如 MSE, CrossEntropyLoss 等。

    • 优化器 (Optimizers): 如 SGD, Adam, RMSprop 等,用于更新模型参数以最小化损失。

    • 容器 (Containers): nn.Module 是构建所有模型的基类。通过继承它并定义 forward 方法,可以轻松组合各种层来创建复杂的网络结构。nn.Module 还自动管理参数、设备移动(CPU/GPU)、序列化等。

  4. 数据加载与处理 (torch.utils.data):

    • Dataset 类: 定义如何访问单个样本。

    • DataLoader: 负责高效地批量加载数据、打乱顺序、多进程预读取等,是训练循环中数据供给的核心。

    • Transforms: 提供丰富的图像和数据处理工具(如裁剪、旋转、归一化),用于数据增强和预处理。

  5. GPU 加速: PyTorch 天然支持 CUDA。只需将张量或模型移动到 GPU 设备(.to(‘cuda’)),即可利用 NVIDIA GPU 强大的并行计算能力,显著加速模型训练和推理。

  6. 分布式训练: torch.distributed 模块提供了强大的工具(如 DistributedDataParallel - DDP),支持在多 GPU、多节点集群上进行高效的数据并行和模型并行训练,极大缩短大型模型的训练时间。

  7. TorchScript 和 TorchDynamo (PyTorch 2.x): 为了满足生产环境对性能、部署和脱离 Python 环境运行的需求,PyTorch 提供了:

    • TorchScript: 一种将 PyTorch 模型(代码)转换为可优化、可序列化的中间表示的方法,可以在 C++ 等环境中高效运行。

    • TorchDynamo (PyTorch 2.0+): 一个创新的即时(JIT)编译器框架,结合了 torch.compile() API,能够在不显著改变用户代码的情况下,自动加速模型训练和推理,性能提升显著。

  8. 丰富的生态系统:

    • 领域库: TorchVision (CV), TorchText (NLP), TorchAudio (音频) 提供了各自领域常用的数据集、模型架构和转换工具。

    • Hugging Face Transformers: PyTorch 是该流行库的首选后端,提供了大量预训练的语言模型(如 BERT, GPT)。

    • PyTorch Lightning: 一个轻量级封装库,将研究代码与工程代码解耦,简化了训练流程(如多 GPU、混合精度训练、日志记录),加速研究向生产的转化。

    • ONNX 支持: 方便模型导出到其他支持 ONNX 格式的推理引擎部署。

    • 部署工具: TorchServe, LibTorch (C++ API) 等支持模型在各种环境下的部署。

1.3、适用场景与优势总结

  • 研究与原型开发: 动态图的灵活性和易调试性使其成为学术研究和快速实验新想法的理想平台。大量前沿论文的官方实现都基于 PyTorch。

  • 教学与学习: Pythonic 的设计和直观的调试使其成为学习深度学习的绝佳工具。

  • 计算机视觉 (CV): 在图像分类、目标检测、分割等任务中占据主导地位。

  • 自然语言处理 (NLP): 是 Transformer 等现代 NLP 模型实现和预训练模型库(如 Hugging Face)的主要支撑。

  • 强化学习、生成模型等: 其灵活性同样适用于这些新兴且结构多变的领域。

  • 生产部署: 随着 TorchScript、TorchDynamo (torch.compile()) 以及部署工具链的成熟,PyTorch 在生产环境中的应用也日益广泛。

1.4、优势总结

  • 易用性与灵活性: Pythonic 设计 + 动态图,开发调试效率高。

  • 强大的社区与生态: 拥有庞大且活跃的开发者社区,丰富的库、模型、教程和资源。

  • 卓越的研究支持: 是学术界的宠儿,最新研究成果往往首选 PyTorch 实现。

  • 成熟的工业应用: 从研究到生产的路径日益顺畅,被众多科技巨头采用。

  • 持续创新: 开发团队(Meta 和开源社区)积极推动,不断引入新特性(如 PyTorch 2.x 的编译加速)。

2、安装Pytorch

2.1、通过官网安装

 ubuntu系统安装cuda驱动、cudatoolkit、cuDNN教程见:

1、安装cuda驱动,cuda toolkit和cuDNN-CSDN博客

查看cuda版本:

(llm) wangqiang@wangqiang:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Jan_15_19:20:09_PST_2025
Cuda compilation tools, release 12.8, V12.8.61
Build cuda_12.8.r12.8/compiler.35404655_0

 最新的pytorch只支持pip安装,去官网Get Started查看PyTorch的安装需求和安装命令。

ubuntu系统安装pytorch 12.8:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

查看安装的pytorch版本:

方式1:

import torch
print(torch.__version__)

方式2:

终端中运行:

(llm) wangqiang@wangqiang:~$ pip show torch
Name: torch
Version: 2.7.0+cu128
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3-Clause
Location: /home/wangqiang/anaconda3/envs/llm/lib/python3.12/site-packages
Requires: filelock, fsspec, jinja2, networkx, nvidia-cublas-cu12, nvidia-cuda-cupti-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-runtime-cu12, nvidia-cudnn-cu12, nvidia-cufft-cu12, nvidia-cufile-cu12, nvidia-curand-cu12, nvidia-cusolver-cu12, nvidia-cusparse-cu12, nvidia-cusparselt-cu12, nvidia-nccl-cu12, nvidia-nvjitlink-cu12, nvidia-nvtx-cu12, setuptools, sympy, triton, typing-extensions
Required-by: torchaudio, torchvision

卸载pytorch

sudo  pip uninstall torch torchvision torchaudio# 删除缓存和配置文件:
rm -rf ~/.cache/torch
rm -rf ~/.local/bin/torch_shm_manager

2.2、从源码安装

如果需要从源代码安装PyTorch,或者想要尝试最新的开发版本,可以使用以下命令:

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
python setup.py install

2.3、通过pip安装

pip install torch torchvision torchaudio
  • 默认安装的是 CPU 版本(不包含 GPU 支持),除非在系统环境已经明确配置了 CUDA 并且 PyPI 源中存在对应的 GPU 版本。
  • 安装的版本是 PyPI 上的最新稳定版(可能不是与电脑硬件或Python 版本完全兼容的版本)。

3、Pytorch参考链接

PyTorch 官网 :https://pytorch.org/

PyTorch 官方入门教程:Get Started

PyTorch 官方文档:PyTorch documentation — PyTorch 2.7 documentation 

PyTorch 源代码:https://github.com/pytorch/pytorch

PyTorch 官方英文教程:Welcome to PyTorch Tutorials — PyTorch Tutorials 2.7.0+cu126 documentation

PyTorch 官方中文文档:主页 - PyTorch中文文档

RUNOOB PyTorch教程:PyTorch 教程 | 菜鸟教程

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

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

相关文章

RedisTemplate查询不到redis中的数据问题(序列化)

RedisTemplate查询不到redis中的数据问题(序列化) 一.问题描述 存入Redis中的值取出来却为null,问题根本原因就是RedisTemplate和StringRedisTemplate的序列化问题、代码示例: SpringBootTest class Redis02SpringbootApplicationTests {Autowiredprivate RedisTe…

【Net】TCP粘包与半包

文章目录 TCP粘包与半包1 背景2 粘包(packet stick)3 半包(packet split)4 为什么会出现粘包/半包?5 如何解决?6 示例7 总结 TCP粘包与半包 在网络编程中,粘包和半包问题是常见的 TCP 协议特有…

Leetcode 3566. Partition Array into Two Equal Product Subsets

Leetcode 3566. Partition Array into Two Equal Product Subsets 1. 解题思路2. 代码实现 题目链接:3566. Partition Array into Two Equal Product Subsets 1. 解题思路 这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求&…

QT中更新或添加组件时出现“”qt操作至少需要一个处于启用状态的有效资料档案库“解决方法”

在MaintenanceTool.exe中点击下一步 第一个: 第二个: 第三个: 以上任意一个放入资料库中

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

解锁AI智能Agent的“风格基因”

从“黑箱”到“智能Agent”:LangChain的架构哲学革新 在LangChain出现之前,开发者直接调用LLM API的方式,充满了“黑箱”操作的挑战: 紧耦合的业务逻辑与模型调用: 所有的业务逻辑、API调用、记忆管理、错误处理等都可能混杂在同一个代码块中。这导致代码脆弱、难以测试,…

大数据运维过程中常见的一些操作

大数据运维是确保大数据系统稳定运行、高效处理数据的关键环节。以下是大数据运维过程中常见的一些操作和任务: 1. 集群部署与配置 基础设施搭建:部署服务器、网络设备、存储系统,配置虚拟化环境(如 Docker、Kubernetes)。分布式系统安装:安装 Hadoop、Spark、Hive、Kaf…

STM32中,如何理解看门狗

在STM32微控制器中,看门狗(Watchdog)是一种硬件计时器,用于监控系统运行状态,防止软件死锁或跑飞。其核心机制是:系统需定期“喂狗”(复位看门狗计数器),若未及时喂狗&am…

[AI算法] LLM中的gradient checkpoint机制

文章目录 什么是gradient checkpoint原理使用场景 注意事项 什么是gradient checkpoint gradient checkpoint是一种优化深度学习模型内存使用的技术,尤其在训练大型模型时非常有用。它通过牺牲计算时间为代价来减少显存占用。大多数情况下,transformers…

船舶二阶非线性响应方程的EKF与UKF参数辨识

船舶二阶非线性响应方程的EKF与UKF参数辨识 本文将详细阐述使用Python实现扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)对船舶二阶非线性响应方程进行参数辨识的过程。全文包含理论推导、算法实现、仿真验证及结果分析。—### 1. 船舶二阶非线性响应方程建模船舶运动可表示为&am…

【ARM AMBA APB 入门 1.1 -- APB 读写寄存器 RTL 实现】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 APB 寄存器访问APB 读寄存器 RTL 代码实现APB 写寄存器 RTL 代码实现 APB 寄存器访问 APB 读寄存器 RTL 代码实现 APB 总线读寄存器操作代码实现: wire [31:0] SOC_PLL_CFG_REG; wire [31:0] SOC_PLL_LOCK_REG; wi…

C++修炼:位图和布隆过滤器

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 1、引言 在计算机科学…

Java大厂后端技术栈故障排查实战:Spring Boot、Redis、Kafka、JVM典型问题与解决方案

Java大厂后端技术栈故障排查实战&#xff1a;Spring Boot、Redis、Kafka、JVM典型问题与解决方案 引言 在互联网大厂&#xff0c;Java后端系统往往承载着高并发、高可用和复杂业务需求。系统架构日益复杂&#xff0c;涵盖微服务、缓存、消息队列、数据库等多种组件&#xff0…

交叉编译tcpdump工具

1.导出交叉编译工具链 export PATH$PATH:/opt/rockchip/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 下载源码包libpcap-1.10.5&#xff0c;配置、并编译安装。 github仓库地址 ./configure --hostarm-linux CCarm-linux-gnueabihf-gcc --prefix$PWD/install …

Pytest Fixture 是什么?

Fixture 是什么&#xff1f; Fixture 是 Pytest 测试框架的核心功能之一&#xff0c;用于为测试函数提供所需的依赖资源或环境。它的核心目标是&#xff1a; ✅ 提供测试数据&#xff08;如模拟对象、数据库记录&#xff09; ✅ 初始化系统状态&#xff08;如配置、临时文件&a…

【深度剖析】流处理系统性能优化:解决维表JOIN、数据倾斜与数据膨胀问题

目录 前言:为什么你的流处理作业总是慢? 一、维表JOIN优化:从普通连接到高性能查询 1.1 时态表的双面性 1.2 Lookup Join 优化 1.3 多表JOIN优化策略 二、数据倾斜:单分区也会遇到的隐形杀手 2.1 单分区数据倾斜 2.2 热点键打散技术 2.3 时间窗口预聚合 三、数据…

Codeforces Round 1028 (Div. 2)(ABC)

A. Gellyfish and Tricolor Pansy 翻译&#xff1a; 水母和小花在玩一个叫 “决斗 ”的游戏。 水母有 a HP&#xff0c;花花有 b HP。 它们各有一个骑士。水母的骑士有 c HP&#xff0c;而花花的骑士有 d HP。 他们将进行一轮游戏&#xff0c;直到其中一方获胜。对于 k1、2、.…

数字创新智慧园区建设及运维方案

该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…

缓存一致性协议的影响

在操作系统中&#xff0c;线程切换相比进程切换更轻量级的关键原因之一是 缓存&#xff08;Cache&#xff09;的有效性&#xff0c;尤其是对 CPU 缓存&#xff08;如 L1/L2/L3&#xff09;和 TLB&#xff08;Translation Lookaside Buffer&#xff09;的影响。以下从缓存角度详…

六月一日python-AI代码

python 运行 import turtle as t # 导入turtle库并简称为t&#xff0c;用于图形绘制 import random # 导入random库&#xff0c;用于随机数生成t.delay(0) # 设置绘图延迟为0&#xff0c;加快绘图速度 colors ["red", "blue", "gr…