Запускать инструменты машинного обучения, изначально скомпилированные для Apple Silicon

Обновление: объясняет, как исправить проблему с точностью проверки LSTM.

Как всем уже известно, новые Mac Apple Silicon M1 - невероятно мощные компьютеры. Наблюдая за эталонными тестами и всеми реальными тестами, выполняемыми повсюду, как инженер по машинному обучению я действительно думаю, что произошло что-то великое и родилась линия компьютеров мечты для машинного обучения.

MacBook Air на базе M1 не может превзойти производительность обучения сервера с высокопроизводительным графическим процессором. Но даже если я использую экземпляры на базе Tesla K80 или V100 для выполнения больших обучающих заданий, 95% моей повседневной работы основывается на небольшом размере данных менее 2 ГБ и разумном времени обучения, не превышающем нескольких минут.

Таким образом, наличие такой мощной лаборатории машинного обучения в ноутбуке без вентилятора весом 1,29 кг, таком как MacBook Air, звучит как мечта инженера.

Apple Silicon M1

  • 8-ядерный ЦП (4 высоких производительности на 3,2 ГГц, 4 высоких производительности на 2,06 ГГц)
  • 8-ядерный графический процессор (128 исполнительных блоков, 24 576 потоков, 2,6 терафлопс)
  • 16-ядерный Neural Engine, посвященный линейной алгебре
  • Унифицированная архитектура памяти 4266 МТ / с (34 128 МБ / с, передача данных)

Как заявляет Apple, благодаря UMA «все технологии SoC могут получать доступ к одним и тем же данным, не копируя их между несколькими пулами памяти». Кроме того, скорость памяти M1 намного превосходит большинство лучших доступных на сегодняшний день компьютеров. Например, передача памяти M1 на 60% быстрее, чем у новейшего iMac 27, выпущенного несколько месяцев назад, с оперативной памятью 2666 МТ / с. А благодаря унифицированной архитектуре памяти он исключает передачу памяти между процессором, графическим процессором и Neural Engine, что еще больше увеличивает разрыв в производительности с архитектурами Intel.

Запуск инструментов машинного обучения на Apple Silicon

Для повседневных исследований и разработки машинного обучения мне как минимум нужны Python 3, pandas, numpy, scikit-learn, matplotlib, tensorflow и jupyterlab.

Даже если он сообщает об удивительно хороших характеристиках, я пока не хочу использовать Rosetta 2. Вместо этого я ищу только нативные версии, скомпилированные для Apple Silicon, даже если они еще не используют всю свою мощь (GPU, Neural Engine).

Через две недели после запуска Apple Silicon Anaconda 2020.11 еще не совместима. Установщик запрашивает Rosetta. С другой стороны, установить Python 3 довольно просто. Просто откройте терминал и позвоните python3. Это устанавливает инструменты командной строки XCode, включая Python 3.8.2, скомпилированный для Apple Silicon. Но пока это совершенно бесполезно, так как попытка установки numpy завершается ошибкой компиляции. JupyterLab может быть установлен, но не запускает ни один ноутбук, что вызывает проблемы с ядром.

Конда

Решение состоит в том, чтобы использовать miniforge дистрибутив conda с открытым исходным кодом от conda-forge, спонсируемый numfocus и идентичный miniconda, но предоставляющий пакеты, скомпилированные для различных платформ, включая Apple Silicon. osx-arm64.

Scikit-Learn

Сначала я установил pandas, numpy, scikit-learn, matplotlib и jupyterlab из miniforge conda. После нескольких тестов на фиктивном классификаторе случайного леса, запущенном из записной книжки Jupyter, все кажется, работает отлично.

XGBoost

В настоящий момент нельзя установить пакеты повышения градиента, такие как XGBoost, LightGBM и CatBoost. Попытка скомпилировать их из установки pip в среде conda не удалась.

TensorFlow

Что касается TensorFlow, доступна альфа-версия для Apple Silicon. Это форк TensorFlow от Apple, который Google планирует объединить с мастером, как указано здесь.

Поскольку он был скомпилирован для Python 3.8, его нельзя установить в среде miniforge conda. Вместо этого необходимо использовать версию Python 3.8.2, установленную с инструментами командной строки XCode. Он создает выделенную виртуальную среду, которую можно использовать для экспериментов. Глядя на поставленные пакеты, он включает колесо numpy, поэтому мы можем предположить, что эта версия оптимизирована для Apple Silicon, как указано Apple в списке проектов с открытым исходным кодом, которые они помогают сообществу переносить.

Сначала я протестировал модели MLP, CNN и LSTM на MNIST. MLP и CNN работают отлично со снижением потерь, как и ожидалось, подобно тому, что наблюдается в текущей основной версии TensorFlow, работающей на моем Intel iMac. Возникла проблема с LSTM. Сообщая об уменьшающихся потерях, тестовый набор показывает очень низкую точность, в то время как такое чрезмерное переоборудование не появляется при обучении той же сети на 4 других конфигурациях (ЦП и ГП). Я сообщил о проблеме в Apple на GitHub.

Обновление: существует обходной путь, задав для размера пакета оценки значение, большее или равное размеру пакета обучения. Например, если размер обучающего пакета был 128, вы должны оценить его с тем же размером.

model.evaluate(X_test,y_test,verbose=2,batch_size=128)

Есть также некоторые другие ошибки, такие как исключение, возникающее при попытке отключить режим активного выполнения, чтобы избежать огромного замедления при использовании графического процессора. На данный момент в большинстве ситуаций достаточно хорошо работает только режим ЦП, несмотря на странное недоиспользование. Об этих проблемах также сообщается Apple на GitHub.

Так что насчет спектаклей?

Что касается выпуска miniforge, то сегодня неясно, был ли numpy оптимизирован или просто скомпилирован для Apple Silicon. С другой стороны, мы можем предположить, что выпуск numpy, поставляемый с TF 2.4 alpha, использует возможности вычислений линейной алгебры M1, по крайней мере частично. Я постараюсь прояснить это с помощью некоторых тестов в другой статье.

Что касается TensorFlow, то сейчас слишком рано проводить какое-либо надежное тестирование, так как по-прежнему существует слишком много проблем, особенно с графическим процессором. Даже на CPU мы наблюдаем странное недоиспользование, когда используется всего 4 ядра с 50% или менее нагрузкой каждое.

Скоро опубликую статью о характеристиках ML на M1.

Я могу раскрыть еще кое-чтоэто уже очень быстро.

Спасибо за чтение.

Источники