1、Pytorch介紹
PyTorch 是由 Facebook AI Research (FAIR) 團隊開發并維護的一款開源深度學習框架,于 2016 年首次發布。它因其直觀的設計、卓越的靈活性以及強大的動態計算圖功能,迅速在學術界和工業界獲得了廣泛認可,成為當前深度學習研究和開發的主流工具之一。
1.1、核心理念
PyTorch 最顯著的特點是其?“Pythonic”?的設計哲學和?動態計算圖 (Dynamic Computational Graph)?機制。
-
Pythonic 設計:?PyTorch 深度融入 Python 生態系統,其 API 設計自然、簡潔,非常符合 Python 程序員的思維習慣。你可以像操作普通的 Python 對象(如 NumPy 數組)一樣操作張量(Tensor),使用標準的 Python 控制流(如?
if
,?for
,?while
)來構建模型結構。這種無縫集成極大地降低了學習門檻,讓開發者能夠專注于模型設計和算法本身,而非框架的復雜性。 -
動態計算圖 (Define-by-Run):?這是 PyTorch 區別于早期靜態圖框架(如 TensorFlow 1.x)的關鍵。計算圖在代碼運行時動態構建。每一步張量操作都會實時擴展計算圖,并立即執行。這種機制帶來了革命性的優勢:
-
直觀的調試:?由于圖是動態生成的,你可以像調試普通 Python 程序一樣,使用?
print
?語句、IDE 的斷點調試器逐行檢查張量的值和模型的行為,極大簡化了復雜模型和訓練過程的調試。 -
無與倫比的靈活性:?動態圖允許模型結構在運行時根據數據或條件動態改變(如 RNN 中可變長度序列處理、樹狀結構網絡、條件計算)。這種靈活性對于前沿研究(如元學習、神經架構搜索)和構建復雜模型至關重要。
-
更易理解的代碼:?模型定義和訓練循環的代碼流程清晰、線性,更易于閱讀和理解。
-
1.2、核心組件與功能
PyTorch 提供了一套完整的工具鏈來支持深度學習工作流:
-
強大的張量庫:?
torch.Tensor
?是其核心數據結構,支持高效的 CPU 和 GPU 加速計算。它提供了豐富的數學運算(線性代數、隨機數生成等),并高度兼容 NumPy(通過?.numpy()
?和?torch.from_numpy()
?輕松轉換)。 -
自動微分引擎 (Autograd):?
torch.autograd
?模塊是 PyTorch 的基石。它通過在動態計算圖上自動追蹤張量操作,實現反向傳播時梯度的自動計算。只需在張量上設置?.requires_grad=True
,框架就會記錄所有相關操作,并在調用?.backward()
?時自動計算梯度。這極大地簡化了梯度計算,讓開發者無需手動推導和實現復雜的反向傳播。 -
神經網絡模塊 (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)、序列化等。
-
-
數據加載與處理 (torch.utils.data):
-
Dataset 類:?定義如何訪問單個樣本。
-
DataLoader:?負責高效地批量加載數據、打亂順序、多進程預讀取等,是訓練循環中數據供給的核心。
-
Transforms:?提供豐富的圖像和數據處理工具(如裁剪、旋轉、歸一化),用于數據增強和預處理。
-
-
GPU 加速:?PyTorch 天然支持 CUDA。只需將張量或模型移動到 GPU 設備(
.to(‘cuda’)
),即可利用 NVIDIA GPU 強大的并行計算能力,顯著加速模型訓練和推理。 -
分布式訓練:?
torch.distributed
?模塊提供了強大的工具(如 DistributedDataParallel - DDP),支持在多 GPU、多節點集群上進行高效的數據并行和模型并行訓練,極大縮短大型模型的訓練時間。 -
TorchScript 和 TorchDynamo (PyTorch 2.x):?為了滿足生產環境對性能、部署和脫離 Python 環境運行的需求,PyTorch 提供了:
-
TorchScript:?一種將 PyTorch 模型(代碼)轉換為可優化、可序列化的中間表示的方法,可以在 C++ 等環境中高效運行。
-
TorchDynamo (PyTorch 2.0+):?一個創新的即時(JIT)編譯器框架,結合了?
torch.compile()
?API,能夠在不顯著改變用戶代碼的情況下,自動加速模型訓練和推理,性能提升顯著。
-
-
豐富的生態系統:
-
領域庫:?
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 教程 | 菜鳥教程