Предыстория
Я откладывал установку Tensorflow на свой Mac M1pro, пока в один прекрасный день колаб не отказался мне выдавать GPU. Я пару часов проводил не очень активные эксперименты, а далее до следующего утра не мог получить видеоадаптер, потому что превышен лимит. Ситуация грустная, эксперименты встали, поэтому лучше все-таки иметь запасной вариант, или даже сразу начать работать в своей среде.
Особенность работы Tensorflow на Mac заключается только в установке плагина tensorflow-metal. Подробнее об этом можно почитать на официальной страничке от Apple. Плагин позволит задействовать видеоадаптер M1/M1pro при обучении нейронных сетей.
Все нижеописанное опробовано на моем Macbook Pro 14 2021 M1pro.
Шаг #1 – сonda & tensorflow-metal
Исчервывающий туториал по установке в видео формате тут, всё наглядно и понятно:
Вот ссылка на страницу 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:

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