Как масштабировать модель
Что проверяют
Прежде всего, уточните ли вы, что именно масштабируется: обучение на растущих данных, размер модели или инференс под растущим потоком запросов. У каждого случая свои инструменты. Следом обычно спрашивают, как вы нашли узкое место: GPU, память или загрузка данных.
Как отвечать
Задайте уточняющий вопрос и разложите ответ по направлениям.
Обучение:
- data parallelism: копия модели на каждом GPU, градиенты синхронизируются. В PyTorch это
DistributedDataParallel, а не устаревшийDataParallel; - шардирование: модель не помещается в память одной карты, тогда
FSDPили DeepSpeed ZeRO раскладывают параметры, градиенты и состояние оптимизатора по устройствам. Для очень крупных моделей добавляют tensor и pipeline parallelism; - экономия памяти: смешанная точность
bf16, gradient accumulation для большого эффективного батча, gradient checkpointing; - данные: узким местом часто оказывается загрузчик, а не GPU. Помогают
num_workersвDataLoader, колоночные форматы вроде Parquet, предобработка в Spark.
Инференс:
- ускорение модели: квантизация в
int8, дистилляция в меньшую модель, экспорт в ONNX Runtime или TensorRT; - динамический батчинг: Triton Inference Server, для LLM vLLM с continuous batching;
- горизонтальное масштабирование: реплики за балансировщиком, автоскейлинг в Kubernetes по задержке или длине очереди, кеш повторяющихся запросов.
Для табличных задач масштабирование обычно сводится к распределённому градиентному бустингу (XGBoost умеет работать поверх Spark и Dask) и пакетному скорингу.
Где спотыкаются
Отвечают списком технологий, не спросив, что растёт: данные, модель или нагрузка. Интервьюер ждёт именно этого уточнения.
Сразу просят больше GPU, не измерив узкое место. Если карта загружена на треть, потому что данные не успевают подъезжать, новые карты ничего не дадут.
Забывают про качество. Квантизация и дистилляция снижают метрики, это проверяют на отложенной выборке и в A/B-тесте. А при data parallelism растёт эффективный батч, и learning rate приходится подбирать заново.