跳过正文

PyTorch系列 - 环境配置

··864 字·
深度学习 PyTorch
EZ
作者
EZ
Take it EZ!
目录
PyTorch - 这篇文章属于一个选集。
§ 1: 本文

本文介绍如何在 Mac 上安装 PyTorch,并利用 Apple 芯片的 Metal 框架进行加速。

1. 安装 PyTorch
#

  • 参考: PyTorch 官方安装地址
    • 选择合适的环境和相应的配置,然后复制命令去安装
  • 或者直接使用以下命令下载默认的版本:
    pip3 install torch torchvision torchaudio
    

2. Apple 芯片加速
#

Apple 的芯片利用其 Metal 框架提供了对 GPU 加速的支持。PyTorch 在 Mac 上可以利用 Metal Performance Shaders (MPS) 后端进行加速,从而显著提高深度学习模型的训练和推理速度。

2.1 测试配置
#

要确认你的环境是否正确配置了MPS后端,可以运行以下代码:

import torch

print(torch.backends.mps.is_available())  # 检查 MPS 是否可用
print(torch.backends.mps.is_built())      # 检查 MPS 是否被编译

如果都返回 True 的话,则代表配置成功。

2.2 使用 MPS 加速
#

在代码中启用MPS后端,可以通过以下方式设置设备:

import torch

# 检查MPS是否可用
if torch.backends.mps.is_available():
    device = torch.device("mps")
else:
    device = torch.device("cpu")

# 示例模型和数据
model = torch.nn.Linear(10, 1)
model.to(device)

data = torch.randn(5, 10)
data = data.to(device)

output = model(data)
print(output)

2.3 Apple 芯片的优势
#

Apple 的 M 系列芯片采用了以下几种技术优势,使得它们在深度学习任务中表现出色:

  • 统一内存架构 (UMA):
    • Apple 的 M 系列芯片能使用的显存大小就是电脑的内存大小。
    • CPU 和 GPU 共享同一块内存,从而减少了数据在 CPU 和 GPU 之间传输的时间和开销。这对于深度学习任务尤其重要,因为这些任务通常需要频繁地在 CPU 和 GPU 之间传输大量数据。
  • 高效的 Metal 框架:
    • Metal 框架提供了一种高效的 GPU 计算 API,称为 Metal Performance Shaders (MPS)。
    • MPS 专门为高性能计算设计,特别是图形和计算任务。PyTorch 从 1.12 版本开始,增加了对 MPS 后端的支持,使得在 Mac 上的 GPU 加速成为可能。
  • 强大的 GPU 性能:
    • Apple 芯片内置了高性能的 GPU。例如,M1 系列有 7 或 8 个 GPU 核心,M1 Pro 和 M1 Max 则有更多的 GPU 核心。这些高性能的 GPU 对深度学习任务中的大规模并行计算非常有效。

2.4 实际案例
#

在实际应用中,你可以将深度学习模型和数据加载到MPS设备上,以实现更快速的训练和推理。以下是一个简单的示例,演示了如何在MPS上训练一个线性回归模型:

import torch
import torch.nn as nn
import torch.optim as optim

# 创建数据
x = torch.randn(100, 1)
y = 3 * x + 1 + 0.1 * torch.randn(100, 1)

# 定义模型
model = nn.Linear(1, 1)
if torch.backends.mps.is_available():
    device = torch.device("mps")
else:
    device = torch.device("cpu")
model.to(device)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(100):
    model.train()
    optimizer.zero_grad()

    # 前向传播
    outputs = model(x.to(device))
    loss = criterion(outputs, y.to(device))

    # 反向传播和优化
    loss.backward()
    optimizer.step()

    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')

print('训练完成')
PyTorch - 这篇文章属于一个选集。
§ 1: 本文

相关文章

Spark系列 - 数据合并
·2309 字
大数据 Spark DataFrame
本文介绍了 Spark 中的几种常见 Join 操作,包括 Inner Join、Outer Join、Left Join 和 Right Join,以及它们的具体实现和优化方法。
Spark系列 - 数据聚合
·1170 字
大数据 Spark DataFrame 聚合
探索Spark中的聚合与窗口函数,涵盖简单聚合、分组聚合、窗口聚合等操作。
Spark系列 - 数据转换(II)
·2008 字
大数据 Spark DataFrame SparkSQL withColumn Transformations
本章主要讨论 Spark 的数据转换。
Python系列 - 单元测试
·1986 字
Python Python开发 unittest
Python 自带的unittest模块提供了一个全面的框架,用于编写和运行测试。
Spark系列 - 数据转换(I)
·2750 字
大数据 Spark DataFrame SparkSQL Transformations
本章主要讨论 Spark 的数据转换。
Python系列 - 动态规划
·2966 字
Python 动态规划 Python算法
1. 动态规划介绍 # 动态规划(Dynamic Programmin