Фаза 00 · урок 09

Управление данными

Цель урока: Каждый AI-проект начинается с данных. Нужно находить наборы данных, скачивать их, преобразовывать между форматами, разделять для обучения и оценки, а также версионировать, чтобы эксперименты оставались воспроизводимыми. Делать всё это…

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Настройка и инструменты
Чтение
8 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Проблема
  3. Концепция
  4. Собираем сами
  5. Шаг 1. Установите библиотеку datasets
  6. Шаг 2. Загрузите набор данных
  7. Шаг 3. Читайте большие наборы данных потоком
  8. Шаг 4. Форматы наборов данных
  9. Шаг 5. Разбиение данных
  10. Шаг 6. Скачивайте и кэшируйте модели
  11. Шаг 7. Работайте с большими файлами
  12. Шаг 8. Схемы хранения
  13. Наборы данных курса
  14. Используем готовое
  15. Готовый результат
  16. Упражнения
  17. Ключевые термины

Данные — это топливо. От способа управления ими зависит скорость вашего движения.

Тип: Практика Язык: Python Предварительные требования: Фаза 0, урок 01 Время: около 45 минут

Цели обучения

  • Загружать, потоково читать и кэшировать наборы данных с помощью библиотеки Hugging Face datasets.
  • Преобразовывать CSV, JSON, Parquet и Arrow друг в друга и объяснять их компромиссы.
  • Создавать воспроизводимые обучающие, валидационные и тестовые выборки с фиксированными случайными начальными значениями.
  • Управлять большими файлами моделей и наборов данных с помощью .gitignore, Git LFS или DVC.

Проблема

Каждый AI-проект начинается с данных. Нужно находить наборы данных, скачивать их, преобразовывать между форматами, разделять для обучения и оценки, а также версионировать, чтобы эксперименты оставались воспроизводимыми. Делать всё это вручную каждый раз медленно и рискованно. Нужен повторяемый рабочий процесс.

Концепция

Диаграмма к уроку «Управление данными»

Библиотека Hugging Face datasets — стандартный способ загрузки данных для AI-задач. Она из коробки управляет скачиванием, кэшированием, преобразованием форматов и потоковым чтением.

Собираем сами

Шаг 1. Установите библиотеку datasets

pip install datasets huggingface_hub

Шаг 2. Загрузите набор данных

from datasets import load_dataset

dataset = load_dataset("imdb")
print(dataset)
print(dataset["train"][0])

Команда загружает набор отзывов о фильмах IMDB. После первой загрузки он читается из кэша ~/.cache/huggingface/datasets/.

Шаг 3. Читайте большие наборы данных потоком

Некоторые наборы данных слишком велики, чтобы поместиться на диске. Потоковый режим загружает их построчно, не скачивая целиком.

dataset = load_dataset("wikimedia/wikipedia", "20220301.en", split="train", streaming=True)

for i, example in enumerate(dataset):
    print(example["title"])
    if i >= 4:
        break

Потоковый режим возвращает IterableDataset. Вы обрабатываете строки по мере поступления, а потребление памяти остаётся постоянным независимо от размера набора.

Шаг 4. Форматы наборов данных

Внутри библиотека datasets использует Apache Arrow. В зависимости от требований конвейера данные можно преобразовать в другие форматы.

dataset = load_dataset("imdb", split="train")

dataset.to_csv("imdb_train.csv")
dataset.to_json("imdb_train.json")
dataset.to_parquet("imdb_train.parquet")

Сравнение форматов:

Формат Размер Скорость чтения Лучше всего подходит для
CSV Большой Низкая Чтения человеком и электронных таблиц
JSON Большой Низкая API и вложенных данных
Parquet Маленький Высокая Аналитики и столбцовых запросов
Arrow Маленький Самая высокая Обработки в памяти; именно его datasets использует внутри

Для AI-задач Parquet — лучший формат хранения. С Arrow вы работаете в памяти. CSV и JSON используются для обмена.

Шаг 5. Разбиение данных

Каждому проекту машинного обучения нужны три выборки:

  • Обучающая (train): модель учится на ней, обычно это 80% данных.
  • Валидационная (validation): на ней проверяют прогресс во время обучения, обычно 10%.
  • Тестовая (test): используется для окончательной оценки после завершения обучения, обычно 10%.

Некоторые наборы уже разделены. В остальных случаях сделайте это самостоятельно:

dataset = load_dataset("imdb", split="train")

split = dataset.train_test_split(test_size=0.2, seed=42)
train_val = split["train"].train_test_split(test_size=0.125, seed=42)

train_ds = train_val["train"]
val_ds = train_val["test"]
test_ds = split["test"]

print(f"Train: {len(train_ds)}, Val: {len(val_ds)}, Test: {len(test_ds)}")

Для воспроизводимости всегда задавайте начальное значение seed. Один и тот же seed каждый раз создаёт одинаковое разбиение.

Шаг 6. Скачивайте и кэшируйте модели

Модели состоят из больших файлов. Библиотека huggingface_hub управляет их скачиванием и кэшированием.

from huggingface_hub import hf_hub_download, snapshot_download

model_path = hf_hub_download(
    repo_id="sentence-transformers/all-MiniLM-L6-v2",
    filename="config.json"
)
print(f"Cached at: {model_path}")

model_dir = snapshot_download("sentence-transformers/all-MiniLM-L6-v2")
print(f"Full model at: {model_dir}")

Модели кэшируются в ~/.cache/huggingface/hub/. После первой загрузки последующие запуски читают их немедленно.

Шаг 7. Работайте с большими файлами

Веса моделей и большие наборы данных не следует добавлять непосредственно в Git. Есть три варианта.

Вариант A: .gitignore — самый простой

*.bin
*.safetensors
*.pt
*.onnx
data/*.parquet
data/*.csv
models/

Вариант B: Git LFS — отслеживание больших файлов через Git

git lfs install
git lfs track "*.bin"
git lfs track "*.safetensors"
git add .gitattributes

Git LFS хранит в репозитории указатели, а сами файлы — на отдельном сервере. GitHub предоставляет 1 ГБ бесплатно.

Вариант C: DVC — контроль версий данных

pip install dvc
dvc init
dvc add data/training_set.parquet
git add data/training_set.parquet.dvc data/.gitignore
git commit -m "Track training data with DVC"

DVC создаёт небольшие файлы .dvc, указывающие на данные. Сами данные находятся в S3, GCS или другом удалённом хранилище.

Подход Сложность Лучше всего подходит для
.gitignore Низкая Личных проектов и скачиваемых данных, которые можно получить повторно
Git LFS Средняя Команд, передающих веса моделей через Git
DVC Высокая Воспроизводимых экспериментов, больших наборов данных и командной работы

Для этого курса достаточно .gitignore. Используйте DVC, когда нужно точно воспроизводить эксперименты на разных машинах.

[!note] Примечание переводчика Объёмы бесплатного хранения Git LFS, размеры наборов данных и доступность репозиториев отражают исходную ревизию от 25 июня 2026 года. Перед использованием сверяйте действующие лимиты и карточки наборов данных.

Шаг 8. Схемы хранения

Локальное хранилище подходит для наборов объёмом до примерно 10 ГБ. Кэш Hugging Face управляет этим автоматически.

Облачное хранилище нужно для более крупных данных или совместного использования между машинами:

import os

local_path = os.path.expanduser("~/.cache/huggingface/datasets/")

# s3_path = "s3://my-bucket/datasets/"
# gcs_path = "gs://my-bucket/datasets/"

DVC напрямую интегрируется с S3 и GCS:

dvc remote add -d myremote s3://my-bucket/dvc-store
dvc push

Для этого курса достаточно локального хранилища. Облако становится актуальным при тонкой настройке на удалённых GPU-машинах.

Наборы данных курса

Набор данных Уроки Размер Чему учит
IMDB Токенизация, классификация 84 МБ Основам классификации текста
WikiText Языковое моделирование 181 МБ Предсказанию следующего токена
SQuAD Системы ответов на вопросы 35 МБ Ответам на вопросы и выделению диапазонов
Common Crawl, подмножество Эмбеддинги Разный Крупномасштабной обработке текста
MNIST Основы компьютерного зрения 21 МБ Основам классификации изображений
COCO, подмножество Мультимодальность Разный Работе с парами «изображение — текст»

Скачивать всё сейчас не нужно. Каждый урок указывает, какой набор ему требуется.

Используем готовое

Запустите вспомогательный скрипт и убедитесь, что всё работает:

python code/data_utils.py

Он скачивает небольшой набор данных, преобразует и разделяет его, а затем печатает сводку.

Готовый результат

Этот урок создаёт:

  • code/data_utils.py — повторно используемую утилиту загрузки и кэширования данных;
  • outputs/prompt-data-helper.md — промпт для выбора подходящего набора данных под задачу.

Упражнения

  1. Загрузите набор glue с конфигурацией mrpc и изучите первые пять примеров.
  2. Потоково прочитайте набор c4 и посчитайте, сколько примеров удаётся обработать за 10 секунд.
  3. Преобразуйте набор в Parquet и сравните размер файла с CSV.
  4. Создайте разбиение train/val/test в пропорции 70/15/15 с фиксированным seed и проверьте размеры.

Ключевые термины

Термин Как обычно говорят Что это означает на самом деле
Разбиение набора данных (dataset split) «Обучающие данные» Именованное подмножество train, val или test, применяемое на разных этапах жизненного цикла ML
Потоковое чтение (streaming) «Ленивая загрузка» Построчная обработка данных из удалённого источника без скачивания всего набора
Parquet «Сжатый CSV» Столбцовый файловый формат, оптимизированный для аналитических запросов и эффективного хранения
Arrow «Быстрый DataFrame» Столбцовый формат в памяти, который библиотека datasets использует для чтения без копирования
Git LFS «Git для больших файлов» Расширение, хранящее большие файлы вне репозитория Git, а указатели на них — под контролем версий
DVC «Git для данных» Система контроля версий наборов данных и моделей, интегрируемая с облачным хранилищем
Кэш (cache) «Уже скачано» Локальная копия ранее полученных данных, по умолчанию находящаяся в ~/.cache/huggingface/

Источник: Data Management — оригинал Навигация: назад: 00.08 — Настройка редактора · Фаза 0 — Настройка и инструменты · Полный каталог · далее: 00.10 — Терминал и командная оболочка.