在 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 天前
Linux 和 macOS 终端中常见的快捷键操作
linux·运维·macos
Alger_Hamlet1 天前
Photoshop 2025 Mac中文 Ps图像编辑软件
macos·ui·photoshop
资源大全免费分享1 天前
MacOS 的 AI Agent 新星,本地沙盒驱动,解锁 macOS 操作新体验!
人工智能·macos·策略模式
刘小哈哈哈1 天前
封装了一个iOS多分区自适应宽度layout
macos·ios·cocoa
YJlio2 天前
TrollStore(巨魔商店)介绍及操作手册
macos·objective-c·cocoa
mywpython2 天前
mac 最新的chrome版本配置selenium的方式
chrome·python·selenium·macos
一道微光2 天前
mac air m系列arm架构芯片安装虚拟机 UTM+debian 浏览器firefox和chrome
arm开发·macos·架构
打工人你好2 天前
libimobiledevice项目中各个库的作用
macos·objective-c·cocoa
1alisa2 天前
Sublime Text for Mac v4【注册汉化版】代码编辑器
macos·编辑器·sublime text
qq_368019662 天前
Mac下Ollama安装与设置:开启本地大模型之旅
macos