Управление большими файлами с помощью 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.
Хранилище вложений зависит от метода развертывания:
- Экземпляры GitLab, развернутые с использованием метода HostPath, используют хранилище узла. Из-за сложности расширения хранилища узла этот метод не рекомендуется для производственных сред.
- Экземпляры GitLab, развернутые с использованием классов хранилища или указанных 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
Сохраните конфигурационный файл как секрет в кластере, при этом namespace должен совпадать с namespace экземпляра GitLab:
Измените конфигурацию экземпляра GitLab, добавив следующее для включения объектного хранилища:
Конфигурация ресурсов и параметров
В отличие от обычных API-запросов, при загрузке и скачивании файлов LFS компонент workhorse потребляет больше ресурсов CPU. Ресурсы компонента workhorse напрямую влияют на производительность push и pull.
Измените конфигурацию экземпляра GitLab, добавив следующее для настройки ресурсов компонента workhorse:
Кроме того, необходимо увеличить таймаут для компонента webservice. Метод настройки следующий:
Конфигурация Git-клиента
Предварительные требования
- Установлен Git-клиент, выполните команду
git versionдля проверки версии Git - Установлен git-lfs клиент, выполните команду
git-lfs versionдля проверки версии git-lfs
Настройка параметров Git-клиента
Выполните следующую команду для сохранения учетных данных клонирования, чтобы не вводить пароль при каждом pull и push:
Выполните следующую команду для установки количества одновременных передач файлов LFS, что может эффективно повысить стабильность push и pull, особенно при одновременной загрузке большого количества файлов:
Выполните следующую команду для установки таймаута активности LFS. Этот параметр необходимо добавить, если GitLab использует объектное хранилище:
Конфигурация Git-проекта
Выполните следующие команды для клонирования Git-репозитория на локальную машину и запуска git lfs install для установки git hook LFS:
Выполните следующую команду для установки шаблона отслеживания файлов LFS, например, для отслеживания всех файлов с расширением .safetensors:
Данная операция создаст файл .gitattributes. Выполните следующие команды для коммита этого файла в удаленный репозиторий:
После этого добавление или обновление файлов .safetensors в репозитории будет автоматически сохраняться с помощью LFS.
Чтобы проверить, сохранён ли файл с использованием LFS, можно просмотреть файл в репозитории GitLab. Если рядом с именем файла есть маленькая иконка LFS, это означает, что файл сохранён с использованием LFS.
Распространённые проблемы
Ошибка клонирования очень больших репозиториев
При клонировании очень больших репозиториев, если у клиента недостаточно ресурсов, система может завершить процесс клиента спустя некоторое время работы. Решение:
- Добавить параметр
GIT_LFS_SKIP_SMUDGE=1при клонировании, чтобы пропустить выгрузку файлов LFS - Перейти в локальный каталог кода и выполнить команду
git lfs pullдля загрузки файлов LFS на локальную машину