Data Conf

От Pydantic v1 к v3: глубокий разбор Pydantic Core на Rust и алгоритмов валидаторов

Доклад

Python
Оптимизация производительности
Оптимизация
Обработка данных

Доклад принят в программу конференции

Целевая аудитория

- Backend Developers - Web Developers - Data Engineers - Data Analysts - CTO

Тезисы

- Pydantic v2 перенёс всю логику валидации в Rust-библиотеку pydantic-core через PyO3, что дало до 17× ускорения валидации моделей по сравнению с v1 .
- В PydanticCore используется SIMD-оптимизация целочисленного и строкового JSON-парсинга на AArch64 и fast-path для ASCII-строк (~15% прирост), а также перенос валидации enum-типов в Rust (~4× ускорение) .
- Кэширование и переиспользование CoreSchema для обобщённых типов снижает время старта FastAPI-приложений на 67% в сценариях интенсивного использования generics .
- Повторное использование экземпляров SchemaValidator и SchemaSerializer, а также ленивое вычисление аннотаций FieldInfo сокращает затраты памяти на 2–5× при большом числе вложенных моделей .
- В Pydantic v3 планируется убрать обвязку миграции из v1, добавить более богатый контекст ошибок (номер строки и столбца при JSON-валидации) и оптимизировать @validate_call, сохранив скорость v2

Backend-инженер и архитектор решений в Effective: занимается оценкой и проектированием архитектуры для проектов Яндекса, YanGo, Mokka и др. Помимо этого, занимается разработкой и поддержкой решений на Python и node.js для зарубежных стартапов. Обожает разработку и технологии во всех их проявлениях!

Видео

Подготовительное задание
1. Какие ключевые оптимизации PydanticCore обеспечили прирост производительности?
Переезд logic-валидации в Rust через PyO3, использование SIMD-парсинга JSON (числа и строки), fast-path для ASCII-строк, перенос enum-валидации в pydantic-core, кэширование CoreSchema и переиспользование Validator/Serializer объектов .
2. Как устроена внутренняя архитектура CoreSchema и SchemaValidator?
Каждая модель преобразуется в CoreSchema — дерево узлов (typed-dict, list, union, annotated и пр.), по которому SchemaValidator выполняет обход и применяет низкоуровневые валидаторы в Rust с минимальным переходом в Python благодаря PyO3 .
3. Какие алгоритмы лежат в основе валидаторов?
Tree-of-small-validators (рекурсивное объединение простых проверок), discriminated union для быстpого выбора варианта, hash-lookup для enum, оптимизированные JSON-парсеры jiter/serde_json с fast-path и SIMD .
4. Какие количественные результаты подтверждают эффективность?
– До 17× ускорение валидации vs Pydantic v1;
– 67% ускорение старта FastAPI при heavy generics;
– ~4× быстрее enum-валидация;
– ~15% прирост скорости JSON-парсинга;
– Снижение памяти в 2–5× при построении схем .
5. Какие изменения API и планы на Pydantic v3?
Удаление shim-кода из v1, фиксы edge-case в модели по MRO, постоянный default by_alias=True, добавление line_number/column_number в ValidationError, улучшенная поддержка @validate_call, без серьёзных API-ломов