06 - Структура проекта
OneTrainer в основном построен на базе библиотеки Hugging Face diffusers library.
Модули
Структура разделена на модули, каждый из которых несет отдельную ответственность. Различные модули одного типа обычно могут быть взаимозаменяемы. У каждого типа модуля есть своя собственная подпапка в папке modules.
Это поддерживаемые в настоящее время типы модулей:
- dataLoader: Загрузчик данных отвечает за загрузку образцов во время обучения. OneTrainer использует MGDS в качестве библиотеки для реализации этих загрузчиков данных, которая представляет собой пользовательскую реализацию загрузчика данных на основе графов.
- model: Модель содержит веса, оптимизаторы и связанные с ними данные, которые необходимы во время обучения.
- modelLoader: Загрузчик моделей загружает модель для обучения во внутреннее представление. Загрузчики моделей поддерживают различные форматы моделей, такие как контрольные точки и датчики безопасности.
- modelSampler: Выборочный модуль модели может выполнять выборку модели либо во время обучения для предварительного просмотра, либо вызываться отдельно для тестирования вашей обученной модели.
- modelSaver: Средство сохранения модели работает в обратном направлении, чем средство загрузки модели. Оно сохраняет модель из внутреннего представления в удобный формат файла.
- modelSetup: Настройка модели предоставляет различные функции для настройки процесса обучения без проведения самого обучения. Эти функции включают в себя создание оптимизатора, перенос модели на соответствующее устройство, выполнение прогнозов на модели.
- trainer: Тренер сводит все воедино. Он запускает загрузчик модели и настройку модели, а затем выполняет цикл обучения. Во время обучения можно выполнять множество различных действий, таких как регулярная выборка образцов или резервное копирование.
- ui: Модуль пользовательского интерфейса содержит весь код пользовательского интерфейса.
- util: Набор служебных функций, необходимых в различных частях кодовой базы.
Скрипты
Конечно, эти модули не предоставляют никакой функциональности, ориентированной на пользователя. Думайте о них как о наборе инструментов, которые могут использоваться скриптами для обеспечения реальной функциональности пользователя. Каждый скрипт имеет ровно одну цель и может быть запущен непосредственно из командной строки. Внутри скриптов не реализовано никакой дополнительной функциональности. В плане функциональности они должны полагаться только на модули.