Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >M1 MacBook Pro vs. Intel i9 MacBook Pro,数据科学终极笔记本之战

M1 MacBook Pro vs. Intel i9 MacBook Pro,数据科学终极笔记本之战

作者头像
McGL
发布于 2021-07-07 01:51:30
发布于 2021-07-07 01:51:30
3K00
代码可运行
举报
文章被收录于专栏:PyVisionPyVision
运行总次数:0
代码可运行

预算没问题的情况下,数据科学应用最好选哪个笔记本?内核 M1 vs. i9–9880H, 我们全方位对比测试了复合benchmarks、 Python、 Numpy、 Pandas 和 Scikit Learn 性能来一探究竟。

M1 芯片是革命性的。谁能想到苹果的第一代芯片就将英特尔几十年的工程技术彻底摧毁了呢?未来的 M1X 和 M2 芯片令人遐想,但是现在的 M1 仍然有很多值得欣赏的地方。

今天,我们将在复合 benchmarks、 纯 Python、 Numpy、 Pandas 和 Scikit-Learn 中比较这两台机器的性能:

  • 2019年16寸 MacBook Pro — 英特尔 Core i9–9880H, 16GB RAM, 和 AMD Radeon Pro 5500M (在美国约3000美元)
  • 2020年13寸 M1 MacBook Pro — 苹果 M1 芯片, 8GB unified memory, 和 8个GPU 内核 (在美国约1300 美元)

请注意,这些只是简单的编程和数据科学 benchmarks,其实在每个测试领域都可以做更多的工作。敬请期待后续的文章。

今天的文章结构如下:

  • 复合 Benchmarks — Geekbench 和 Cinebench
  • 比较纯 Python 的性能
  • 比较 Numpy 的性能
  • 比较 Pandas 的性能
  • 比较 Scikit-Learn 的性能
  • 最后的想法

复合 Benchmarks — Geekbench 和 Cinebench

除了你马上就会看到的性能上的差异,还有一件重要的事情需要注意 — 16英寸基于英特尔的 MBP 运行起来会热,非常的热。以至于你不能把它放在自己的膝盖上(别人的膝盖不确定,你可以试下,被打不要找我),至少在夏天不能。M1 Mac 就没有这个问题。它的风扇在测试的最后几分钟才启动。

让我们从简单的 Geekbench 单核比较开始:

图1 ー Geekbench 单核得分比较

Wow.贵了三倍的机器性能居然不如便宜的。让我们看看多核测试是否同样如此。请记住,Intel i9-9880H 有8个内核:

图2 ー Geekbench 多核得分比较

太荒谬了,没什么好补充的了。

让我们看一下 Geekbench 的 GPU 测试。这种比较不是100% 公平的,因为 M1 Mac 没有专门的 GPU。以下是结果:

图3 ー 用 GPU 进行 Geekbench 比较

专用 GPU 的得分几乎是两倍,但这在意料之中。接下来,让我们来看一下 Cinebench 的单核和多核的对比。下面是单核的例子:

图4 ー Cinebench 单核得分比较

M1 芯片再次领先,让我们看看多核测试的结果:

图5 ー Cinebench 多核得分比较

这两台机器有点接近,但是基于英特尔的 Mac 这次赢了。总而言之,两者都是非常强的机器,但人们的预期是 i9 每次都会以明显的优势获胜,至少根据价格来说是这样的。

赢家 ー M1 MacBook Pro。 在大多数情况下,这是一台性能更好的机器,而且它不会融化掉你的裤子。

比较纯 Python 的性能

第一次为数据科学配置 M1 芯片可能是一种痛苦。如果你想原生运行所有的东西,这个过程和英特尔的芯片不一样。幸运的是,网上有不少可行的教程(如:https://towardsdatascience.com/how-to-easily-set-up-m1-macbooks-for-data-science-and-machine-learning-cd4f8a6b706d)。

我们将在纯 Python 测试中完成几个相对简单的任务:

  • 创建一个包含100,000,000个100到999之间的随机整数的列表 l
  • 把每项都平方
  • 取 l 中每项的平方根
  • 将相应的平方和平方根相乘
  • 将相应的平方和平方根相除
  • 对相应的平方和平方根执行整除

因为这是一个纯 Python 测试,所以不允许使用第三方库。这是代码段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random

time_start = datetime.now()

l = [random.randrange(100, 999) for i in range(100000000)]

squared = [x**2 for x in l]
sqrt = [x**0.5 for x in l]
mul = [x * y for x, y in zip(squared, sqrt)]
div = [x / y for x, y in zip(squared, sqrt)]
int_div = [x // y for x, y in zip(squared, sqrt)]

time_end = datetime.now()
print(f'TOTAL TIME = {(time_end - time_start).seconds} seconds')

以下是结果:

图6 ー 纯 Python 性能比较

虽然差别不大,但对于 M1 芯片来说仍然是一个明显的胜利。

赢家: M1 MacBook Pro。 以三分之一的价格获得第一名。

比较 Numpy 的性能

下面是在这个 benchmark 中执行的任务列表:

  • 矩阵乘法(Matrix multiplication)
  • 矢量乘法(Vector multiplication)
  • 奇异值分解(Singular Value Decomposition)
  • 乔列斯基分解(Cholesky Decomposition)
  • 特征分解(Eigendecomposition)

最初的 benchmark 脚本是从 Github 上的 Markus Beuckelmann 那里(https://gist.github.com/markus-beuckelmann/8bc25531b11158431a5b09a45abd6276) 获取的,并经过了一些修改,因此可以获取开始和结束时间。下面是这个脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# SOURCE: https://gist.github.com/markus-beuckelmann/8bc25531b11158431a5b09a45abd6276

import numpy as np
from time import time
from datetime import datetime

start_time = datetime.now()

# Let's take the randomness out of random numbers (for reproducibility)
np.random.seed(0)

size = 4096
A, B = np.random.random((size, size)), np.random.random((size, size))
C, D = np.random.random((size * 128,)), np.random.random((size * 128,))
E = np.random.random((int(size / 2), int(size / 4)))
F = np.random.random((int(size / 2), int(size / 2)))
F = np.dot(F, F.T)
G = np.random.random((int(size / 2), int(size / 2)))

# Matrix multiplication
N = 20
t = time()
for i in range(N):
    np.dot(A, B)
delta = time() - t
print('Dotted two %dx%d matrices in %0.2f s.' % (size, size, delta / N))
del A, B

# Vector multiplication
N = 5000
t = time()
for i in range(N):
    np.dot(C, D)
delta = time() - t
print('Dotted two vectors of length %d in %0.2f ms.' % (size * 128, 1e3 * delta / N))
del C, D

# Singular Value Decomposition (SVD)
N = 3
t = time()
for i in range(N):
    np.linalg.svd(E, full_matrices = False)
delta = time() - t
print("SVD of a %dx%d matrix in %0.2f s." % (size / 2, size / 4, delta / N))
del E

# Cholesky Decomposition
N = 3
t = time()
for i in range(N):
    np.linalg.cholesky(F)
delta = time() - t
print("Cholesky decomposition of a %dx%d matrix in %0.2f s." % (size / 2, size / 2, delta / N))

# Eigendecomposition
t = time()
for i in range(N):
    np.linalg.eig(G)
delta = time() - t
print("Eigendecomposition of a %dx%d matrix in %0.2f s." % (size / 2, size / 2, delta / N))

print('')
end_time = datetime.now()
print(f'TOTAL TIME = {(end_time - start_time).seconds} seconds')

以下是结果:

图7 ー Numpy 性能比较

Numpy 则是另一回事。测试在英特尔芯片上完成得更快,最有可能的原因是 M1 芯片上没有英特尔数学内核库(Maths Kernel Libraries/MKL)。

赢家 ー 英特尔 i9 MacBook Pro。 目前 Numpy 运行速度更快。

比较 Pandas 的性能

这个 benchmark 与使用纯 Python 完成的 benchmark 非常相似。同样的操作被执行,但是结果被合并到一个 Pandas DataFrame:

  • 创建一个空的 data frame
  • 给它分配一个100,000,000个100到999之间的随机整数的列(X)
  • X 中每一项平方
  • 取 X 中每个项的平方根
  • 将相应的平方和平方根相乘
  • 将相应的平方和平方根相除
  • 对相应的平方和平方根执行整除

下面是代码段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import pandas as pd
from datetime import datetime

time_start = datetime.now()

df = pd.DataFrame()
df['X'] = np.random.randint(low=100, high=999, size=100000000)
df['X_squared'] = df['X'].apply(lambda x: x**2)
df['X_sqrt'] = df['X'].apply(lambda x: x**0.5)
df['Mul'] = df['X_squared'] * df['X_sqrt']
df['Div'] = df['X_squared'] / df['X_sqrt']
df['Int_div'] = df['X_squared'] // df['X_sqrt']

time_end = datetime.now()
print(f'Total time = {(time_end - time_start).seconds} seconds')

以下是结果:

图8 ー Pandas的性能比较

英特尔 i9-9880H 是一个非常强大的处理器,但在这项任务上它看起来不如 M1芯片。

赢家 - M1 MacBook Pro。 速度更快,更安静。

Scikit-Learn 性能比较

让我们从基本的开始,做以下任务:

  • 从网上获取数据集
  • 执行训练/测试划分
  • 声明一个决策树模型并找到最佳的超参数(2400个组合 + 5-fold 的交叉验证)
  • 用最优参数拟合模型
  • 这或多或少是一个标准的模型训练过程,不管是哪种算法的测试、数据准备和特征工程。

下面是测试的代码段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, confusion_matrix

time_start = datetime.now()

# Dataset
iris = pd.read_csv('https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv')
time_load = datetime.now()
print(f'Dataset loaded, runtime = {(time_load - time_start).seconds} seconds')

# Train/Test split
X = iris.drop('species', axis=1)
y = iris['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
time_split = datetime.now()
print(f'Train/test split, runtime = {(time_split - time_start).seconds} seconds')

# Hyperparameter tuning
model = DecisionTreeClassifier()
params = {
    'criterion': ['gini', 'entropy'],
    'splitter': ['best', 'random'],
    'max_depth': [1, 5, 10, 50, 100, 250, 500, 1000],
    'min_samples_split': [2, 5, 10, 15, 20],
    'min_samples_leaf': [1, 2, 3, 4, 5],
    'max_features': ['auto', 'sqrt', 'log2']
}
clf = GridSearchCV(
    estimator=model, 
    param_grid=params, 
    cv=5
)
clf.fit(X_train, y_train)
time_optim = datetime.now()
print(f'Hyperparameter optimization, runtime = {(time_optim - time_start).seconds} seconds')

best_model = DecisionTreeClassifier(**clf.best_params_)
best_model.fit(X_train, y_train)

time_end = datetime.now()
print()
print(f'TOTAL RUNTIME = {(time_end - time_start).seconds} seconds')

以下是结果:

图9 ー Scikit-Learn 性能比较

结果不言自明,我没有什么要补充的了。

赢家: M1 MacBook Pro。 速度快了一倍,价格只有三分之一。

最后的想法

M1 芯片无疑是革命性的。我已经完成了你在文章中看到的所有 benchmarks,并编写和编辑了整篇文章,还在 Netflix 上观看了40分钟的视频,但电池竟然还剩 83% !

M1 Macs 没有专用的 GPU,但这不是问题。大概率你不会使用任何笔记本电脑来完成非常耗资源和时间的任务,特别是深度学习。在云端做这种事更有效率。

因此,对于日常的数据科学和分析工作来说,M1似乎是不二之选 - 性能出众又酷,而且续航时间长达两个工作日。如果你想买一台新的 Mac,并且你需要的所有东西都与 M1芯片兼容,我认为没有理由再花2-4倍的钱买英特尔。

原文: https://towardsdatascience.com/m1-macbook-pro-vs-intel-i9-macbook-pro-ultimate-data-science-comparison-dde8fc32b5df

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyVision 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
M1芯片搞数据科学好使吗?5种基准测试给你答案
新版 Macbook 已经问世了一段时间,如果将 M1 芯片用于数据科学,性能会如何呢?本文作者将 M1 Macbook Pro 与基于 Intel 的 2019 Macbook Pro 在 5 种常用基准上进行了测试,结果发现 M1 芯片的性能确实是令人震惊的。
机器之心
2021/03/15
8710
M1芯片搞数据科学好使吗?5种基准测试给你答案
​Kaggle M5 Forecasting:传统预测方法与机器学习预测方法对比
本文使用的数据集来自 kaggle:M5 Forecasting — Accuracy。该数据集包含有 California、Texas、Wisconsin 三个州的产品类别、部门、仓储信息等。基于这些数据,需要预测接下来 28 天的每日销售量。
deephub
2020/05/09
2K0
​Kaggle M5 Forecasting:传统预测方法与机器学习预测方法对比
英特尔又被苹果按地摩擦:M1比i9快了30%?
---- 新智元报道   来源:jeffgeerling 编辑:Emil 【新智元导读】随着苹果发布自研的M1处理器以来,它无情碾压各种Inter和AMD成了人们津津乐道的话题。如今又有好事者做了一项有意思的测试,结论是M1比i9处理器快了30%?! 自苹果的M1芯片发布以来,关于它的性能究竟多强悍激起了所有人的兴趣。于是人们开始使用装备了M1芯片的Mac设备PK各种售价高昂的x86架构的电脑,乐此不疲。并且无论是在普通测试,还是在GeekBench、X86-specific code等排行榜中,M1
新智元
2023/05/22
4500
英特尔又被苹果按地摩擦:M1比i9快了30%?
顶配MacBook Pro 16上的M3 Max是什么水平?有人花56000元进行了评测
10 月 31 日,苹果在「史上最短发布会」上发布了新一代笔记本电脑和 Mac,与之而来的还有新一代 M3 芯片。
机器之心
2023/11/13
1.6K0
顶配MacBook Pro 16上的M3 Max是什么水平?有人花56000元进行了评测
一个完整的销售预测数据挖掘实战案例
沃尔玛是美国领先的零售商之一,他们希望能够准确预测销售和需求,因为一些事件和节假日可能会影响每天的销售额。目前,他们有 45 家商店的销售数据,但由于机器学习算法的不适用,他们面临着不可预见的需求和库存短缺的挑战。理想情况下,一种合适的机器学习算法应该能够准确预测需求,并考虑到包括 CPI、失业指数等在内的经济状况因素。
数据STUDIO
2024/07/24
5850
一个完整的销售预测数据挖掘实战案例
严谨解决5种机器学习算法在预测股价的应用(代码+数据)
机器学习有很多应用,其中之一就是预测时间序列。一个最有趣(或者可能是最赚钱)的时间序列是股票价格。
量化投资与机器学习微信公众号
2019/02/26
5.8K1
在搭载 M1 及 M2 芯片 MacBook设备上玩 Stable Diffusion 模型
本篇文章,我们聊了如何使用搭载了 Apple Silicon 芯片(M1 和 M2 CPU)的 MacBook 设备上运行 Stable Diffusion 模型。
soulteary
2023/03/05
3.5K0
在搭载 M1 及 M2 芯片 MacBook设备上玩 Stable Diffusion 模型
苹果M1「徒有其表」?「地表最强」芯只能剪视频引知乎热议
而M1 Max更夸张,搭载570亿个晶体管,比Pro还要大70%,芯片面积达到432mm²。
新智元
2021/10/22
2.2K0
30个数据科学工作中必备的Python包!
来源丨数据STUDIO 在本文中,云朵君将介绍一些非常独特的并且好用的 Python 包,它们可以在许多方面帮助你构建数据的工作流。 Python 可以说是最容易入门的编程语言,在numpy,scipy等基础包的帮助下,对于数据的处理和机器学习来说Python可以说是目前最好的语言,在各位大佬和热心贡献者的帮助下Python拥有一个庞大的社区支持技术发展,开发两个各种 Python 包来帮助数据人员的工作。 1、Knockknock Knockknock是一个简单的Python包,它会在机器学习模型训练结束
张俊红
2022/08/26
1.4K0
30个数据科学工作中必备的Python包!
数据驱动!精细化运营!用机器学习做客户生命周期与价值预估!⛵
现在的互联网平台都有着海量的客户,但客户和客户之间有很大的差异,了解客户的行为方式对于充分理解用户与优化服务增强业务至关重要。而借助机器学习,我们可以实现更精细化地运营,具体来说,我们可以预测客户价值,即在特定时间段内将为公司带来多少价值。
ShowMeAI
2022/11/16
6000
数据驱动!精细化运营!用机器学习做客户生命周期与价值预估!⛵
精心整理20+Python实战案例(附源码、数据)
最近小编认真整理了20+个基于python的实战案例,主要包含:数据分析、可视化、机器学习/深度学习、时序预测等,案例的主要特点:
Python小二
2023/08/18
5.9K0
精心整理20+Python实战案例(附源码、数据)
MacBook Pro 原生安装 Ubuntu 24.04 ARM 版
趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。
soulteary
2024/05/11
5.3K0
MacBook Pro 原生安装 Ubuntu 24.04 ARM 版
新版Mac终于到货了!anandtech最新M1芯片评测出炉
上周,苹果发布了自研的 M1 芯片以及搭载 M1 芯片的三款新 Mac 产品:MacBook Pro、MacBook Air 和 Mac Mini。这一举动标志着苹果的 Mac 产品正式开启从英特尔架构到 ARM 架构的过渡。
机器之心
2020/11/20
1.2K0
新版Mac终于到货了!anandtech最新M1芯片评测出炉
数据科学和人工智能技术笔记 二十一、统计学
s^2 = \frac {1}{n-1} \sum_{i=1}^n \left(x_i - \overline{x} \right)^ 2
ApacheCN_飞龙
2022/12/02
1.1K0
Python速查宝典-GitHub共享
先前在天善智能那儿得到了一些翻译版的DataCamp,于是也抽空过一遍内容,把一些觉得常用的内容给记录下来,主要围绕着建模相关的资料内容,所以主要还是Pandas、Numpy、Scikit-learn为主了。
Sam Gor
2019/08/22
3.3K0
Python速查宝典-GitHub共享
【机器学习】集成模型/集成学习:多个模型相结合实现更好的预测
集成学习原名为Classifier combination / ensemble learning,它是根据训练数据构造一组基分类器(base classifier),通过聚合每个基分类器的输出来进行分类。
Twcat_tree
2023/10/23
15.6K0
【机器学习】集成模型/集成学习:多个模型相结合实现更好的预测
「Machine Learning」线性回归认识
所谓线性回归(Linear Regression),其最本质的特点就是可以用来根据已有的数据探究一个(或者多个)自变量与因变量之间的线性关系,从而对未知自变量所对应因变量进行预测。以单个自变量为例:
曼亚灿
2023/05/22
4660
「Machine Learning」线性回归认识
XGBoost和LightGBM
这两个模型都属于集成学习中的树模型,每个机器学习模型都有它特定的应用场景,不同的数据集适合用到的模型是不一样的。
算法之名
2021/10/09
1.3K0
XGBoost和LightGBM
炼丹5至7倍速,使用Mac M1 芯片加速pytorch完全指南
2022年5月,PyTorch官方宣布已正式支持在M1芯片版本的Mac上进行模型加速。官方对比数据显示,和CPU相比,M1上炼丹速度平均可加速7倍。
lyhue1991
2023/02/23
16.3K2
炼丹5至7倍速,使用Mac M1 芯片加速pytorch完全指南
MacBook Pro 原生安装 Ubuntu 24.04 ARM 版
趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。
soulteary
2024/05/02
1.2K0
推荐阅读
相关推荐
M1芯片搞数据科学好使吗?5种基准测试给你答案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验