Это инструменты, пакеты и библиотеки, которые мы с коллегами используем для повышения производительности разработки конвейера машинного обучения и производственного развертывания. Ниже приводится снимок наших фаворитов по состоянию на 24 декабря 2020 года.

Python

Мы использовали Python преимущественно (95%) в течение последних семи лет, потому что:

  1. Почти все новые модели машинного обучения, облака, графические процессоры и многое другое доступны как Python API;
  2. Ассортимент и количество бесплатных кодов и пакетов - самые большие, которые мы видели;
  3. Собственный Python медленнее, чем C более чем в 20 раз, но почти все пакеты Python имеют скорость, близкую к C, поскольку они представляют собой тонкие API-интерфейсы по сравнению с CPython или используют другие методы ускорения.

Мы использовали C для ускорения Python, когда нельзя было использовать Numba. Мы попробовали Go, но не вышло.



4. Python GIL (отсутствие параллелизма на многоядерных машинах) с каждым днем ​​все чаще обходится облаком, Spark, пакетной реализацией (например, XGBoost) и строгой типизацией. с введением подсказки типов начиная с Python 3.5.



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

IDE Python

Мы использовали EMACS 15 лет. Мы были теми людьми, которые изучали информатику и случайно увлеклись разработкой программного обеспечения в процессе кодирования на LISP.

Мы прекратили перенос EMACS или использование чужого порта на новое оборудование и платформу ОС. Мы начали использовать другие IDE, так как работали с Java, Scala, R, Matlab , Go и Python.

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

Я думаю, что есть три хороших варианта для Python IDE.

Блокнот Jupyter или JupyterLab

Jupyter Notebook позволяет встраивать текст, встраивать код и запускать код в интерактивном режиме. За основу взят лабораторный блокнот.

Project Jupyter существует для разработки программного обеспечения с открытым исходным кодом, открытых стандартов и интерактивных вычислительных сервисов на десятках языков программирования. - Проект Jupyter



nbdev

fast.ai создал полный набор инструментов Jupyter Notebook. Пожалуйста, посмотрите их.

Это среда программирования Python под названием nbdev, которая позволяет создавать полные пакеты Python, включая тесты и обширную систему документации, все в Jupyter Notebooks. - Джереми Ховард

Nbdev

fast.ai создал полный набор инструментов Jupyter Notebook. Пожалуйста, посмотрите их.

Это среда программирования Python под названием nbdev, которая позволяет создавать полные пакеты Python, включая тесты и обширную систему документации, все в Jupyter Notebooks. - Джереми Ховард

PyCharm или VSCode

PyCharm и VSCode - самые популярные IDE (интерактивные среды разработки) для Python.

Мы используем PyCharm (или VSCode) для разработки, документирования, тестирования и отладки. Оба интегрируются со встроенным форматированием документации, контролем версий (git или GitHub), пакетами тестирования, покрытием, линтерами, средствами проверки подсказок типов и форматами кода.

Python IDE для профессиональных разработчиков - JetBrains



Инструменты разработки Python

"Чернить"

Черный форматирует ваш код как расширенный набор стандарта PEP-8. Мы используем его для форматирования всех файлов кода в проекте, запускаемом действиями PyCharm, VSCode или GitHub .

Codacy

Codacy в настоящее время является нашим любимым инструментом разработки, занимающимся занудой в *** (PITA). Он выявляет больше ошибок и подозрительного кода, чем pylint, некоторые стилистические предупреждения мы игнорируем . Мы думаем о сегодня как об автоматическом инструменте проверки кода . Как codacy указано в их слоге : Автоматизируйте проверку кода ваших коммитов и запросов на вытягивание.

Покрытие

Coverage.py - это инструмент, который мы используем для измерения объема кода, охватываемого нашей структурой Pytest.

Git и GitHub

Мы используем git для локального контроля версий файлов. Как только модульные тесты проходят на одной из локальных машин, мы отправляем наш код в репозиторий в облаке GitHub.

Mypy

Тип Mypy проверяет программы, аннотации которых соответствуют PEP 484. mypy часто используется в непрерывной интеграции для предотвращения ошибок типа. Mypy присоединяется к другим нашим инструментам для разработчиков, таким как pytest, black, pylint и Codacy.



Пилинт

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

Пытест

За свою карьеру мы использовали много разных фреймворков. Мы остановились на Pytest для модульного тестирования в первую очередь, поскольку требуется минимальный шаблон.

"Неравносторонний"

Мы используем Scalene вместо встроенного профилировщика Python.

Scalene - это высокопроизводительный профилировщик и памяти ЦП для Python, который выполняет несколько вещей, недоступных другим профилировщикам Python. Он работает на порядки быстрее, чем другие профилировщики, при этом предоставляя гораздо более подробную информацию.

Облачные сервисы

Кубернетес

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

Также можно использовать Kubernetes в локальном кластере сетевых машин. Kubernetes, вероятно, работает локально, но мы никогда не использовали его таким образом.

Kubernetes », также известный как K8s, - это система с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями. - Документация Kubernetes.

Kuberflow

Мы используем kuberflow для создания конвейеров машинного обучения для модулей Kubernetes. Мы используем kuberflow только на облачной платформе Goggle (GCP). Это открытый исходный код от Google и должен работать на других облачных платформах. Однако GCP упаковывает kuberflow как облачную PaaS (платформу как услугу). Как GCP PaaS, kuberflow имеет удобный шаблон графического интерфейса пользователя и отображение DAG (направленный ациклический график) конвейера машинного обучения .

Инструменты DevOps (CD / CI / CD) и операций машинного обучения (MLOps)

Непрерывная разработка - первая часть традиционного процесса непрерывной интеграции. Непрерывное развертывание следует за непрерывной интеграцией (CD / CI / CD).

Введение и обзор DevOps можно найти по адресу:



DevOps (Development Operations) был создан для жизненного цикла кода на компьютерном языке. MLOps (Операции машинного обучения) расширяет DevOps для жизненного цикла конвейера машинного обучения.

Введение и обзор MLOps можно найти по адресу:



MLFlow

Мы обнаружили, что MLFlow эффективен для определения машинных проектов с пятью или меньшим количеством шагов, когда какая-либо другая структура выполняет любую предварительную обработку данных. Мы использовали MLFlow для конвейера машинного обучения, который следует за интерфейсом предварительной обработки распределенных данных на основе Spark.

Возможно, мы неправильно использовали MLFlow, но казалось, что входные и выходные данные основаны на файлах. Однако нам очень нравится компонент Отслеживание MLFlow. Компонент MLflow Отслеживание позволяет нам регистрировать параметры модели, версии кода, показатели и файлы вывода для отображения на информационных панелях, созданных с помощью Streamlit (обсуждается позже. ).

Примечание. Сейчас мы редко используем MLFlow. Мы используем Photon.ai для быстрых экспериментов и kuberflow для производственных конвейеров машинного обучения в облаке.

Photon.ai

Photon.ai включает в себя Scikit-Learn, pycluster и другие структуры машинного обучения (ML) или глубокого обучения (DL) с единой объединяющей парадигмой. Photon.ai использует архитектуру методов класса Scikit-Learn и класса Transformer.

Photon.ai добавляет код , который сокращает количество ручного кодирования и ошибок, преобразуя алгоритмы до и после обучения в элементы с их сигнатурой аргумента. Примерами элементов являются несколько очистителей данных, масштабаторов, импортеров, балансировщиков классов, кросс-валидаторов, настройщиков гиперпараметров и ансамблей.

Photon.ai связывает элементы в конвейер машинного обучения. Два или более конвейера состоят из конъюнктивного (и) или дизъюнктивного (или) оператора для создания DAG (направленного ациклического графа). Исходный исходный код Photon.ai , расширенный исходный код Photon.ai , примеры, документ arXiv и документация. Можно найти, перейдя по желаемой ссылке.

Вы можете посмотреть, как photon.ai расширяет возможности scikit-learn до инструмента MLOps, в следующем блоге:



Действия GitHub

Наш опыт позволяет нам прогнозировать, что GitHub Actions будет важным выбором для непрерывной разработки, непрерывной интеграции и непрерывного развертывания (CD / CI / CD), включая и отключая GitHub.

Непрерывная разработка - это когда любое нажатие из локального репозитория переходит в систему управления версиями проекта Dev repo. В репозитории GitHub скрипты CD / CI выполняются для проверки соответствия формату PEP-8, модульного тестирования, тестирования документации и проверки качества кода.

Это основная основа сценария действия GitHub, который мы показываем:



Докер

Docker создает образ приложения и его зависимостей в виде полноценного автономного компонента, который можно перенести на большинство предложений поставщиков облачных услуг, Linux, ОС Windows (операционная система) и MacOS.

Docker-Compose используется для управления несколькими контейнерами одновременно для одного и того же приложения. Этот инструмент предлагает те же функции, что и Docker, но позволяет создавать более сложные приложения.

Образ Docker похож на элемент Photon.a i; Существенная разница заключается в том, что Kubernetes балансирует нагрузку Docker путем репликации образов и управляет DAG. Docker образы являются узлами в распределенной системе.

Создание образов Docker подробно описано в следующих блогах:





Пакеты библиотеки Python

Диаграммы

Диаграммы позволяют создавать качественную архитектуру DAG (Directed Acyclic Graphs). Диаграммы имеют понятие, называемое узлами. Узлы - это то, как пакет Диаграммы организует значки в разные группы, где каждый узел находится в общедоступном домене или облачной службе.

Отрисовка высококачественных схем архитектуры Azure, AWS и GCP показана в следующем блоге:



Гиплот

HiPlot - это интерактивный инструмент визуализации, который позволяет нам обнаруживать корреляции и закономерности в многомерных данных. HiPlot использует метод, известный как параллельные графики, который мы используем для визуализации и фильтрации многомерных данных.

Почему бы не использовать Tableau? Делаем, если у клиента есть лицензия. HiPlot имеет открытый исходный код от Facebook и поэтому не требует лицензии. Мы можем использовать HiPlot где угодно. Мы думаем, что он лучше отображает данные большого размера, чем Tableau.

HiPlot использует наш любимый Streamlit для замены Flask, Django и других интерфейсов с графическим интерфейсом пользователя, используемых для Machine. Дисплей обучения. Вы можете более подробно изучить руководство: Компонент HiPlot для Streamlit.

Исходный код для HiPlo t и документация для Hiplot находятся по соответствующим URL-ссылкам.

Логуру

У Python есть проверенный и проверенный пакет logger. Подробно о пакете logger можно прочитать в этой статье.

Однако я предпочитаю использовать недавно выпущенный пакет loguru, потому что его проще использовать, чем logger, а loguru является технологическим и потокобезопасным, в то время как регистратор не является безопасным процессом. Ссылка: loguru project.

Вы можете узнать, как я использую loguru в:



Пикластеризация

Мы используем Pyclustering для более широкого и иногда более быстрого выбора алгоритмов кластера неконтролируемого машинного обучения, чем sk - learn.

pyclustering - это библиотека для интеллектуального анализа данных Python и C ++ с открытым исходным кодом в соответствии с лицензией BSD-3-Clause. Библиотека предоставляет инструменты для кластерного анализа, визуализации данных и содержит колебательные модели сети. - Документация Пикластеринг.

Вы можете ознакомиться с подробным исследованием pycluster Kmeans и Kmedoids в следующем блоге:



Пысим

Мы используем pysim для моделирования на основе Python в виде связанных дифференциальных уравнений. Некоторые из нас - бывшие физики. Мы ценим то, что вы можете подключить одну смоделированную систему к другим смоделированным системам. Простые системы становятся сложными, поскольку они соединяются вместе, чтобы создать сложное моделирование.

Ударил

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

Чего часто не делается, так это того, что вы можете продолжать аргументировать данные всех классов.

Вы можете узнать, как мы используем smote для аргументации всех классов структурированных данных:



Sparkflow и SparkTorch

Если вы используете Spark и Keras или Tensorflow, используйте Sparkflow, чтобы ускорить ваш pytorch обучение по N разделам, где N должно быть размером вашего пакета или количеством графических процессоров, в зависимости от того, что меньше. Вы используете SparkTorch для pytorch.

Pytorch Lightning

Lightning на pytorch похож на Keras на Tensorflow. Мы используем Lightning и Keras, чтобы поднять нас на пару уровней выше сложности pytorch или Tensorflow.

Стримлит

Streamlit - это платформа Python с открытым исходным кодом, которую мы используем для быстрой разработки и развертывания графических веб-интерфейсов для приложений машинного обучения.

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





Пространство

spaCy - это самый быстрый из известных нам пакетов для операций обработки естественного языка (NLP). spaCy - это библиотека НЛП, реализованная как в Python, так и в Cython. Благодаря Cython части spaCy работают быстрее, чем если бы они были реализованы в Python. Spacy доступен для операционных систем MS Windows, macOS и Ubuntu и изначально работает на графических процессорах Nvidia.

spaCy - хороший вариант, если вы хотите запустить в производство свое NLP приложение . Если вы выберете spaCy, Обнимающее лицо, fast.ai и GPT-3, вы выполнить SOTA (современное состояние) исследование различных моделей НЛП (наше мнение в то время написания этого блога).



MFST

Мы используем mFST для создания и развертывания конечных автоматов для анализа естественного языка. Здесь мы не углубляемся в конечный автомат (FSM).

mFST - это библиотека Python для работы с конечными автоматами на основе OpenFST. mFST - это тонкая оболочка для OpenFST, которая предоставляет все методы OpenFST для управления FST. - Бумага mFST.

Если вы когда-нибудь попробуете что-то другое, кроме сверточной нейронной сети (CNN), вы можете попробовать автоматические автоматы, но только если вы хорошо знакомы с теорией конечных автоматов. Мы рекомендуем начать с простого CNN.

Резюме

Я перечислил и обобщил наиболее полезные для нас блоги, сайты и информационные бюллетени по состоянию на 24 декабря 2020 г. Я уверен, что пропустил некоторые из ваших фаворитов, учитывая стремительный рост области машинного обучения. Вы можете быть уверены, что к концу 2021 года у нас будет больше любимых пакетов, возможно, новый язык или два новых блога.

Я надеюсь, что некоторые из этих инструментов и пакетов новы для вас, и надеюсь, что вы найдете их полезными.

С Новым Годом!