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