Иногда да, иногда нет.

Я и провожу бенчмаркинг. Наш путь начинается с установки 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, доступных бесплатно в Интернете:

  1. Путешествие по го;
  2. Learn Go: 30 лучших руководств по Go для программистов всех уровней;
  3. Учебная серия по Голангу;
  4. Учебники и курсы Go;
  5. Идти примером;
  6. Суслики;
  7. Занятия спортом;
  8. Полное руководство по обучению го;
  9. Essential Go - бесплатная книга о языке программирования Go;
  10. Как написать код Go.
  11. Перейти к шаблонам параллелизма
  12. Учись с тестами.

Список пакетов GOLang (импорт!) Можно найти здесь:



Кроме того, здесь вы можете найти пакеты GOLang:



Эти пакеты являются частью проекта Go, но не входят в основное дерево Go. Они разработаны с более слабыми требованиями совместимости, чем ядро ​​Go. Установите их с помощью иди иди.

И пакеты, которые я считаю полезными для машинного обучения:

  1. Https://github.com/pa-m/sklearn
  2. Https://github.com/pa-m/randomkit
  3. Https://github.com/pa-m/optimize

Книги (не бесплатно)

  1. Язык программирования Go (Серия профессиональных вычислений Аддисон-Уэсли)
  2. Освоение Go: создание производственных приложений Golang с использованием сетевых библиотек, параллелизма, машинного обучения и расширенных структур данных, 2-е издание
  3. Практикуйся: включает 70 техник

Представление

Две основные причины выбора GoLang:

  1. простой в освоении синтаксис
  2. быстрее, чем 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 развился так, что пакеты сводятся к следующим правилам:

  1. Глобальные переменные имеют регистр Camel. Это переменные, доступные извне из его пакета.
  2. Пакеты - это имя в верхней части файла, установленное package <name>. Все функции и глобальные переменные, указанные в этом файле, находятся в пакете <name>.
  3. Вы можете загрузить этот пакет в среду GoLang с помощью команды go get <URL-for-package-file> (аналогично pip install <package-name>).
  4. Вы можете получить доступ к определениям в <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 точек.

Мое любопытство пробуждается; ты или я должны попробовать:

  1. Объясните, что происходит с реализацией GoLang-kmeans и результатами скорости Python-sklearn-kmeans при малых значениях N точек данных.
  2. Насколько просто использовать GPU? Есть ли разница в производительности?
  3. Насколько быстро реализуется Python-kmeans без повышения производительности?
  4. Ускоряется ли реализация 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. Пожалуйста, дайте мне знать, что вы думаете по любому из этих вопросов.