Scalability
Масштабируемость — это способность системы обрабатывать больше данных, пользователей или вычислений за счёт добавления ресурсов. Рассматриваются вертикальное и горизонтальное масштабирование, закон Амдала и ИИ на нескольких GPU.
Масштабируемость — это способность системы справляться с растущим объёмом работы — например, с увеличением количества данных, пользователей, запросов или размера модели — за счёт добавления ресурсов, сохраняя приемлемые производительность и стоимость единицы работы. Система хорошо масштабируется, если удвоение аппаратных ресурсов почти удваивает объём выполняемой работы, и плохо — если добавленные машины простаивают в ожидании друг друга. В искусственном интеллекте масштабируемость важна на трёх этапах: конвейеры данных должны принимать и предварительно обрабатывать большие данные, обучение должно распределяться между многими ускорителями, а службы инференса — обрабатывать больше запросов без увеличения задержки инференса.
Вертикальное и горизонтальное масштабирование#
Вертикальное масштабирование, или масштабирование вверх, переносит рабочую нагрузку на более мощную машину: с большим количеством ядер CPU, большим объёмом ОЗУ или GPU с большей памятью. Изменения кода не нужны, но масштабирование ограничено самой мощной доступной машиной, а также остаётся единственная точка отказа. Горизонтальное масштабирование, или масштабирование вширь, добавляет машины и распределяет работу между ними; фиксированного предела нет, но программа должна уметь делить работу, балансировать нагрузку и согласовывать результаты. Веб-службы и службы инференса легко масштабировать вширь, если они не хранят состояние: сеансы и данные размещают в общих хранилищах, чтобы любая реплика могла обработать любой запрос. Базы данных масштабируют вширь с помощью шардинга — распределения данных по ключам между машинами.
Облачные платформы автоматизируют горизонтальное масштабирование. В Kubernetes горизонтальный автомасштабировщик подов рассчитывает количество реплик так: текущее число реплик умножает на отношение наблюдаемого значения метрики к целевому и округляет результат вверх. Например, если четыре реплики используют в среднем 90% CPU при целевом значении 60%, их число увеличится до шести. В облачных вычислениях такую автоматизацию называют эластичностью, а бессерверные вычисления позволяют масштабировать количество реплик вплоть до нуля при отсутствии трафика.
Ограничения масштабирования#
В каждой параллельной задаче есть работа, которую нельзя разделить: например, чтение следующего батча, синхронизация результатов или запись контрольной точки. В 1967 году Джин Амдал показал, что эта последовательная часть ограничивает ускорение независимо от количества добавленных процессоров. Этот результат теперь называют законом Амдала:
# Amdahl's law: speedup on n workers when a fraction p of the work runs in parallel
p = 0.95 # parallel fraction; the other 5% runs on one worker
for n in (1, 8, 64, 512):
speedup = 1 / ((1 - p) + p / n)
efficiency = speedup / n # share of the added hardware doing useful work
print(f"{n:>4} workers: {speedup:5.1f}x speedup, {efficiency:4.0%} efficiency")
print(f"Limit with unlimited workers: {1 / (1 - p):.0f}x")Если 95% работы выполняется параллельно, восемь рабочих потоков обеспечивают ускорение в 5,9 раза при эффективности 74%, 64 потока — в 15,4 раза при эффективности 24%, 512 потоков — в 19,3 раза при эффективности 4%, и никакое количество потоков не позволит превысить ускорение в 20 раз. В 1988 году Джон Густафсон отметил, что на практике пользователи увеличивают размер задачи вместе с мощностью машины, поэтому параллельная часть растёт, а доля последовательной уменьшается. Измерение ускорения на задаче фиксированного размера называют сильным масштабированием, а увеличение задачи вместе с аппаратными ресурсами — слабым масштабированием; именно в таком режиме выполняются крупные запуски обучения. Дополнительное ограничение создаёт обмен данными: на каждом шаге обучения с параллелизмом по данным каждая добавленная GPU должна передавать градиенты остальным, поэтому предельный масштаб задачи часто зависит от пропускной способности сети.
Масштабирование обучения и инференса#
Распределённое обучение выбирает стратегию параллелизма в зависимости от того, помещается ли модель на одном устройстве. При параллелизме по данным каждая GPU хранит полную копию модели, обрабатывает свою часть каждого батча и усредняет градиенты с другими GPU через операцию all-reduce, как в DistributedDataParallel PyTorch. Модели, которые не помещаются на одну GPU, разделяют с помощью полностью шардированного параллелизма по данным, тензорного параллелизма или конвейерного параллелизма, а накопление градиентов позволяет достичь большого эффективного размера батча на меньшем количестве устройств.
Ultralytics YOLO использует параллелизм по данным для обучения на нескольких GPU: передача device=[0, 1] запускает рабочие процессы DistributedDataParallel через torch.distributed.run и равномерно распределяет батч, поэтому batch=64 на двух GPU даёт каждому GPU по 32 изображения на шаг.
Инференс масштабируется иначе, поскольку каждый запрос невелик и не зависит от других. Группировка запросов в батчи повышает загрузку GPU и пропускную способность за счёт небольшого увеличения задержки; непрерывное пакетирование даёт тот же эффект при генерации токен за токеном с помощью LLM, а системы обслуживания моделей добавляют реплики за балансировщиком нагрузки по мере роста трафика. Квантование моделей и прунинг удешевляют каждую реплику, позволяя той же аппаратуре обрабатывать больше запросов, а периферийный ИИ масштабируется за счёт распределения инференса между тысячами устройств вместо одного центра обработки данных.
Масштабируемость и связанные термины#
- Производительность: скорость и точность работы системы при заданной нагрузке, измеряемые задержкой, пропускной способностью или точностью. Масштабируемость показывает, как эти показатели меняются при увеличении нагрузки и ресурсов.
- Эластичность: автоматическое добавление и удаление ресурсов при изменении спроса в течение дня, чаще всего — добавление и удаление реплик горизонтально масштабируемой службы.
- Законы масштабирования: эмпирические зависимости между потерями модели, её параметрами, обучающими данными и вычислительными ресурсами. Они предсказывают качество модели, а масштабируемость системы определяет, насколько эффективно можно использовать необходимые для этого вычислительные ресурсы.










