Включая Macbook M1 и несколько советов по более плавной установке

Когда Apple объявила о выпуске нового Macbook Apple Silicon M1, это застало сообщество машинного обучения врасплох. Первое, о чем думали все специалисты по данным, — есть ли какой-то потенциал в переносе их рабочего пространства на MacOS.

Конечно, такой шаг имел бы смысл, если бы по крайней мере 2 самых популярных фреймворка для обработки данных, Tensorflow и Pytorch, были бы совместимы с новым процессором. Что касается Tensorflow, то как сообщество, так и Apple добились большого прогресса. Кроме того, Apple выпустила новый плагин Metal, который позволяет Tensorflow использовать GPU через TensorFlow-metal PluggableDevice.

Вы можете получить доступ ко всем статьям из серии Настройка Apple M1 для глубокого обучения здесь, включая руководство о том, как установить Tensorflow на Mac M1.

Pytorch несколько отстал с точки зрения совместимости, однако теперь вы можете установить Pytorch изначально на MacBook M1. Вот как это сделать:

Примечание. Если вы уже установили Tensorflow, первые два шага можно пропустить.

Шаг 1: Установите Xcode

На некоторых Macbook M1 предустановлен Xcode. Если нет, то его можно легко загрузить из App Store. Затем установите инструменты командной строки Xcode с помощью этой команды:

$ xcode-select --install

Шаг 2: Установите MiniForge

По сути, MiniForge — это установщик conda, сравнимый с MiniConda. Одним из его самых больших преимуществ является совместимость с MacOS, включая устройства M1. Чтобы его скачать, перейдите на эту страницу, выберите установщик Apple Silicon и выполните:

$ bash Miniforge3-MacOSX-arm64.sh

Если у вас уже есть уже существующий дистрибутив conda, например. Anaconda или MiniConda, их не нужно удалять, чтобы использовать MiniForge. Для тех, кто знаком с экосистемой conda, только один дистрибутив conda может быть функциональным в данный момент времени. Прочтите эту статью, чтобы узнать, как эффективно управлять несколькими дистрибутивами conda одновременно!

Шаг 3: Настройте среду conda и установите MiniForge

Давайте создадим новую среду conda в MiniForge и назовем ее pytorch_m1. Также не забудьте ее активировать:

$ conda create --name pytorch_m1 python=3.8
$ conda activate pytorch_m1

Затем установите Pytorch. Отметьте здесь, чтобы найти подходящую версию. Поскольку нам нужна минималистичная установка Pytorch, просто выполните:

$ conda install -c pytorch pytorch

При необходимости установите блокнот или лабораторию Jupyter:

$ conda install -c conda-forge jupyter jupyterlab

Вот и все!

Чтобы проверить, что все работает, запустите простую программу:

# -*- coding: utf-8 -*-
import torch
import math


dtype = torch.float
device = torch.device("cpu")

# Create random input and output data
x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)
y = torch.sin(x)

# Randomly initialize weights
a = torch.randn((), device=device, dtype=dtype)
b = torch.randn((), device=device, dtype=dtype)
c = torch.randn((), device=device, dtype=dtype)
d = torch.randn((), device=device, dtype=dtype)

learning_rate = 1e-6
for t in range(2000):
    # Forward pass: compute predicted y
    y_pred = a + b * x + c * x ** 2 + d * x ** 3

    # Compute and print loss
    loss = (y_pred - y).pow(2).sum().item()
    if t % 100 == 99:
        print(t, loss)

    # Backprop to compute gradients of a, b, c, d with respect to loss
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()

    # Update weights using gradient descent
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d


print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')

Кроме того, обязательно проверьте, работает ли программа изначально на процессоре Apple M1. В этом случае в разделе Вид в Мониторе активности вы должны увидеть опцию «Apple». Если вы видите Intel, что-то пошло не так во время установки.

Решение нескольких распространенных проблем:

1 . Numpy не распознан

На самом деле эта проблема возникает из-за того, что Miniforge устанавливает версию numpy без conda-forge. Вероятно, вы увидите что-то вроде этого:

Эту проблему можно легко исправить, установив пакет openblas:

$ conda install -c conda-forge openblas

2. Использование Intel вместо Apple:

Некоторые пользователи по-прежнему могут наблюдать в Мониторе активности, что вместо Apple используется Intel. Одним из возможных объяснений этого является то, что conda неправильно определила архитектуру arm64 (что делается автоматически). Как следствие, conda устанавливает версию библиотек на базе arm64.

В этом случае архитектура должна быть указана явно при создании новой среды conda. Чтобы решить эту проблему, при создании новой среды conda в Minforge вместо этого выполните следующее:

$ CONDA_SUBDIR=osx-arm64 conda create --name pytorch_m1 python=3.8

Заключительные замечания

Pytorch — неотъемлемая часть экосистемы науки о данных, и поэтому я считаю, что исчерпывающее руководство по установке этой платформы на новой серии компьютеров Apple абсолютно необходимо.

С другой стороны, Pytorch еще предстоит пройти долгий путь. Следующей вехой, вероятно, станет библиотека или плагин, который позволит Pytorch использовать GPU.