Управление большими файлами с помощью LFS
В этой статье будет рассмотрено, как использовать LFS для управления большими файлами, включая настройку инстанса GitLab и конфигурацию Git клиента.
Применимые сценарии:
- Использование LFS для управления исполняемыми файлами в репозиториях кода, такими как скомпилированные JAR-пакеты
- Использование LFS для управления большими моделями AI в репозиториях кода
Содержание
Конфигурация инстанса GitLabПредварительные требованияИспользование локального хранилища для файлов LFSИспользование объектного хранилища для файлов LFS (рекомендуется)Конфигурация ресурсов и параметровКонфигурация Git клиентаПредварительные требованияНастройка параметров Git клиентаКонфигурация Git проектаРаспространённые проблемыОшибка клонирования очень больших репозиториевКонфигурация инстанса GitLab
Предварительные требования
- Инстанс GitLab развернут согласно документации GitLab Instance Deployment.
GitLab поддерживает два способа настройки LFS, основное различие которых — место хранения файлов LFS.
- Использование локального хранилища для сохранения файлов LFS
- Использование объектного хранилища для сохранения файлов LFS
Поскольку LFS обычно хранит большие файлы, использование емкости хранилища может быть значительным. Поэтому важно планировать емкость хранилища в соответствии с требованиями до развертывания.
Использование локального хранилища для файлов LFS
По умолчанию в развернутом инстансе GitLab уже включена функция LFS и используется локальное хранилище для сохранения файлов LFS.
Файлы LFS, сохранённые локально, хранятся в attachment storage по пути: shareds/lfs-objects.
Тип attachment storage зависит от способа развертывания:
- Инстансы GitLab, развернутые с помощью метода HostPath, используют хранилище узла. Из-за сложности расширения хранилища узла этот метод не рекомендуется для production-сред.
- Инстансы GitLab, развернутые с использованием storage classes или указанных PVC, используют PVC в качестве носителя хранения.
Использование объектного хранилища для файлов LFS (рекомендуется)
GitLab официально рекомендует использовать объектное хранилище для сохранения файлов LFS.
GitLab поддерживает несколько типов объектного хранилища. В следующем примере используется MinIO для иллюстрации настройки GitLab на использование объектного хранилища.
Создайте следующие бакеты в MinIO:
git-lfsgitlab-uploads
Способ создания бакетов с помощью команды mc cli следующий:
Подготовьте файл конфигурации MinIO с именем rails-storage.yaml со следующим содержимым:
Где:
provider— тип объектного хранилища, для MinIO используется фиксированное значениеAWSregion— регион объектного хранилища, для MinIO используется фиксированное значениеus-east-1aws_access_key_id— идентификатор ключа доступа к объектному хранилищуaws_secret_access_key— секретный ключ доступа к объектному хранилищуendpoint— адрес доступа к объектному хранилищуpath_style— способ доступа к объектному хранилищу, здесь используется фиксированное значениеtrue
Сохраните файл конфигурации как secret в кластере, при этом namespace должен совпадать с namespace инстанса GitLab:
Измените конфигурацию инстанса GitLab, добавив следующее для включения объектного хранилища:
Конфигурация ресурсов и параметров
В отличие от обычных API-запросов, при загрузке и скачивании файлов LFS компонент workhorse потребляет больше ресурсов CPU. Ресурсы компонента workhorse напрямую влияют на производительность push и pull.
Измените конфигурацию инстанса GitLab, добавив следующее для настройки ресурсов компонента workhorse:
Кроме того, необходимо увеличить таймаут для компонента webservice. Способ настройки следующий:
Конфигурация Git клиента
Предварительные требования
- Установлен Git клиент, проверьте версию командой
git version - Установлен git-lfs клиент, проверьте версию командой
git-lfs version
Настройка параметров Git клиента
Выполните следующую команду для сохранения учетных данных клонирования, чтобы не вводить пароль при каждом pull и push:
Выполните следующую команду для установки количества одновременных передач файлов LFS, что эффективно повышает стабильность push и pull, особенно при одновременной загрузке большого количества файлов:
Выполните следующую команду для установки таймаута активности LFS. Этот параметр обязательно нужно добавить, если GitLab использует объектное хранилище:
Конфигурация Git проекта
Выполните следующие команды для клонирования Git репозитория на локальную машину и установки git hook для LFS с помощью git lfs install:
Выполните следующую команду для установки шаблона отслеживания файлов LFS, например, для отслеживания всех файлов с расширением .safetensors:
Данная операция создаст файл .gitattributes. Выполните следующие команды, чтобы сначала зафиксировать этот файл в удаленном репозитории:
После этого добавление или обновление файлов .safetensors в репозитории будет автоматически сохраняться с помощью LFS.
Чтобы проверить, сохранён ли файл с помощью LFS, можно посмотреть файл в репозитории GitLab. Если рядом с именем файла есть маленький значок LFS, значит файл сохранён с использованием LFS.
Распространённые проблемы
Ошибка клонирования очень больших репозиториев
При клонировании очень больших репозиториев, если у клиента недостаточно ресурсов, система может завершить процесс клиента после некоторого времени работы. Решение:
- Добавить параметр
GIT_LFS_SKIP_SMUDGE=1при клонировании, чтобы пропустить выгрузку файлов LFS - Перейти в локальную директорию с кодом и выполнить команду
git lfs pullдля загрузки файлов LFS на локальную машину