PyTorch 简介与环境搭建
1. 什么是 PyTorch?
-
定义: PyTorch 是一个开源的机器学习库,基于 Torch 库,主要由 Facebook 的人工智能研究团队(FAIR)开发和维护。它是一个以 Python 为优先接口的库,提供了两个高级功能:
- 强大的 GPU 加速的张量(Tensor)计算:类似于 NumPy,但可以在 NVIDIA GPU 上运行以极大地加速计算。
- 构建在基于磁带的自动求导系统(tape-based autograd system)上的深度神经网络:这使得构建和训练神经网络变得非常灵活和直观。
-
核心特点与优势:
- Python 优先 (Python-first): PyTorch 的设计哲学使其感觉非常“Pythonic”。你可以像使用其他 Python 库(如 NumPy, SciPy)一样自然地使用它,易于学习和调试。
- 动态计算图 (Dynamic Computational Graphs): 这是 PyTorch 的一个标志性特性。与 TensorFlow 1.x 等框架的静态图不同,PyTorch 允许你在运行时定义、修改和执行计算图。这使得处理可变长度输入(如文本)和构建复杂的、条件控制的模型更加容易。
- 强大的 GPU 加速: 深度学习计算量巨大,GPU 加速是必不可少的。PyTorch 提供了对 NVIDIA CUDA 的良好支持。
- 丰富的生态系统:
torchvision:包含流行的计算机视觉数据集、模型架构和图像转换工具。torchaudio:用于音频处理。torchtext:用于文本处理和自然语言处理。- 还有许多第三方库和工具。
- 活跃的社区与研究应用: PyTorch 在学术界和研究领域非常受欢迎,许多最新的研究论文会提供 PyTorch 实现。这意味着你可以很容易地找到前沿模型的代码。
- 易于调试: 由于其动态性和 Pythonic 的特性,使用标准的 Python 调试器(如
pdb)就可以轻松调试 PyTorch 代码。
-
PyTorch 的两个核心组件(我们后续会详细学习):
- 张量 (Tensors): 多维数组,是 PyTorch 中数据存储和运算的基本单位。
- 自动求导 (Autograd):
torch.autograd包提供了张量上所有操作的自动微分功能,是神经网络训练的核心。
2. 为什么选择 PyTorch?
对于初学者和研究人员来说,PyTorch 通常因为以下原因而备受青睐:
- 易学易用: 如果你熟悉 Python 和 NumPy,上手 PyTorch 会相对较快。
- 灵活性高: 动态图带来了极大的灵活性,方便快速原型设计和实验。
- 调试方便: 出错信息通常更清晰,可以直接用 Python 调试器。
- 社区活跃: 遇到问题时,很容易找到解决方案或获得帮助。
- 研究友好: 许多顶会论文使用 PyTorch,方便复现和学习最新成果。
3. 环境搭建
在开始编写 PyTorch 代码之前,你需要先在你的计算机上安装它。
-
前提条件:
- Python: PyTorch 需要 Python 环境。推荐使用 Python 3.7 或更高版本。你可以从 python.org 下载并安装。
- pip: Python 的包安装器,通常随 Python 一起安装。
- (可选但强烈推荐) Anaconda/Miniconda: Anaconda 是一个流行的数据科学平台,它包含了 Python、许多有用的包以及一个强大的环境管理器
conda。Miniconda 是 Anaconda 的轻量级版本。使用conda可以非常方便地创建和管理独立的 Python 环境,避免不同项目之间的包版本冲突。- Anaconda 下载:www.anaconda.com/products/di…
- Miniconda 下载:docs.conda.io/en/latest/m…
-
选择安装版本:
- CPU 版本: 如果你的计算机没有 NVIDIA GPU,或者你只是想初步学习,可以选择 CPU 版本。
- GPU 版本: 如果你的计算机有受支持的 NVIDIA GPU,并且你想进行实际的深度学习模型训练,强烈建议安装 GPU 版本。这需要你的系统安装了对应版本的 CUDA Toolkit。
-
安装步骤:
-
强烈建议:创建虚拟环境
- 为什么? 虚拟环境可以为你的项目创建一个隔离的 Python 环境,使得不同项目的依赖包不会相互干扰。
- 使用
conda(推荐):# 创建一个名为 mytorch_env 的新环境,指定 python 版本 (例如 3.9) conda create -n mytorch_env python=3.9 # 激活环境 conda activate mytorch_env - 使用
venv(Python 自带):# 创建一个名为 .venv 的虚拟环境文件夹 python -m venv .venv # 激活环境 (Windows) .\.venv\Scripts\activate # 激活环境 (Linux/macOS) source .venv/bin/activate - 注意: 后续所有安装命令都在激活的虚拟环境中执行。
-
访问 PyTorch 官网获取安装命令
- 这是最推荐的方式,因为官网会根据你的操作系统、包管理器 (pip/conda)、计算平台 (CPU/CUDA 版本) 生成最合适的安装命令。
- 官网地址:pytorch.org/get-started…
- 在官网上,你需要选择:
- PyTorch Build: Stable (稳定版) 或 LTS (长期支持版) 或 Nightly (最新开发版)。初学者建议选择 Stable。
- Your OS: Windows, Linux, macOS.
- Package: Conda, Pip, LibTorch, Source. 初学者建议选择 Conda (如果你用了 Anaconda/Miniconda) 或 Pip。
- Language: Python 或 C++/Java。选择 Python。
- Compute Platform: CPU, 或不同版本的 CUDA (如 CUDA 11.8, CUDA 12.1)。
- 如果你不确定是否有 NVIDIA GPU 或 CUDA 版本,可以选择 CPU。
- 如果你有 NVIDIA GPU,可以在命令行输入
nvidia-smi查看 GPU 信息和支持的 CUDA Driver Version。PyTorch 安装的 CUDA Runtime 版本需要与你的驱动兼容。通常选择官网上列出的较新的 CUDA 版本即可,PyTorch 会捆绑所需的 CUDA 运行时。
-
执行安装命令
- 官网会生成类似下面的命令 (具体命令以官网为准):
- Conda + CPU 示例:
conda install pytorch torchvision torchaudio cpuonly -c pytorch - Pip + CPU 示例:
pip3 install torch torchvision torchaudio - Conda + CUDA 11.8 示例:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia - Pip + CUDA 11.8 示例:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
- Conda + CPU 示例:
- 复制官网生成的命令,在已激活的虚拟环境的终端中执行。安装过程可能需要一些时间,因为它会下载几个较大的包。
- 官网会生成类似下面的命令 (具体命令以官网为准):
-
-
验证安装: 打开 Python 解释器 (直接在终端输入
python或使用 IDE) 或 Jupyter Notebook,然后输入以下代码:import torch # 打印 PyTorch 版本 print(f"PyTorch Version: {torch.__version__}") # 检查 CUDA 是否可用 (如果你安装了 GPU 版本) cuda_available = torch.cuda.is_available() print(f"CUDA Available: {cuda_available}") if cuda_available: # 打印当前 CUDA 设备名称 print(f"CUDA Device Name: {torch.cuda.get_device_name(0)}") # 创建一个 GPU 张量 gpu_tensor = torch.rand(2, 3).cuda() print(f"GPU Tensor:\n{gpu_tensor}") print(f"GPU Tensor Device: {gpu_tensor.device}") # 创建一个 CPU 张量 cpu_tensor = torch.rand(2, 3) print(f"CPU Tensor:\n{cpu_tensor}") print(f"CPU Tensor Device: {cpu_tensor.device}")如果代码成功运行并打印出版本号和张量信息,说明 PyTorch 安装成功。如果安装了 GPU 版本,
CUDA Available应该为True。 -
推荐的开发工具:
- Jupyter Notebook / JupyterLab: 非常适合交互式学习和实验。可以逐个单元格运行代码,并立即看到结果。
# 在激活的虚拟环境中安装 (如果还没有) pip install notebook jupyterlab # 启动 Jupyter Notebook jupyter notebook # 或启动 JupyterLab jupyter lab - VS Code: 一个功能强大的代码编辑器,通过 Python 扩展和 Jupyter 扩展,可以很好地支持 PyTorch 开发和调试。
- PyCharm: 另一个流行的 Python IDE,专业版对科学计算和 Jupyter Notebook 也有很好的支持。
- Jupyter Notebook / JupyterLab: 非常适合交互式学习和实验。可以逐个单元格运行代码,并立即看到结果。
4. 第一个 PyTorch "Hello World" (实践)
我们已经在上面的“验证安装”中做了一个简单的测试。这里再给出一个明确的“Hello World”步骤:
-
确保你的 PyTorch 环境已激活。
-
创建一个 Python 文件,例如
hello_pytorch.py,或者打开一个 Jupyter Notebook 单元格。 -
输入以下代码:
import torch # 1. 创建一个未初始化的 5x3 张量 x = torch.empty(5, 3) print("未初始化的 5x3 张量 x:") print(x) # 2. 创建一个随机初始化的 5x3 张量 y = torch.rand(5, 3) print("\n随机初始化的 5x3 张量 y:") print(y) # 3. 创建一个全零的 5x3 张量,数据类型为 long z = torch.zeros(5, 3, dtype=torch.long) print("\n全零的 5x3 long 张量 z:") print(z) # 4. 直接从数据创建张量 data_list = [[1, 2], [3, 4]] a = torch.tensor(data_list) print("\n从数据列表创建的张量 a:") print(a) # 5. 张量加法 result = y + z.float() # 注意 z 是 long 类型,需要转换为 float 进行加法 print("\n张量 y + z (z转为float):") print(result) print(f"\nPyTorch 安装成功!版本号: {torch.__version__}") -
运行脚本:
- 如果是
.py文件:python hello_pytorch.py - 如果是 Jupyter Notebook:运行该单元格。
- 如果是