点击此处查看最新的网赚项目教程

最近 M1 芯片爆火,它是否适用于数据科学?在常用基准上测试一下就知道了。

芯片解密_芯片是什么_m1芯片

新版 Macbook 已经问世了一段时间,如果将 M1 芯片用于数据科学,性能会如何呢?本文作者将 M1 Macbook Pro 与基于 Intel 的 2019 Macbook Pro 在 5 种常用基准上进行了测试,结果发现 M1 芯片的性能确实是令人震惊的。

首先,它的运行速度比 2019 MBP 是快几倍的,并且运行过程中完全保持安静。我执行了多 CPU 的困难任务,散热扇甚至都没有发动过。当然,还有电池寿命也令人难以置信,重度使用多达 14 小时也不会出现问题。

测试的基准共有 5 种:

本文的所有比较都是在两个 Macbook Pro 之间进行的:

并非所有库都与新 M1 芯片兼容。目前配置 Numpy 和 TensorFlow 没问题,但是 Pandas 和 Scikit-Learn 还不能在本地运行 – 至少我没有找到可用的版本。

唯一可行的解决方案是通过 Anaconda 安装这两个库,但需要通过 Rosseta 2 仿真器运行,因此它比本机要慢一些。

你将看到的测试在任何形式上都不是「科学的」。他们仅仅比较了上述机器之间在一组不同的编程和数据科学任务中的运行时。

CPU 和 GPU 基准

我们首先从基本的 CPU 和 GPU 基准开始。使用 Geekbench 5 进行测试的结果如下表:

m1芯片_芯片是什么_芯片解密

图 1:Geekbench 比较(CPU 和 GPU)。

M1 芯片在 2019 Mac 中超越了 Intel 芯片。该基准测试仅衡量整体机器性能,与本文要进行的数据科学基准测试并不是百分百相关。

性能测试——纯 Python

以下是在该基准中执行的任务列表:

该测试仅使用内置 Python 库,不含 Numpy。以下是测试的代码段

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')

结果如下:

芯片是什么_芯片解密_m1芯片

图 2:Python 速度测试,越低为越好。

通过 Anaconda(和 Rosseta 2)在 M1 Mac 上运行的 Python 减少了 196 秒的运行时。更好是在本地运行 Python,因为这样就能将运行时进一步减少 43 秒。

性能测试——Numpy

以下是在该基准中执行的任务列表:

脚本如下

# SOURCE: https://gist.github.com/markus-beuckelmann/8bc25531b11158431a5b09a45abd6276import numpy as npfrom time import timefrom datetime import datetimestart_time = datetime.now()# Let's take the randomness out of random numbers (for reproducibility)np.random.seed(0)size = 4096A, 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 multiplicationN = 20t = time()for i in range(N):np.dot(A, B)delta = time() - tprint('Dotted two %dx%d matrices in %0.2f s.' % (size, size, delta / N))del A, B# Vector multiplicationN = 5000t = time()for i in range(N):np.dot(C, D)delta = time() - tprint('Dotted two vectors of length %d in %0.2f ms.' % (size * 128, 1e3 * delta / N))del C, D# Singular Value Decomposition (SVD)N = 3t = time()for i in range(N):np.linalg.svd(E, full_matrices = False)delta = time() - tprint("SVD of a %dx%d matrix in %0.2f s." % (size / 2, size / 4, delta / N))del E# Cholesky DecompositionN = 3t = time()for i in range(N):np.linalg.cholesky(F)delta = time() - tprint("Cholesky decomposition of a %dx%d matrix in %0.2f s." % (size / 2, size / 2, delta / N))# Eigendecompositiont = time()for i in range(N):np.linalg.eig(G)delta = time() - tprint("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')

测试结果如下:

m1芯片_芯片解密_芯片是什么

图 3:Numpy 速度测试,越低越好。

在 Numpy 上得到的结果有点奇怪。Numpy 似乎在 2019 Intel Mac 上运行得更快,作者猜想原因可能在于进行了一些优化。

性能测试——Pandas

Pandas 基准非常类似于 Python。二者执行了相同的操作,但结果被合并为单个数据 frame。

以下是任务列表:

以下是测试代码段:

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')

结果如下:

芯片是什么_芯片解密_m1芯片

图 4:Pandas 速度测试——越低越好

需要注意的是这里没有安装本机 Pandas,但 M1 芯片上的 Pandas 以快了 2 倍的速度完成了该基准测试。

性能测试——Scikit-Learn

与 Pandas 一样,这里也没有在本机上安装 Scikit-Learn,只有通过 Rosseta 2 仿真器运行的 Intel MBP 和 M1 MBP 的比较结果。

以下是在该基准测试中执行的任务列表:

这是一个大致的标准模型训练程序,但不包含测试多种算法,数据准备和特征工程。以下是测试的代码段:

from sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.metrics import accuracy_score, confusion_matrixtime_start = datetime.now()# Datasetiris = 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 splitX = 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 tuningmodel = 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')

结果如下:

m1芯片_芯片是什么_芯片解密

图 5:Scikit-Learn 速度测试——越低越好。

结果传达了和使用 Pandas 测试时相同的信息——2019 Intel i5 处理器用两倍时长才完成了相同的任务。

新的 M1 芯片绝对是物有所值的,但更好的版本还在后面,毕竟这只是第一代。

原文链接:

百万级文献分析,十万字深入解读

2020-2021 全球AI技术发展趋势报告

报告内容涵盖人工智能顶会趋势分析、整体技术趋势发展结论、六大细分领域(自然语言处理、计算机视觉、机器人与自动化技术、机器学习、智能基础设施、数据智能技术、前沿智能技术)技术发展趋势数据与问卷结论详解,最后附有六大技术领域5年突破事件、Synced Indicator 完整数据。

识别下方二维码,立即购买报告。

m1芯片_芯片解密_芯片是什么

©THE END

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: cai842612