Архитектура из трех сервисов
Perplexity отказалась от создания отдельного движка для эмбеддингов, объединив его с инфраструктурой LLM. Система состоит из трех компонентов:
- Ivy (Rust): HTTP-шлюз, отвечающий за парсинг JSON, токенизацию и балансировку нагрузки. Он разбивает большие батчи на чанки для коррекции дисбаланса.
- Tulip (Rust, tokio, tonic): gRPC-сервер для планирования и батчинга запросов перед отправкой в движок.
- ROSE (Runtime-Optimized Serving Engine): основной движок инференса на Python. Управляет CUDA-графиками, слоями и моделями, предоставляя функцию
step().
Ключевые технические решения
Главная инновация — переиспользование ядер prefill и decode из стека LLM. Поскольку эмбеддинг-модели — это маленькие трансформеры, batch-инференс похож на prefill (вычислительно-зависимый), а online-инференс — на decode (зависимый от памяти).
Для минимизации задержек Perplexity применяет:
- Whole-model CUDA graphs: захват всего графа модели в один вызов драйвера. Для ускорения захвата внедрены изменения в FlashInfer.
- Lazy capture: «ленивый» захват графиков. Первый запуск — разминка, второй — захват и воспроизведение. Это распределяет минуты работы захвата на часы использования.
- LazyTensor: асинхронная обертка, позволяющая CPU готовить батч N+1, пока GPU обрабатывает батч N, без блокировок.
Бенчмарки и производительность
Тестирование проводилось против vLLM v0.22.0 в BF16. Ключевые метрики:
- Погрешность косинусного сходства при warmup — менее 0.1%.
- Насыщение GPU для моделей суб-миллиардной архитектуры происходит при ~512 токенах в батче. Дальнейшая упаковка последовательностей неэффективна.
- Задержка линейно зависит от количества токенов, а не от количества последовательностей.
| Компонент/Техника | Роль в стеке | Ключевая выгода |
|---|---|---|
| Ivy | HTTP Gateway (Rust) | Парсинг, токенизация, балансировка батчей |
| Tulip | Inference Server (Rust) | Планирование, FCFS-очередь, gRPC-интерфейс |
| ROSE | Serving Engine (Python) | Инференс, CUDA-графики, выбор бэкенда (FlashInfer/FlashAttention) |
| LazyTensor | Асинхронный буфер | Overlap CPU/GPU, отсутствие блокировок sync |
Почему это важно
Решение Perplexity демонстрирует тренд на унификацию инфраструктуры: вместо разрозненных сервисов для LLM и эмбеддингов создается единый высокопроизводительный стек. Доступ к модели pplx-embed осуществляется через Embeddings API, что позволяет разработчикам использовать оптимизированный инференс Perplexity для своих RAG-приложений.
Источник: MarkTechPost ↗
