Производительность Apple M1 и M2 для обучения моделей SSL

Обеспечение производительности Apple M1 и M2 для обучения моделей SSL

Мы хотим узнать, насколько быстры процессоры Apple M1 и M2 в обучении моделей самообучения.

Количество бенчмарков для обучения моделей машинного обучения с использованием новых чипов Apple все еще невелико. Кроме того, большинство результатов сравнивают только чипы M1 с более ранними версиями программного обеспечения, которые могли не быть оптимизированы на момент проведения тестов. Вот почему мы решили провести собственные бенчмарки.

Для измерения производительности чипов Apple M1 и M2 в обучении мы установили простой бенчмарк. Мы обучаем модель SimCLR с основной архитектурой ResNet-18 на наборе данных cifar-10. Мы измеряем время, затраченное на завершение одной эпохи. В наших экспериментах мы используем различные чипы M1 и M2, а также сравниваем производительность CPU и GPU.

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

  • Macbook Pro 2021 с M1 Pro и графическим процессором 14 ядер (в данной статье называемый M1 Pro)
  • Macbook Air 2023 с M2 и графическим процессором 8 ядер (в данной статье называемый M2)
  • Мы сравниваем результаты с опорной реализацией, использующей графический процессор Nvidia A6000 Ampere

Краткое содержание

  • На M1 Pro GPU в 8,8 раз быстрее для обучения, чем использование CPU.
  • M1 Pro GPU примерно в 13,77 раз медленнее, чем графический процессор Nvidia A6000 Ampere.
  • M1 Pro GPU на 26% быстрее, чем M2 GPU.
  • PyTorch, работающий на чипах Apple M1 и M2, пока не полностью поддерживает torch.compile и точность 16 bit. Надеемся, что это изменится в ближайшие месяцы.

В следующей таблице вы найдете различное вычислительное оборудование, которое мы оценили. Справа вы найдете среднее время на одну эпоху в минутах. Все чипы Apple M1 и M2 используют самую последнюю сборку с 30.6.2023, в то время как чип Nvidia A6000 Ampere использует более старую версию PyTorch с 2022 года.

Вычислительное оборудование и время, необходимое для обучения одной эпохи.

Настройка и эксперименты

Мы даем обзор используемых программных и аппаратных компонентов для экспериментов.

Мы используем примеры для обучения модели ResNet-18 с использованием SimCLR на наборе данных Cifar10 из бенчмарков lightly. Вместо обучения моделей на 200 эпох, мы просто обучаем их на 2 эпохах на аппаратных средствах Apple. Мы оставляем все остальные параметры (размер пакета: 128, точность: 32 bit, количество рабочих: 8) неизменными.

Обучающий код автоматически оценивает модель после каждой эпохи с помощью классификатора kNN. Две эпохи равны обучению модели на обучающих данных дважды и оценке модели дважды. Для наших экспериментов мы используем среднее время на один пакет.

У нас есть опорные результаты на графическом процессоре Nvidia A6000 Ampere для сравнения. Графический процессор Nvidia использует 97,7 минут на 200 эпох, то есть 0,49 минуты на эпоху.

Мы используем 8 для количества рабочих. Мы не настраивали и не изменяли никакие параметры при переключении с системы, использующей графический процессор Nvidia A6000, на чипы M1 и M2. Однако при мониторинге использования ЦП и ГПУ мы заметили, что на устройствах M1 и M2 мы постоянно находимся выше 90% использования, что позволяет предположить, что мы близки к пределу доступного аппаратного обеспечения.

Установка PyTorch с поддержкой GPU на Apple M1 и M2

Для наших экспериментов нам нужно установить PyTorch на аппаратные средства Apple M1 и M2.

Мы следуем этому руководству здесь: https://developer.apple.com/metal/pytorch/

Наконец, наш тестовый система на M1 Pro имеет установленные следующие пакеты:

Результаты

Обратите внимание, что мы не используем torch.compile или 16-битную точность из-за отсутствия поддержки на Apple-чипах. На сегодняшний день графические процессоры Apple M1 и M2 действительно поддерживают 16-битную точность, но в torch отсутствует поддержка автоматического приведения типов, которое необходимо для масштабирования градиентов и использования автоматически более высокой точности для обучения. Поэтому мы не используем ни одну из этих функций.

Обзор различных экспериментов. Мы всегда сообщаем полное время эпохи, включающее время обучения и проверки.

Мы обсуждаем различные результаты бенчмарков более подробно здесь. В качестве справки мы ориентируемся на два публично доступных бенчмарка для обучения моделей машинного обучения на аппаратных средствах Apple M1.

Результаты на GPU M1 Pro

Давайте взглянем на детализированные результаты на GPU M1 Pro. Поскольку мы используем PyTorch Lightning для экспериментов, мы также получаем сводку используемого ускорителя и размера модели.

Вы можете видеть, что GPU был обнаружен: GPU available: True (mps), used: True

Общее время для двух эпох составляет 13,5 мин. Время для одной эпохи составляет 6,75 мин, что в 13,77 раз медленнее, чем у GPU A6000 от Nvidia, который работает 0,49 мин.

Результаты на процессоре M1 Pro

Из любопытства мы также запустили тот же бенчмарк на процессоре M1 Pro, который имеет 6 ядер производительности и 2 эффективных ядра.

Как и ожидалось, результаты хуже, чем при использовании GPU. Процессор занял 118,6 мин для двух эпох, или 59,3 мин на эпоху. Процессор M1 Pro в 8,8 раз медленнее, чем использование GPU M1 Pro. Эти результаты показывают большую разницу в производительности между GPU и процессором по сравнению с предыдущими бенчмарками:

Предыдущие бенчмарки МО на аппаратных средствах Apple M1

Мы нашли только два других бенчмарка. Оба относятся к маю 2022 года, когда была объявлена первоначальная поддержка PyTorch на аппаратных средствах Apple.

Сравнение времени обучения VGG16 на эпоху. Из https://sebastianraschka.com/
PyTorch сообщает только о повышении скорости обучения на GPU по сравнению с CPU на чипе M1 Ultra. Источник: https://pytorch.org/

По сравнению с двумя другими результатами, наше сравнение обучения ResNet-18 требует меньше вычислительных ресурсов. Модели VGG-16 и ResNet-50 имеют больший размер с большим количеством параметров и операций с плавающей запятой.

В соответствии с официальными предварительно обученными моделями torchvision, мы можем получить следующие данные о трех моделях:

  • Модель VGG-16 имеет 138 миллионов параметров и 15.47 миллиарда операций с плавающей запятой
  • Модель ResNet-18 имеет 11.7 миллионов параметров и 1.81 миллиарда операций с плавающей запятой
  • Модель ResNet-50 имеет 25.6 миллионов параметров и 4.09 миллиарда операций с плавающей запятой

Последующие действия

Поддержка половинной точности (fp16)

Несмотря на то, что графические процессоры Apple M1 и M2 поддерживают fp16, в программной среде PyTorch все еще не хватает поддержки некоторых областей. Например, текущая проблема остается открытой: https://github.com/pytorch/pytorch/issues/88415, что мешает нам легко использовать смешанную точность с помощью автовыбора. Хорошая новость заключается в том, что уже поддерживается fp16 для чипов M1 и M2, что означает, что мы можем создавать тензоры fp16 и выполнять операции над ними.

Поддержка torch.compile для чипов M1 и M2

Если вы попытаетесь использовать torch.compile, вы получите следующую ошибку: RuntimeError: Unsupported device type: mps, так как устройство MPS пока не поддерживается.

Если вам понравилась эта статья и вы хотите прочитать больше материалов от меня, вы можете следовать за мной на VoAGI.

Игорь Сушмель, Сооснователь Lightly