Иногда да, иногда нет.
Я и провожу бенчмаркинг. Наш путь начинается с установки GoLang и настройки среды разработки GoLang . Я показываю сравнительный анализ реализации GoLang kmeans и kmeans Python .
Вступление
У меня есть проблема, которую, как мне кажется, я разделяю с значительной частью сообщества машинного обучения (ML).
Мне нужен способ ускорить мои решения для машинного обучения Python, чтобы запустить их в производство.
Python слишком медленный для производственных приложений машинного обучения. Мне нужно отказаться от Python.
Я решил сделать следующее: изучить GoLang.
Он почти так же быстр, как C. Он так же прост в изучении, потому что имеет синтаксис, подобный C. Существует поддержка параллелизма на уровне языка. Он статически типизирован, но также включает сборку мусора.
Это примечательно, так как это есть на Windows, Mac, Linux и других платформах. Он поддерживает новые многоядерные архитектуры.
GoLang имеет открытый исходный код и имеет постоянно растущее сообщество участников.
Для меня важно то, что GOLang уже много лет используется в производстве в Google. Кроме того, я требовал, чтобы GOLang мог вызывать Python. Оболочка GOLang моих ядер на основе Python ML - мое быстрое решение для производственной среды.
Остальная часть этой статьи - это мой путь к использованию GoLang для ускорения алгоритмов машинного обучения на Python.
Я создаю среду разработки с помощью IDE GoLang вместе с некоторыми связанными инструментами и пакетами.
Затем я перечисляю 19 «бесплатных» ресурсов и 5 «платных» книг для изучения языка GoLang, используемого в нашей компании.
Наконец, я сравниваю sklearn kmeans Python с реализацией GoLang kmeans .
Все готово: настройка среды разработки Go
Лучше всего начать с источника: https://golang.org.
Здесь я загрузил установщик двоичной версии go1.14.4.darwin-amd64.pkg для MacOS 10.14. 6. Есть загрузки для Windows и Linux.
Я дважды щелкнул go.1.14.4.darwin-amd64.pkg , который находился в моем Mac Загрузки папка . Затем я выполнил инструкции всплывающего мастера установки.
Примечание. Для установки Go требуется 350 МБ на выбранном целевом диске.
Примечание. В зависимости от настроек безопасности вашего компьютера вам может быть предложено ввести пароль в процессе установки.
Примечание. Последнее действие после установки - «переместить установщик в корзину?» Я нажал кнопку "Да".
Настройка вашей GoLand IDE
Моя предпочтительная интерактивная среда разработки (IDE) Python - PyCharm. Я ценю IDE PyCharm, потому что она почти полностью автоматизирует мой конвейер разработки Python с помощью нескольких щелчков мыши.
Из-за этого предубеждения я стал искать GoCharm. Оказалось, что JetBrains, компания, стоящая за PyCharm, называет свою GoLang IDE GoLand.
Есть удобная кнопка для скачивания инсталляции GoLand. Из загрузки я дважды щелкнул goland-2020.1.3dmg, , который находился в моей папке Mac Загрузки. . Затем я выполнил инструкции всплывающего мастера установки.
В процессе установки на моей панели инструментов появился значок GoLand. Я дважды щелкнул значок GoLand.
Затем я нажал New Project:
Моя первая программа Go
Вы знаете, какой была моя первая программа GoLang?
package main import "fmt" func main() { fmt.Printf("hello world") }
Если вы угадали Hello World
, вы правы! Hello World
code был помещен в мой первый проект, awesomeProject1, после нажатия на учебник GoLand «Автостопом по GoLand».
Примечание. Я использую версию GoLand для сообщества.
Затем я запустил Hello World
в GoLand. Это сработало!
Я приступил к изучению оставшейся части учебника GoLand, «Автостопом по GoLand». Если вы использовали PyCharm, учебное пособие представляет собой краткое введение в GoLand.
Если вам не нравится PyCharm, возможно, вы захотите использовать другую IDE. Могу я предложить VSCode, еще одну популярную IDE с поддержкой нескольких языков.
В следующем разделе я перечисляю некоторые учебные ресурсы. То, что я использовал.
Образовательные ресурсы
Когда вы начинаете изучать новый язык, у вас должна быть исходная документация. Однако я рекомендую вам не начинать обучение здесь ...
Если вам нужно от пяти до десяти минут для изучения GoLang или вам нужно несколько тем прямо сейчас, я рекомендую
В списке «обязательных» должны быть следующие двенадцать ресурсов GoLang, доступных бесплатно в Интернете:
- Путешествие по го;
- Learn Go: 30 лучших руководств по Go для программистов всех уровней;
- Учебная серия по Голангу;
- Учебники и курсы Go;
- Идти примером;
- Суслики;
- Занятия спортом;
- Полное руководство по обучению го;
- Essential Go - бесплатная книга о языке программирования Go;
- Как написать код Go.
- Перейти к шаблонам параллелизма
- Учись с тестами.
Список пакетов GOLang (импорт!) Можно найти здесь:
Кроме того, здесь вы можете найти пакеты GOLang:
Эти пакеты являются частью проекта Go, но не входят в основное дерево Go. Они разработаны с более слабыми требованиями совместимости, чем ядро Go. Установите их с помощью иди иди.
И пакеты, которые я считаю полезными для машинного обучения:
Книги (не бесплатно)
- Язык программирования Go (Серия профессиональных вычислений Аддисон-Уэсли)
- Освоение Go: создание производственных приложений Golang с использованием сетевых библиотек, параллелизма, машинного обучения и расширенных структур данных, 2-е издание
- Практикуйся: включает 70 техник
Представление
Две основные причины выбора GoLang:
- простой в освоении синтаксис
- быстрее, чем Python
Как я знал C, первая причина была удовлетворена. Я обнаружил, что это похоже на базовые конструкции языка C, с небольшой добавкой Python и новыми функциями параллелизма.
Я не знаю мышления авторов GoLang (я найду версию Wiki). Моя предвзятость заставляет меня полагать, что GoLang является существенным -запись C для распределенных вычислений.
По причине №2 я рассмотрел различные тесты, которые показали, что GoLang от 30 до 50 раз быстрее, чем Python.
Пакеты и модули
Я потратил около четырех часов на чтение пакетов и модулей GoLang. Тем не менее, все, что мне нужно было сделать, это:
go get “github.com/pa-m/sklearn/base” go get “github.com/pa-m/sklearn/cluster” go get “github.com/pa-m/sklearn/dataset”
Я думаю, что GoLang развился так, что пакеты сводятся к следующим правилам:
- Глобальные переменные имеют регистр Camel. Это переменные, доступные извне из его пакета.
- Пакеты - это имя в верхней части файла, установленное
package <name>.
Все функции и глобальные переменные, указанные в этом файле, находятся в пакете<name>.
- Вы можете загрузить этот пакет в среду GoLang с помощью команды
go get <URL-for-package-file>
(аналогичноpip install <package-name>
). - Вы можете получить доступ к определениям в
<package-name>
, используя операторimport (<URL-for-package-file>)
в вашемpackage main
файле.
В результате вызывается реализация GoLang кластерной процедуры kmeans:
package main import ( "fmt" "github.com/pa-m/sklearn/cluster" "github.com/pa-m/sklearn/datasets" "time" ) func main() { start := time.Now() _ = start kmeansBlobs() fmt.Printf("elapsed %s s\n", time.Since(start)) } func kmeansBlobs(){ X,Y := datasets.MakeBlobs(&datasets.MakeBlobsConfig{ NSamples: 10000, Centers: 10, ClusterStd: 0.5}) kmeans := &cluster.KMeans{NClusters: 10} start := time.Now() _ = start kmeans.Fit(X, nil) kmeans.Predict(X, Y) fmt.Printf("elapsed %s s\n", time.Since(start)) }
Кроме того, вы можете бегло прочитать о пакетах и модулях GoLang, потому что, надеюсь, вы используете GoLand. GoLand устанавливает для вас локальные GOROOT и GOPATH при run ::
Контрольные точки
Мы проводим тесты для реализаций Python и GoLang kmeans. Реализация GoLang приведена выше . Реализация Python - это :
from sklearn.cluster import KMeans def km(): kmeans = KMeans(n_clusters=N_CLUSTERS) kmeans.fit(X) y_kmeans = kmeans.predict(X)
Количество точек (n_p) для кластера варьируется от 100
до 70,000
для реализаций kmeans.
По наблюдениям, мы наблюдаем, что реализация GoLang-kmeans растет как O (n),, в то время как Python-sklearn-kmeans, реализация отображается как O (log (n)).
Python-sklearn-kmeans реализация использует выноски cython (язык C) для обеспечения общей скорости и уникальные настройки алгоритма для достижения O (log (n)).
Я удивлен, увидев, что реализация GoLang-kmeans оказалась быстрее, чем реализация P ython-sklearn-kmeans для N ‹10 000 точек.
Мое любопытство пробуждается; ты или я должны попробовать:
- Объясните, что происходит с реализацией GoLang-kmeans и результатами скорости Python-sklearn-kmeans при малых значениях N точек данных.
- Насколько просто использовать GPU? Есть ли разница в производительности?
- Насколько быстро реализуется Python-kmeans без повышения производительности?
- Ускоряется ли реализация GoLang-kmeans за счет улучшений параллелизма? Это на 1 / O (n-ядер) быстрее?
Заключение
Мне понравилась моя продуктивность с GoLang и GoLand. Я собираюсь перейти с сообщества на профессиональную версию GoLand.
Меня не удивила скорость реализаций GoLang и Python kmeans. Python sklearn сильно оптимизирован с помощью алгоритмов cython и log (N).
Я ожидаю, что другие ведущие пакеты машинного обучения Python мало или совсем не выиграют от перехода на GoLang. XGBoost имеет API Python поверх реализации C ++ и является параллельным. Lightgbm дает те же результаты, что и XGBoost, и обычно быстрее, чем XGBoost.
Я надеюсь получить ускорение, заменив излишний код предварительной обработки и постобработки Python, окружающий ядра машинного обучения, на код GoLang.
Но зачем ускорять Python, когда есть графические процессоры (ускорение), облачные вычисления (масштабируемость) и квантовые вычисления (в ближайшее время значительное ускорение?)?
Вот мои рассуждения. Существуют существующие и будущие устройства, такие как пара миллиардов интеллектуальных телефонов, беспилотные летательные аппараты, электрические розетки (IoT) и другие устройства, которые могут не иметь доступа к Интернету или графических процессоров; также нет доступа в Интернет (облако).
Учитывая это рассуждение и 70-летнюю историю вычислений, существует постоянная потребность в более быстрых программах, и есть разные способы.
Если Python использует C для повышения производительности, возможно, GoLang сможет использовать Python для обеспечения производственного машинного обучения .
Следующие шаги
Я использовал Docker для Python. Это просто супер. GoLang имеет множество версий и множество пакетов. Мне нужен образ Docker для различных сред GoLang.
Есть переводчик для Python 2.x на Голаны g. Было бы так здорово найти переводчик для Python 3.x на Golang.
Я уверен, что есть способ вызвать Golang из Python и Python из Golang. Мне также нужно, чтобы механизмы выноски были безопасными.
Python имеет инструменты разработки и автоматизированное развертывание с непрерывной интеграцией / непрерывным развертыванием (CI / CD). Какие инструменты разработки есть в GoLang? Мы уже сталкивались с GoLand, всеобъемлющей IDE.
Весь используемый код находится по адресу https://github.com/bcottman/GoApplication.
Я надеюсь, что вы найдете эти блоги полезными при написании кода на Python и GoLang. Мне нравится их писать. Мне еще больше понравилось размышлять о возможном будущем Python и GoLang. Пожалуйста, дайте мне знать, что вы думаете по любому из этих вопросов.