Настройки
У LibreYOLO нет файла конфигурации. Поведение, которое не задаётся аргументом функции, управляется переменными окружения и небольшим набором стандартных каталогов — все они перечислены здесь.
Переменные окружения
| Переменная | По умолчанию | Действие |
|---|---|---|
LIBREYOLO_DATASETS_DIR | ~/datasets | Корень датасетов. Читается один раз при импорте, в libreyolo.data.DATASETS_DIR |
LIBREYOLO_FASTER_COCO_EVAL | не задана | Переопределяет флаг валидации faster_coco_eval. 1, true, yes или on принудительно включают более быстрый бэкенд, любое другое значение выключает его, а если переменная не задана, решает флаг конфигурации |
LIBREYOLO_KERNELS | не задана | Выбор ядер. off или reference принудительно включают эталонные реализации; любое другое значение выбирает только реализации, зарегистрированные под этим именем |
LIBREYOLO_QUANT_KERNELS | не задана | Устаревший псевдоним для LIBREYOLO_KERNELS, читается, только если та не задана |
LIBREYOLO_HUB_KERNELS | не задана | 0, false, off или no отключают загрузку ядер с Hugging Face Hub. Любое другое значение, включая отсутствие переменной, оставляет её включённой |
LIBREYOLO_MHR_PATH | ~/.cache/libreyolo/mhr/mhr_model.pt | Расположение MHR-модели тела, которая используется задачей mesh |
LIBRELABEL_ENABLE_LOCATE | не задана | Должна быть ровно 1, true, yes или on, чтобы ассистент LocateAnything появился в инструменте разметки. Любое другое значение оставляет его выключенным |
SAM_3D_BODY_PATH | не задана | Путь к пакету SAM 3D Body для семейства mesh, когда он не передан в конструктор |
HF_TOKEN | не задана | Токен доступа Hugging Face, используется для репозиториев с ограниченным доступом (gated) |
export LIBREYOLO_DATASETS_DIR=/data/datasetspython -c "from libreyolo.data import DATASETS_DIR; print(DATASETS_DIR)"from libreyolo.data import DATASETS_DIR # По умолчанию ~/datasets; LIBREYOLO_DATASETS_DIR переопределяет это при импорте.print(DATASETS_DIR)LIBREYOLO_DATASETS_DIR читается во время импорта, поэтому если задать её после
импорта libreyolo.data, на DATASETS_DIR это уже не повлияет.
Ядра из Hub включаются в два шага. Загрузка во время выполнения происходит
только тогда, когда установлен необязательный пакет kernels, так что установка
libreyolo[hub-kernels] — это согласие, а LIBREYOLO_HUB_KERNELS=0 — отказ.
Установку без этого дополнения не затрагивает ни то, ни другое.
Выбор ядер отсекает и сами импорты: когда LIBREYOLO_KERNELS принудительно
задаёт off или reference, встроенные ускоренные провайдеры не
импортируются вовсе. Реестр, которым управляют эти три переменные, описан на
странице ядра.
Переменные, которые задаёт библиотека
Они записываются, а не читаются, поэтому ручная установка этих переменных не поддерживается.
| Переменная | Кем задаётся |
|---|---|
RANK, LOCAL_RANK, WORLD_SIZE, MASTER_ADDR, MASTER_PORT | Помощник запуска DDP, по одному значению на рабочий процесс |
CUDA_VISIBLE_DEVICES | Временно сужается на время настройки распределённого режима, затем восстанавливается |
PYTORCH_ENABLE_MPS_FALLBACK | Устанавливается в 1 обучающим кодом EC, через setdefault, поэтому уже заданное значение сохраняется |
MOMENTUM_ENABLED | Задаётся через setdefault загрузчиком семейства mesh |
LOCAL_RANK заодно служит признаком распределённого режима: именно по её
наличию в окружении код обучения понимает, что запущен под DDP.
Переменные логгеров
Для имени проекта необязательные логгеры обучения откатываются к значениям из переменных окружения.
| Переменная | По умолчанию | Кто использует |
|---|---|---|
WANDB_PROJECT | libreyolo | Логгер Weights and Biases, когда проект не передан |
COMET_PROJECT_NAME | libreyolo | Логгер Comet, когда проект не передан |
Аутентификация в этих сервисах идёт через их собственные инструменты, а не через LibreYOLO.
Токены
HF_TOKEN — токен доступа Hugging Face. Когда он не задан, токен читается из
~/.cache/huggingface/token — именно туда его записывает вход через Hugging
Face CLI. Работают оба варианта.
Токен нужен только для репозиториев с ограниченным доступом. Готовый пример — SAM 3: его веса скачиваются из такого репозитория под собственной лицензией, поэтому условия нужно принять на странице репозитория, а сессия должна быть аутентифицирована.
Каталоги
| Путь | Содержимое |
|---|---|
weights/ | Скачанные чекпойнты, скачанные снапшоты Hugging Face и экспортированные артефакты |
~/datasets | Корень датасетов, если LIBREYOLO_DATASETS_DIR не говорит иначе |
~/.cache/huggingface/token | Токен Hugging Face, когда его нет в HF_TOKEN |
~/.cache/libreyolo/mhr/mhr_model.pt | MHR-модель тела, если LIBREYOLO_MHR_PATH не говорит иначе |
runs/track/ | Каталог вывода по умолчанию для model.track(save=True) |
weights/ отсчитывается от рабочего каталога. Имя файла без пути разрешается
относительно него, поэтому LibreYOLO("LibreYOLO9t.pt") ищет weights/LibreYOLO9t.pt и
скачивает туда же, если файла нет. model.export() пишет в тот же каталог,
когда output_path не указан. Родственные уровни скачивают многофайловые
снапшоты в weights/<Prefix><size>/.
Поведение при скачивании
Скачивание весов повторяется три раза с нарастающей паузой, возобновляется с частично скачанного файла и защищено файлом блокировки, чтобы два процесса не тянули один и тот же чекпойнт одновременно. Семейство, которое качает со стороннего хоста, может зафиксировать контрольную сумму и при несовпадении прервать работу.
Некоторые загрузки перед стартом выводят уведомление о лицензии. Эти уведомления — часть пути скачивания, и отключить их через конфигурацию нельзя.
Бэкенд валидации
model.val() по умолчанию принимает faster_coco_eval=True и откатывается к
pycocotools, когда пакет не установлен, один раз выдав предупреждение.
Установка LIBREYOLO_FASTER_COCO_EVAL переопределяет флаг конкретного вызова —
именно это стоит использовать бенчмарк-обвязке, которая не может трогать
конфигурацию отдельных запусков. Реально сработавший бэкенд указан в
model.last_eval_backend.
Скрипты скачивания датасетов
YAML-файл датасета может содержать поле download с кодом на Python. Этот код не
выполняется, пока в вызов, который его читает, не передан
allow_download_scripts=True — это аргумент функции у val() и export(), а
не переменная окружения.