在 Mac M2 上安装 PyTorch 并启用 MPS 加速的详细教程与性能对比

1. 安装torch

在官网上可以查看安装教程,Start Locally | PyTorch

作者安装了目前最新的torch版本2.5.1,需要提前安装python3.9及以上版本,作者python版本是python3.11最新版本

使用conda安装torch,在终端进入要安装的环境,执行如下命令即可,值得一提的是,安装torch的前提条件是需要事先安装对应版本的python,以及annoconda

bash 复制代码
conda install pytorch torchvision -c pytorch

执行完如上命令后就会出现如下画面,需要等待几分钟,直到安装完毕

2. 安装MPS

使用conda安装mps

bash 复制代码
conda install torch torchvision torchaudio

3 安装是否成功测试

python 复制代码
import torch
# 查看 torch安装是否成功 并查看其版本
print(torch.__version__)
# 查看 mps是否安装成功 是否可用
print(torch.backends.mps.is_available())
# 检查 GPU 是否可用
print(torch.cuda.is_available())  # 对于 MPS,返回 False 是正常的
print(torch.backends.mps.is_available())  # 应该返回 True
# 获取 MPS 设备
mps_device = torch.device("mps")
print(mps_device)  # 输出 "mps"

执行如上代码,能够成功打印出torch版本,证明第一章节的torch安装成功,如果能打印出True证明MPS可用,至于其中的一个False是cuda是否可用,因为作者是Mac电脑,没有安装显卡所以并无法安装cuda加速,固然为false

4 加速对比

总的来说,模型越复杂,其MPS加速越明显,如果模型太简单,只需要几秒钟就能跑完的话,MPS加速反而不如CPU,因为MPS要有一些准备工作,把数据放入图显核心里去,如果算法太简单或者数据量太少,结果运行加速节约的时间还不如数据准备的时间长,看起来就会觉得MPS反而需要更多时间来运行。

如下是作者的测试代码

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
import time

# 设置训练参数
input_size = 4096  # 输入特征数
hidden_size = 1024  # 隐藏层神经元数
output_size = 10  # 输出类别数(例如 10 类)
num_epochs = 50  # 训练轮数
batch_size = 64  # 批量大小
learning_rate = 0.01  # 学习率

# 定义一个简单的全连接神经网络
class SimpleNN(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 函数:训练模型并记录训练时间
def train_model(device, num_epochs):
    # 创建数据集
    num_samples = 100000  # 数据集样本数量
    x_train = torch.randn(num_samples, input_size).to(device)
    y_train = torch.randint(0, output_size, (num_samples,)).to(device)

    # 模型、损失函数和优化器
    model = SimpleNN(input_size, hidden_size, output_size).to(device)
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=learning_rate)

    # 开始计时
    start_time = time.time()

    # 训练循环
    for epoch in range(num_epochs):
        for i in range(0, num_samples, batch_size):
            # 获取当前批量数据
            inputs = x_train[i:i+batch_size]
            labels = y_train[i:i+batch_size]

            # 前向传播
            outputs = model(inputs)
            loss = criterion(outputs, labels)

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

    # 结束计时
    end_time = time.time()

    # 返回训练时间
    return end_time - start_time

# 主程序
if __name__ == "__main__":
    # 设备列表
    devices = {
        "CPU": torch.device("cpu"),
        "MPS": torch.device("mps") if torch.backends.mps.is_available() else None,
    }

    # 分别测试 CPU 和 MPS
    results = {}
    for device_name, device in devices.items():
        if device is None:
            print(f"\nSkipping {device_name} as it is not available.")
            continue
        print(f"\nTraining on {device_name}...")
        training_time = train_model(device, num_epochs)
        results[device_name] = training_time
        print(f"Training time on {device_name}: {training_time:.2f} seconds")

    # 打印对比结果
    print("\n--- Training Time Comparison ---")
    for device_name, time_taken in results.items():
        print(f"{device_name}: {time_taken:.2f} seconds")

本人运行的机器是Mac Mini M2(8+10)16G+1T ,

3.1 CPU和GPU占用

在使用CPU运行时, 明显看到8核心的CPU,程序几乎占用了4核心一半,GPU没有使用

在使用MPS运行时,CPU占比下降到较低水平,开始启用GPU运行,10核心的图显也仅仅使用了1颗,感觉加速不是特别明显

3.2 温度对比

使用CPU运行时,常年保持40度以下的CPU温度也飙升到了65度左右,及时如此也仅是window电脑静默状态的温度了

使用MPS运行时,温度稍有回落,在50度左右

3.3 运行时间

如图所示,MPS加速仅仅比CPU花费时间减少一半左右,说实话不是特别满意,和cuda的加速还是有一定差距

相关推荐
梦魇梦狸º1 小时前
node安装与管理
macos·node.js
缘友一世9 小时前
macOS查看当前项目的 tree 结构
macos
梦魇梦狸º10 小时前
mac 安装 python2
python·macos
篮l球场1 天前
mac m1下载maven安装并配置环境变量
macos
YAIMZA1 天前
mac配置 iTerm2 使用lrzsz与服务器传输文件
服务器·macos·lrzsz
刘小哈哈哈1 天前
iOS UIScrollView的一个特性
macos·ios·cocoa
嘟嘟实验室1 天前
LatentSync数字人,一键批量,口型同步,MPS加速(WIN/MAC)
人工智能·macos·aigc·数字人
app开发工程师V帅1 天前
Xcode :给模拟器 创建桌面 快捷方式
ide·macos·xcode
Mr_sun.1 天前
Mac开启任何来源安装&配置环境变量
macos
王行知1 天前
Mac 刷题环境配置
macos·职场和发展·蓝桥杯