也许是一个 M 芯片上 3A 大作的原因

2023-10-18 23:07:08 +08:00
 ZekeChin

起因

今天逛 pytorch 帖子的时候发现

有个哥们问: 为啥 intel 的 mac 上不用显卡加速?

后面回答:intel 一直可以跟 m 系列芯片一样啊 能使用mps进行加速 mps是基于 mac 的 metal 开发的

Metal Performance Shaders 。就是不知道为什么一直没人说

实验

随后就随便搓了个 torch 模型 测试能力 (代码在最后)

不是很严谨的测试 大家看个乐呵

实验结果:

推理设备 简单的 tqdm 统计时间
5600XT----(mps) [01:04<00:00, 1.54it/s]
12600k----(cpu) [00:45<00:00, 2.20it/s]
M1---------(mps) [00:20<00:00, 4.80it/s]
M1---------(cpu) [01:23<00:00, 1.20it/s]
3090-------(cuda) [00:08<00:00, 11.48it/s]

macbook air 的 M1 什么功耗 能有 3090 三分之一的速度

5600XT 又是什么功耗 跟 M1 的 cpu 一个水平😂

所以根据这个不是很严谨的实验能否说 之前的 metal 真的太烂了?如有不妥 请斧正

确实不是特别懂就是看到 5600xt 这个速度也太拉垮了 所以来问问大家🙏

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from tqdm import tqdm
# 定义 CNN
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 13 * 13, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 13 * 13)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 随机生成数据
batch_size = 64  
channels = 3
height = 64
width = 64

net = SimpleCNN()
# 在这里选择推理 类型
device =  torch.device("cpu")

net = net.to(device)
inputs = torch.randn(batch_size, channels, height, width).to(device) 
labels = torch.randint(0, 10, (batch_size,)).to(device) 


criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
# 训练
for epoch in tqdm(range(100)):
    running_loss = 0.0
    for i in range(20):
        # 清零梯度缓冲区
        optimizer.zero_grad()
        # 前向传播,反向传播,优化
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

print('Finished Training')
2551 次点击
所在节点    macOS
5 条回复
tianshilei1992
2023-10-18 23:49:52 +08:00
Metal 就是烂,特别是拿来做 computation…如果仔细研究过 AIR 的话,就会发现这玩意儿根本就不是为 computation 设计的…
ZekeChin
2023-10-19 09:04:13 +08:00
@tianshilei1992 是这样嘛 我其实是想说 metal 再 AMD 显卡上和 M1 上的差别的
tianshilei1992
2023-10-19 12:21:25 +08:00
@ZekeChin 哦哦哦 Apple Neural Engine 能跑很多 ooerators 了
neopenx
2023-10-19 13:35:16 +08:00
metal 是兼容 amd gpu ,但是 mps 在 kernel 上是单独实现的。通过 assert 可以发现 M1 走的是 A14 的 kernel 。也就也是说 apple 的工程师大概率就是摆烂写个巨慢的 kernel 给 AMD gpu ,尤其是卷积这种吃架构优化的,只要保证计算结果的正确性就好了。
ZekeChin
2023-10-19 18:40:09 +08:00
@neopenx 喔~ 扫嘎原来是这个样子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/983302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX