Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Константин Игнатов (Qrator Labs) - Экосистема Python 3 для тех, кто любит покопаться в данных

Константин Игнатов (Qrator Labs) - Экосистема Python 3 для тех, кто любит покопаться в данных

Доклад с конференции Moscow Python Conf 2016 (http://conf.python.ru)
Видео: https://conf.python.ru/ekosistema-python-3-dlya-teh-kto-lyubit-pokopatsya-v-dannyh/

Я занимаюсь исследованиями в Qrator Labs - компании-распределённой сети фильтрации трафика, через которую проходит огромное количество байт, пакетов и запросов. Всё это мы анализируем в реальном времени, значительную часть храним и изучаем post factum.
Во-первых, я расскажу о роли исследователей в современной IT компании, о том, как исследования становятся частью процесса разработки и как результаты этих исследований превращаются в production-алгоритмы и продукты. В частности, вы узнаете, почему исследователь вообще должен знать разницу между версиями Python, а devops - между разновидностями BLAS.
Во-вторых, поделюсь опытом использования Python3 и его scientific-экосистемы. Расскажу о ключевых проектах этой экосистемы, о планах некоторых мейнтейнеров прекратить поддержку Python2, И представлю наш, полностью собранный из исходников, основанный на Python3.5 образ, содержащий (почти) все популярные научные библиотеки.

Moscow Python Meetup
PRO

October 12, 2016
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Экосистема Python 3
    для тех, кто любит покопаться в данных
    Константин Игнатов
    Qrator Labs
    12.10.2016
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 1 / 36

    View Slide

  2. Разработчики и исследователи
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 2 / 36

    View Slide

  3. План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 3 / 36

    View Slide

  4. Исследователи и разработчики Повторяемость и тестирование
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 4 / 36

    View Slide

  5. Исследователи и разработчики Повторяемость и тестирование
    Cплошное тестирование
    Разработчики пишут автоматизированные тесты
    Небольшие программы
    Позволяют проверить, что всё работает
    Создают граничные условия пытаются спровоцировать ошибку
    Должны работать одинаково
    у создателей и на других компьютерах
    при запуске в разное время
    Найденные таким образом ошибки исправляют в коде
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 5 / 36

    View Slide

  6. Исследователи и разработчики Повторяемость и тестирование
    Исследование это сплошное тестирование
    Чаще всего небольшие программы
    Позволяют проверить гипотезу
    Пытаются опровергнуть гипотезу
    Должны работать одинаково
    у исследователей и у рецензентов
    при запуске в разное время
    Если гипотеза не подтверждается или опровергнута, её
    формулировка уточняется
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 6 / 36

    View Slide

  7. Исследователи и разработчики Повторяемость и тестирование
    Nose
    Самое популярное средство автоматизированного тестирования
    Удобнее, чем стандартный unittest
    Поддержка Python3 есть
    Но сам проект не развивается
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 7 / 36

    View Slide

  8. Исследователи и разработчики Повторяемость и тестирование
    Py.Test
    Python3 с 2009 года (Python 3.1)
    CLI совместим с nosetests
    assertEquals (a,b) → assert a == b
    Более читаемые отчёты об ошибках
    Параметризация тестов без мучений
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 8 / 36

    View Slide

  9. Исследователи и разработчики Распространение и воспроизводимость
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 9 / 36

    View Slide

  10. Исследователи и разработчики Распространение и воспроизводимость
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 10 / 36

    View Slide

  11. Исследователи и разработчики Распространение и воспроизводимость
    Актуальные данные
    и средства работы с ними
    Копия production-данных = постоянное воспроизведение
    результатов исследования
    Получать можно при помощи множества библиотек, поддерживающих
    Python3:
    Mysql, Postgres, Redis, Influxdb, Kafka, Spark...
    HTTP, AMQP, ∅mq...
    JSON, msgpack, CBOR, Protobuf...
    сложнее найти, где поддержки Python3 нет.
    Отдельно стоит отметить библиотеки с поддержкой asyncio.
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 11 / 36

    View Slide

  12. Исследователи и разработчики Распространение и воспроизводимость
    А что если setup.py
    появится в каждом исследовательском проекте?
    Создавать исключительно по шаблону
    Если нужны сложные вещи, то должны помогать разработчики
    Разработчики потом могут форкнуть проект
    Хочешь воспроизвести результаты? Fork
    Указать чьё-то исследование как зависимость своего проекта
    отличный способ цитирования
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 12 / 36

    View Slide

  13. Исследователи и разработчики Распространение и воспроизводимость
    Setuptools, pip, warehouse
    PIPA, естественно, поддерживает Python 3.
    В стандартной библиотеке:
    ensurepip
    pyenv
    Manylinux wheels:
    pip install теперь должен просто работать
    В организации инфрастуктуры исследователям нужна помощь
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 13 / 36

    View Slide

  14. Исследователи и разработчики Документирование
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 14 / 36

    View Slide

  15. Исследователи и разработчики Документирование
    Sphinx
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 15 / 36

    View Slide

  16. Исследователи и разработчики Документирование
    Sphinx Gallery
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 16 / 36

    View Slide

  17. Исследователи и разработчики Границы разумного
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 17 / 36

    View Slide

  18. Исследователи и разработчики Границы разумного
    Исследователи создают новое
    Им очень важно не отставать от жизни
    Интегрировать что-то в старые платформы не их задача
    Быстрее и лучше всего всегда начинать с нуля
    Обратной совместимости требовать от них нельзя
    Наоборот, их наработки формируют будущее
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 18 / 36

    View Slide

  19. Исследователи и разработчики И всем хорошо
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 19 / 36

    View Slide

  20. Исследователи и разработчики И всем хорошо
    Несколько шагов навстречу друг другу и...
    Исследователи получают новые возможности
    Разработчикам проще интегрировать результаты исследований
    Компании быстрее выпускают новые продукты
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 20 / 36

    View Slide

  21. Python3 экосистема готова Readiness
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 21 / 36

    View Slide

  22. Python3 экосистема готова Readiness
    M2Crypto
    python-ldap
    diamond
    INITools
    python-cdb
    s3cmd
    tendenci
    mechanize
    pathtools
    python-gflags
    thrift
    ansible
    aspen
    google-apputils
    python-cjson
    newrelic_plugin_agent
    marionette_client
    python-openid
    graphite-web
    carbon
    supervisor
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 22 / 36

    View Slide

  23. Python3 экосистема готова Readiness
    M2Crypto
    python-ldap
    diamond
    INITools
    python-cdb
    s3cmd
    tendenci
    mechanize
    pathtools
    python-gflags
    thrift
    ansible
    aspen
    google-apputils
    python-cjson
    newrelic_plugin_agent
    marionette_client
    python-openid
    graphite-web
    carbon
    supervisor
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 22 / 36

    View Slide

  24. Python3 экосистема готова Readiness
    PEP 373
    EOL Python 2.7...
    Было 2016!
    Python2.8: PEP 404
    Bugfix до 2020 года
    RHEL или Oracle могут
    взять на себя
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 23 / 36

    View Slide

  25. Python3 экосистема готова Readiness
    PEP 373
    EOL Python 2.7...
    Было 2016!
    Python2.8: PEP 404
    Bugfix до 2020 года
    RHEL или Oracle могут
    взять на себя
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 23 / 36

    View Slide

  26. Python3 экосистема готова Jupyter stack
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 24 / 36

    View Slide

  27. Python3 экосистема готова Jupyter stack
    Jupyter stack
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 25 / 36

    View Slide

  28. Python3 экосистема готова Numpy, SciPy, sci-kits
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 26 / 36

    View Slide

  29. Python3 экосистема готова Numpy, SciPy, sci-kits
    Numpy
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 27 / 36

    View Slide

  30. Python3 экосистема готова Numpy, SciPy, sci-kits
    Scipy
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 28 / 36

    View Slide

  31. Python3 экосистема готова Numpy, SciPy, sci-kits
    Pandas
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 29 / 36

    View Slide

  32. Python3 экосистема готова Numpy, SciPy, sci-kits
    Scikit-learn
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 30 / 36

    View Slide

  33. Python3 экосистема готова Наш эксперимент
    План
    1 Исследователи и разработчики
    Повторяемость и тестирование
    Распространение и воспроизводимость
    Документирование
    Границы разумного
    И всем хорошо
    2 Python3 экосистема готова
    Readiness
    Jupyter stack
    Numpy, SciPy, sci-kits
    Наш эксперимент
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 31 / 36

    View Slide

  34. Python3 экосистема готова Наш эксперимент
    docker run qrator/python35_sci
    Python 3.5.2
    Собрано из исходников (на основе Gentoo Hardened
    # pip freeze | wc -l
    242
    есть несколько сборок под конкретные процессоры:
    qrator / python35_sci : haswell -0
    qrator / python35_sci : broadwell -0
    qrator / python35_sci : westmere -0
    qrator / python35_sci : ivybridge -0
    qrator / python35_sci : core2 -0
    qrator / python35_sci : bdver2 -0
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 32 / 36

    View Slide

  35. Самое важное
    It’s time
    for me to stop, for us to go python3
    Сам Python 2 ещё будет какое-то время жить
    Бэкпорты новых модулей постепенно появляются
    Жить в Python 2 становится всё больнее
    Последней каплей станет появление стабильного JIT Python 3
    Когда это произойдёт, лучше чтобы production-код был
    нативно-Python 3
    Исследовательский код, написанный сегодня на Python 3, в этом
    поможет
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 33 / 36

    View Slide

  36. Спасибо
    Константин Игнатов
    @podshumok
    [email protected]

    View Slide

  37. Запасные слайды А как же...?
    Про скорость...
    Чаще всего имеет значение только асимптотическая сложность
    2to3 может вставить лишний проход по массиву
    Всё тяжёлое стоит сделать на C
    Хотелось бы видеть PyPy или PyStone с поддержкой Python3
    Microsoft Pyjion?
    Проблемы с произвоительностью Python3 будут разрешены, c
    python2 нет
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 35 / 36

    View Slide

  38. Запасные слайды А как же...?
    Почему нет tensorflow?
    Я не смог собрать его совсем из исходников
    Чтобы собрать tensorflow, нужно собрать Bazel
    Bazel это проект от Google, обеспечивающий повторяемость
    сборки
    Bazel написан на Java, а в репозитории лежат бинарные файлы
    сторонних проектов
    (Малую) часть из этих проектов я собрал, но застрял на gRPC-java
    Чтобы собрать gRPC-java нужен gradle
    Чтобы собрать gradle нужен gradle, сборка через ant не
    поддерживается уже лет 8.
    В образе есть pip, так что можно просто установить через него
    @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 36 / 36

    View Slide