Tensorflow на Mac M1/M1Pro

Предыстория

Я откладывал установку Tensorflow на свой Mac M1pro, пока в один прекрасный день колаб не отказался мне выдавать GPU. Я пару часов проводил не очень активные эксперименты, а далее до следующего утра не мог получить видеоадаптер, потому что превышен лимит. Ситуация грустная, эксперименты встали, поэтому лучше все-таки иметь запасной вариант, или даже сразу начать работать в своей среде.

Особенность работы Tensorflow на Mac заключается только в установке плагина tensorflow-metal. Подробнее об этом можно почитать на официальной страничке от Apple. Плагин позволит задействовать видеоадаптер M1/M1pro при обучении нейронных сетей.

Все нижеописанное опробовано на моем Macbook Pro 14 2021 M1pro.

Шаг #1 – сonda & tensorflow-metal

Исчервывающий туториал по установке в видео формате тут, всё наглядно и понятно:

Установка Tensorflow Keras на M1 GPU

Вот ссылка на страницу github из этого ролика.

Вся установка прошла без сюрпризов, юпитер исправно заработал, но обучение модели не запускалось – вылетала куча ошибок. Вероятно имело место несовместимость последней версии TF с плагином Metal, или что-то в этом роде.

Шаг #2 – правильные версии tensorflow

Идем на форум Apple Developer и находим товарищей по несчастью.

Проблема решается установкой немного более старых версий плагинов. Переходим в свое окружение tensorflow:

conda activate tensorflow

И устанавливаем устаревшие версии:

pip install tensorflow-macos==2.10
pip install tensorflow-metal==0.6

Это работает на дату написания этой заметки — 18.01.2023

Шаг #3 – логирование предупреждений

В блокноте Jupiter стоит снизить уровень логирования, чтобы вывод не завливало сообщениями на красном фоне.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

Скороть обучения различных моделей выходит на уровне Colab или медленее, но зато больше никаких ограничений. Ноутбук не перегревается.

Шаг #4 – тестируем обучение модели

Для первого теста можете запустить следующий код:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
devices = tf.config.list_physical_devices()
print(devices)
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
    include_top=True,
    weights=None,
    input_shape=(32, 32, 3),
    classes=100,)

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=5, batch_size=64)

Вот какая скорость обучения вышла на моём M1pro/16Gb:

Результат работы tensorflow-metal на Macbook M1pro

Буду рад, если поделитесь результатами обучения данной модели на вашем Mac – присылайте в комментариях или мне в Telegram – добавлю в статью.

P.S. Кстати, ранее у меня получилось запустить tensorflow и на MacBook15 2017 с видеоадаптером AMD — скорость обучения была слишком медленная – оно того не стоило, нет смысла тратить своё время.

Прокрутить вверх