Обновление Python в 30+ ML-сервисах: uv, Ruff и ty

Almaty Python Meetup #8

Денис Крумко
Денис Крумко
Kolesa Group

Python 3.10 уже выглядит как прошлый век — но обновить один проект и одновременно перевести десятки ML-сервисов с PyTorch и CUDA на свежую версию языка совсем не одно и то же.

Денис Крумко — MLOps-инженер Kolesa Group с более чем 10-летним опытом разработки на Python. Его команда строит пайплайны подготовки данных, обучения и деплоя ML-сервисов, которыми ежедневно пользуются миллионы пользователей Казахстана и Узбекистана.

В докладе: — насколько Python становится быстрее с каждым новым релизом и за счёт чего — какие проблемы возникают при обновлении 30+ ML-сервисов с PyTorch и CUDA — где искать подводные камни, даже когда после обновления всё выглядит стабильным — насколько хорош новый Python-туллинг на Rust: uv, Ruff и ty

Видео

Презентация

Слайд 1: «Это твой знак, 1 / 51
Текст презентации

Слайд 1: «Это твой знак,

«Это твой знак, что пора обновить Python» Денис Крумко Senior MLOps Engineer Наша история обновления сервисов и инструментов

Слайд 2: «Это твой знак, что пора обновить Python»: наша история обновления

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов ● Компьютерная Безопасность Сибирский Федеральный Университет ● Python Backend Dev ● MLOps Engineer @ Kolesa Group since 2023 Денис Крумко

Слайд 3: ● как менялся Python с годами

● как менялся Python с годами О чём сегодня поговорим «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 4: ● как менялся Python с годами

● как менялся Python с годами ● как мы обновляли наши сервисы О чём сегодня поговорим «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 5: ● как менялся Python с годами

● как менялся Python с годами ● как мы обновляли наши сервисы ● что такое современный Python tooling О чём сегодня поговорим «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 6: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов ML инженера

Слайд 7: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов «End-of-life»

Слайд 8: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов «End-of-life» ● нет обновлений

Слайд 9: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов «End-of-life» ● нет обновлений ● нет поддержки от third-party библиотек

Слайд 10: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов «End-of-life» ● нет обновлений ● нет поддержки от third-party библиотек ● нет security patches

Слайд 11: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов source: bbc.com

Слайд 12: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов State Of Python 2025 48% of people are currently using Python 3.11. Upgrading to 3.13 will make their code run ~11% faster end to end while using ~10-15% less memory. If they are one of the 27% still on 3.10 or older, their code gets a whopping ~42% speed increase (with no code changes), and memory use can drop by ~20-30%! © Michael Kennedy, founder of Talk Python and a PSF Fellow

Слайд 13: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 14: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 15: Какой был стек

Какой был стек ● Python 3.8.12 ● PyTorch 1.13.1 ● CUDA 11.6.2 ● MLflow 1.29.0 «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 16: Service issues

Service issues ● потребление RAM ● обновление зависимостей ● время ответа сервисов Tooling issues «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 17: Service issues

Service issues ● потребление RAM ● обновление зависимостей ● время ответа сервисов ● разный env у всех ● фиксирование зависимостей ● долгие проверки в CI/CD Tooling issues «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 18: Обновление зоопарка

Обновление зоопарка ● изучать breaking changes «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 19: Обновление зоопарка

Обновление зоопарка ● изучать breaking changes ● YOLO и обновить до latest «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 20: Обновление зоопарка

Обновление зоопарка ● изучать breaking changes ● YOLO и обновить до latest ● и то, и другое 🤙 «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 21: Python 3.13 + MLflow 2.21

Python 3.13 + MLflow 2.21 ● Python дает прирост скорости ~40%* * цифры из статьи “State Of Python” и документации MLflow «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 22: Python 3.13 + MLflow 2.21

Python 3.13 + MLflow 2.21 ● Python дает прирост скорости ~40%* ● FastAPI вместо Flask (x5 faster)* * цифры из статьи “State Of Python” и документации MLflow «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 23: Python 3.13 + MLflow 2.21

Python 3.13 + MLflow 2.21 ● Python дает прирост скорости ~40%* ● FastAPI вместо Flask (x5 faster)* ● обновили Pytorch (2.12) и CUDA (12.8) * цифры из статьи “State Of Python” и документации MLflow «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 24: Новые проблемы

Новые проблемы 1. Медленные сборки 2. Потребление VRAM 3. HTTP 503 под нагрузкой «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 25: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

1. Медленные сборки «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 26: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 27: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 28: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 29: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

2. Потребление VRAM «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 30: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

2. Потребление VRAM «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 31: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 32: не грузите меня

3. HTTP 503 Service Unavailable не грузите меня «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 33: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов MLflow 1.29 MLflow 2.21

Слайд 34: Результаты

Результаты «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 35: Чек-лист обновления

Чек-лист обновления ❏ время сборки и размер образа ❏ время ответа сервиса ❏ нагрузочное тестирование ❏ потребление CPU/RAM/VRAM ❏ качество ответов «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 36: Service issues

Service issues ● потребление RAM ● обновление зависимостей ● время ответа сервисов ● разный env у всех ● фиксирование зависимостей ● долгие проверки в CI/CD Tooling issues ??? «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 37: Astral – Next-gen

Astral – Next-gen Python tooling ● ruff – линтер и форматтер ● uv – package/env manager ● ty – type checker «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 38: Действительно ли круто?

Действительно ли круто? PYLINT «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 39: «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

«Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 40: В чем магия?

В чем магия? ● готовые binary файлы c Python «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 41: В чем магия?

В чем магия? ● готовые binary файлы c Python ● быстрый resolve зависимостей «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 42: В чем магия?

В чем магия? ● готовые binary файлы c Python ● быстрый resolve зависимостей ● “uv uses aggressive caching” «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 43: uv не ускоряет ваш код,

uv не ускоряет ваш код, он ускоряет ваш flow. «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 44: Tooling issues – solved

Tooling issues – solved ● одинаковый env у всей команды (uv run) «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 45: Tooling issues – solved

Tooling issues – solved ● одинаковый env у всей команды (uv run) ● фиксирование версий (uv.lock) «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 46: Tooling issues – solved

Tooling issues – solved ● одинаковый env у всей команды (uv run) ● фиксирование версий (uv.lock) ● ускорение CI/CD (uv.lock, ruff, ty) «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 47: Подводим итоги

Подводим итоги ● это тот самый знак, что пора обновить Python! «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 48: Подводим итоги

Подводим итоги ● это тот самый знак, что пора обновить Python! ● сделайте чек-лист обновления «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 49: Подводим итоги

Подводим итоги ● это тот самый знак, что пора обновить Python! ● сделайте чек-лист обновления ● uv 🔥 / ruff 💪 / ty 😐 «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 50: В понедельник…

В понедельник… ❯ переведи проект на юви и раф ❯ и питон еще обнови да идеально «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов

Слайд 51: Спасибо

Спасибо за внимание! @deniskrumko deniskrumko.github.io «Это твой знак, что пора обновить Python»: наша история обновления сервисов и инструментов