Big Data
Большие данные — это данные, слишком объёмные, быстрые или разнообразные для обработки инструментами одной машины. Три V, MapReduce и Spark, а также наборы данных, лежащие в основе современного ИИ.
Большие данные — это данные, объем, скорость поступления или разнообразие форматов которых превышают возможности одного компьютера и обычных инструментов для работы с базами данных по хранению и обработке. Поэтому данные распределяют по кластерам машин, которые обрабатывают их параллельно. В 2001 году аналитик Doug Laney из META Group описал эту задачу через три V: volume — объем данных; velocity — скорость их поступления и необходимой обработки; variety — разнообразие данных, включая структурированные таблицы, журналы, текст, изображения, аудио и видео. В более поздних определениях добавились veracity — достоверность данных — и value — их ценность. Для машинного обучения большие данные служат и исходным материалом, и инженерной задачей: модели улучшаются при увеличении объема обучающих данных, а сбор, очистка и предоставление этих данных требуют значительных усилий при создании моделей.
Большие данные в ИИ и компьютерном зрении#
Глубокое обучение развивалось вместе с наборами данных, которые не помещались на один диск. Представленный в 2009 году ImageNet вырос до более чем 14 миллионов размеченных изображений, а 1,28 миллиона обучающих изображений из соревнования по 1 000 классов использовались для обучения сверточной нейронной сети AlexNet, победившей в соревновании 2012 года. Выпущенный Meta в 2023 году вместе с Segment Anything Model набор данных SA-1B содержит 11 миллионов изображений и 1,1 миллиарда масок сегментации, а Meta предварительно обучила Llama 3 на более чем 15 триллионах текстовых токенов. Законы масштабирования объясняют пользу таких коллекций: функция потерь предсказуемо уменьшается при совместном увеличении объема данных, числа параметров и вычислительных ресурсов.
В компьютерном зрении объем данных растет за счет сетей камер и датчиков. Один автономный автомобиль каждый час движения записывает потоки данных с камер, радара и лидара, а заводы и магазины добавляют тысячи непрерывных видеопотоков. Скорость обработки важна, когда результаты нужны сразу по мере поступления данных, например для инференса в реальном времени на видео дорожного движения или производственных линий. Разнообразие данных включает изображения и видео, а также аннотации, метаданные датчиков и журналы. Дополнительные данные полезны только при точной разметке, поэтому для больших наборов данных изображений необходимы очистка данных, удаление дубликатов и активное обучение, позволяющее выбирать новые изображения, которые стоит разметить.
Как хранят и обрабатывают большие данные#
Системы для работы с большими данными масштабируются горизонтально: данные и вычисления распределяются по множеству недорогих машин вместо одного мощного сервера. В статье Google о MapReduce за 2004 год описана модель, которую популяризировал проект с открытым исходным кодом Apache Hadoop: входные данные делятся на фрагменты, функция map параллельно выполняется для каждого фрагмента на машине, где он хранится, а функция reduce объединяет частичные результаты в один ответ. Apache Spark, созданный в Калифорнийском университете в Беркли в 2009 году, хранит промежуточные результаты в памяти, поэтому итерационные задачи, например обучение моделей, выполняются гораздо быстрее, чем в MapReduce с дисковым хранением. Необработанные файлы обычно хранятся в облачном объектном хранилище, организованном как озеро данных; колоночные форматы, например Apache Parquet, позволяют запросу считывать только нужные столбцы, а потоковые платформы, например Apache Kafka, обрабатывают события с высокой скоростью поступления.
В этом примере шаги map и reduce выполняются для трех фрагментов меток изображений с помощью стандартной библиотеки Python:
from collections import Counter
from multiprocessing import Pool
# Три фрагмента меток изображений; кластер хранит каждый фрагмент на отдельной машине
shards = [
["car", "person", "car", "bus"],
["person", "person", "bicycle"],
["car", "person", "dog", "car"],
]
def count_labels(shard):
"""Map step: count the labels in one shard."""
return Counter(shard)
if __name__ == "__main__":
with Pool(processes=3) as pool:
partial_counts = pool.map(count_labels, shards) # один рабочий процесс на фрагмент
# Шаг reduce: объединить частичные количества в общую сумму
totals = sum(partial_counts, Counter())
print(totals.most_common())Каждый фрагмент подсчитывается в отдельном процессе, а шаг reduce объединяет частичные количества в [('car', 4), ('person', 4), ('bus', 1), ('bicycle', 1), ('dog', 1)]. Spark и Hadoop выполняют те же два шага на тысячах машин, отправляя код map на машины, где хранятся соответствующие фрагменты.
Обучение моделей на больших данных#
Во время обучения большие данные считываются пакетами. Загрузчики данных декодируют по несколько десятков или сотен изображений за раз с локального диска или из объектного хранилища с помощью нескольких рабочих процессов, поэтому весь набор данных не нужно загружать в память; при этом распределенное обучение делит каждый пакет между несколькими GPU. Для детекции объектов набор изображений для детекции Open Images V7 от Google занимает 561 ГБ и содержит 1,74 миллиона обучающих изображений 601 класса — гораздо больше, чем может поместиться в оперативной памяти большинства компьютеров. Если нужно кэшировать набор данных в памяти с помощью cache="ram", обучение Ultralytics YOLO оценивает размер декодированных данных по 30 случайным изображениям и создает кэш, только если удвоенная оценка помещается в доступную оперативную память; более крупные наборы данных считываются и декодируются с диска в каждой эпохе.
Большие данные и смежные термины#
- Интеллектуальный анализ данных: поиск закономерностей, аномалий и связей в данных любого объема, часто выполняемый на платформах для больших данных.
- Аналитика данных: обработка запросов, обобщение и визуализация данных для поддержки принятия решений; аналитика больших данных — ее часть, требующая распределенных вычислительных платформ.
- ИИ с фокусом на данные: улучшение моделей за счет повышения качества и полноты данных, что особенно важно, когда набор данных слишком велик для ручной проверки.










