mac m1芯片 pytorch安装及gpu性能测试

pytorch 使用mac的m1芯片进行模型训练。

#小结:在数据量小模型参数少batch_size小时 ,cpu训练更快(原因:每次训练时数据需要放入GPU中,由于batch_size小。数据放入gpu比模型计算时间还长)

数据量大(或者batch size大)或者模型参数多 时,使用GPU训练优势明显

当模型参数大于100时,使用GPU比CPU开始有优势
注意mac gpu device是 mps ,不是cudn. device= torch.device("mps")

1 pytorch 安装及gpu验证

1.1 安装

mac需要安装 night 版本的pytorch
mac安装官网地址

复制代码
conda install pytorch torchvision torchaudio -c pytorch-nightly
# 或者
pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu

1.2 gpu验证

主要是执行:torch.backends.mps.is_available()

以下代码输出: tensor(1., device='mps:0')

复制代码
import torch
if torch.backends.mps.is_available():
    mps_device = torch.device("mps")
    x = torch.ones(1, device=mps_device)
    print (x)
else:
    print ("MPS device not found.")

2 mac m1芯片验证

实验1 :batch_size=32, 模型参数 parameter_num=476,720

  gpu 运行时长: 1min 36s

  cpu 运行时长: 37.5s

实验2 :batch_size=512, 模型参数 parameter_num=476,720

  gpu 运行时长: 16s

  cpu 运行时长: 13.3s

实验3 :batch_size=1024, 模型参数 parameter_num=476,720

  gpu 运行时长: 12.7s

  cpu 运行时长: 12.4s

实验4 :batch_size=1024, 模型参数 parameter_num=6,904,128

  gpu 运行时长: 13.9s

  cpu 运行时长: 23.8s

实验5 :batch_size=1024, 模型参数 parameter_num=23,685,440

  gpu 运行时长: 20.5s

  cpu 运行时长: 53.5s

实验6 :batch_size=1024, 模型参数 parameter_num=203,618,624

  gpu 运行时长: 4min 11s

  cpu 运行时长: 6min 49s

附录

测试代码

复制代码
import torch
from torch.utils.data import DataLoader
from torchvision import datasets,transforms
from  torch import nn,optim
batch_size=1024
mnist_train=datasets.MNIST("mnist",True,transform=transforms.Compose([
    transforms.ToTensor()    ]),download=True)
mnist_train=DataLoader(mnist_train,batch_size=batch_size,shuffle=True)
minst_test=datasets.MNIST("mnist",False,transform=transforms.Compose([
    transforms.ToTensor()  ]),download=True)
minst_test=DataLoader(minst_test,batch_size=batch_size,shuffle=True)
x,lable=next(iter(mnist_train))
print(lable)
x.shape

device=torch.device("mps")
autoencoder=AE().to(device)
critenon=nn.MSELoss()
optimizer=optim.Adam(autoencoder.parameters(),lr=1e-4)

autoencoder2=AE()
critenon2=nn.MSELoss()
optimizer2=optim.Adam(autoencoder2.parameters(),lr=1e-4)

# GPU 训练
#%%time
for epoch in range(5):
    for index,(x,_) in enumerate(mnist_train):
        x=x.to(device)
        x_hat=autoencoder(x)
        loss=critenon(x_hat,x)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(epoch,"loss: ",loss.item())
    
# CPU训练
# %%time
for epoch in range(5):
    for index,(x,_) in enumerate(mnist_train):
        x=x
        x_hat=autoencoder2(x)
        loss=critenon2(x_hat,x)
        optimizer2.zero_grad()
        loss.backward()
        optimizer2.step()
    print(epoch,"loss: ",loss.item())

total_params = sum(p.numel() for p in autoencoder2.parameters())
print("Total Parameters: {:,}".format(total_params))

实验1

实验3

实验4

相关推荐
学无止步_穷其一生4 分钟前
把 DeepSeek Harness 智能体嵌进 IntelliJ IDEA —— 类 Qoder 的 AI 编程插件
人工智能·intellij-idea·idea插件·deepseek
PhotonixBay7 分钟前
从粗糙度到三维形貌:激光共聚焦显微镜实现微米级表面分析
图像处理·人工智能·测试工具·算法
欧特克_Glodon12 分钟前
OpenCV计算机视觉开发入门与实践<十六>:图像边框和图像轮廓
c++·人工智能·opencv·计算机视觉
Tokenge13 分钟前
AI前沿日报 | 2026-08-20:AI行业进入“安全、算力、隐私、落地”四线并跑阶段
人工智能·安全
ZYJCSZKJ16 分钟前
面向东盟多语种场景的AIGEO与AI数字人融合架构及区域实践
人工智能·架构·#ai数字人·aigeo
盼小辉丶19 分钟前
PyTorch强化学习实战——用预训练语言模型和ChatGPT玩转文本游戏
pytorch·深度学习·语言模型·chatgpt·强化学习
Raas10023 分钟前
MAI Gateway (魔芋企业级AI网关) 私有化部署全攻略:AI网关怎么部署?附架构图
人工智能·安全·大模型·gateway·ai网关·mai gateway
Lucifer三思而后行27 分钟前
我准备写 26 篇文章,带 DBA 系统学一遍 AI
数据库·人工智能·dba
JavaPub-rodert28 分钟前
Codex 从 0 开始:安装 ChatGPT,并接入 DeepSeek
人工智能·gpt·chatgpt
每日新鲜事28 分钟前
北大医院引入WPS Comate智能助手,加速医院管理智能化进程
大数据·人工智能·wps