• Русский
  • Model Repository

    Основное определение функции model repository — предоставить систему хранения моделей машинного обучения с управлением версиями на основе Git, позволяющую командам управлять файлами моделей, отслеживать версии и сотрудничать между арендаторами. Используется Git LFS для хранения больших файлов и интеграция с MLOps workflow для объединения разработки и развертывания моделей.

    Преимущества

    Нативное управление версиями Git

    • Отслеживание изменений моделей через коммиты/ветки/теги, обеспечивая воспроизводимость.

    Высокоскоростные передачи

    • Загрузки через CLI/Notebook используют пропускную способность внутренней сети.

    Совместное использование между арендаторами

    • Общие модели доступны в разных пространствах имён (например, public как маркетплейс моделей).

    Бесшовная интеграция

    • Прямое развертывание моделей из репозитория в inference-сервисы.

    Основные функции

    Создание и удаление Model Repository

    • Создание пустого Git-репозитория с метаданными (имя/описание/видимость).
    • Удаление моделей после проверки зависимостей (например, отсутствие активных inference-сервисов).

    Управление файлами

    1. CLI/Git LFS
      • Используйте git lfs track для больших файлов (например, *.bin, *.h5).
      • Пример:
        git clone <model_repo_url>
        git lfs install
        cp ~/local_model/* . && git add . && git commit -m "v1.0" && git push

    Управление версиями

    1. Ветвление
      • Поддержка параллельных версий (например, ветки experimental и main).
    2. Тегирование
      • Пометка релизов через UI/CLI (например, git tag -a v2.0 -m "Stable release").
    3. Синхронизация метаданных
      • Автоматическое чтение README.md из основной ветки для описания модели.

    Совместное использование между арендаторами

    1. Общие модели
      • Установка видимости "Shared" при создании для доступа между арендаторами.
    2. Публичный маркетплейс
      • Использование пространства имён public для публикации open-source моделей (например, конверсии HuggingFace).

    Интеграция с MLOps

    1. Готовность к развертыванию
      • Запуск inference-сервиса одним кликом из tagged версий модели.
    2. Интеграция с Notebook
      • Прямое клонирование моделей в AML Notebooks для тестирования:
        !git clone https://aml-public/resnet50.git

    Технические заметки

    1. Требование Git LFS
      • Необходимо наличие .gitattributes для указания файлов, отслеживаемых LFS (например, *.zip filter=lfs diff=lfs merge=lfs).
    2. Правила основной ветки
      • Некорректные метаданные в README.md могут блокировать развертывание inference.

    Создание Model Repository

    WARNING

    Перед началом убедитесь, что на вашей системе установлены Git и Git LFS.

    $ git lfs version

    Шаг 1: Клонирование или инициализация репозитория

    Если у вас уже есть удалённый репозиторий, клонируйте его. В противном случае можно инициализировать новый Git-репозиторий локально.

    # Способ 1: Клонировать существующий репозиторий
    git clone <repository-url>
    cd <repo-name>
    
    # Способ 2: Инициализировать новый репозиторий
    mkdir <your-repo-name>
    cd <your-repo-name>
    git init
    git checkout -b main # Создать и переключиться на ветку main

    Шаг 2: Инициализация Git LFS

    Инициализация Git LFS

    git lfs install

    Шаг 3: Копирование файлов модели в директорию репозитория (опционально)

    # Если у вас есть локальные файлы модели, которые нужно добавить в репозиторий, скопируйте их в текущую директорию.
    
    cp -r /path/to/your/model/files/* .

    Шаг 4: Настройка отслеживания Git LFS (выберите один из двух вариантов)

    1. Можно заранее создать файл .gitattributes для указания типов файлов, которые нужно отслеживать.

    2. Либо использовать команду git lfs migrate для автоматической проверки и миграции больших файлов.

    • Вариант 1: Активное отслеживание через .gitattributes (рекомендуется для новых проектов)

      # Этот метод явно указывает Git LFS, какие файлы отслеживать, задавая типы файлов в `.gitattributes`.
      # Полезно для новых проектов или когда точно известно, какие типы файлов нужно отслеживать.
      
      cat >.gitattributes <<EOL
      *.7z filter=lfs diff=lfs merge=lfs -text
      *.arrow filter=lfs diff=lfs merge=lfs -text
      *.bin filter=lfs diff=lfs merge=lfs -text
      *.bz2 filter=lfs diff=lfs merge=lfs -text
      *.ckpt filter=lfs diff=lfs merge=lfs -text
      *.ftz filter=lfs diff=lfs merge=lfs -text
      *.gz filter=lfs diff=lfs merge=lfs -text
      *.h5 filter=lfs diff=lfs merge=lfs -text
      *.joblib filter=lfs diff=lfs merge=lfs -text
      *.lfs.* filter=lfs diff=lfs merge=lfs -text
      *.mlmodel filter=lfs diff=lfs merge=lfs -text
      *.model filter=lfs diff=lfs merge=lfs -text
      *.msgpack filter=lfs diff=lfs merge=lfs -text
      *.npy filter=lfs diff=lfs merge=lfs -text
      *.npz filter=lfs diff=lfs merge=lfs -text
      *.onnx filter=lfs diff=lfs merge=lfs -text
      *.ot filter=lfs diff=lfs merge=lfs -text
      *.parquet filter=lfs diff=lfs merge=lfs -text
      *.pb filter=lfs diff=lfs merge=lfs -text
      *.pickle filter=lfs diff=lfs merge=lfs -text
      *.pkl filter=lfs diff=lfs merge=lfs -text
      *.pt filter=lfs diff=lfs merge=lfs -text
      *.pth filter=lfs diff=lfs merge=lfs -text
      *.rar filter=lfs diff=lfs merge=lfs -text
      *.safetensors filter=lfs diff=lfs merge=lfs -text
      saved_model/**/* filter=lfs diff=lfs merge=lfs -text
      *.tar.* filter=lfs diff=lfs merge=lfs -text
      *.tar filter=lfs diff=lfs merge=lfs -text
      *.tflite filter=lfs diff=lfs merge=lfs -text
      *.tgz filter=lfs diff=lfs merge=lfs -text
      *.wasm filter=lfs diff=lfs merge=lfs -text
      *.xz filter=lfs diff=lfs merge=lfs -text
      *.zip filter=lfs diff=lfs merge=lfs -text
      *.zst filter=lfs diff=lfs merge=lfs -text
      *tfevents* filter=lfs diff=lfs merge=lfs -text
      EOL
      
      # Также можно вручную добавить или изменить файл `.gitattributes`, например:
      git lfs track "*.h5" "*.bin" "*.pt" # Отслеживать файлы с указанными суффиксами
      TIP

      Если в вашем репозитории уже есть файлы, которые нужно отслеживать через Git LFS, рекомендуется после коммита изменений .gitattributes выполнить команду, чтобы Git заново обработал эти файлы и преобразовал их в LFS-поинтеры:

      git add --renormalize .

    • Вариант 2: Использование git lfs migrate для проверки и миграции (рекомендуется для существующих репозиториев или исторических файлов)

      Команда git lfs migrate может найти и мигрировать большие файлы, уже существующие в истории Git (но не отслеживаемые LFS). Это переписывает историю — согласуйте с коллегами. При пуше переписанной истории используйте --force-with-lease.

      # Проверка файлов, которые нужно мигрировать
      ```bash
      # Проверка файлов, которые нужно мигрировать
      
      git status # Убедитесь, что рабочее дерево чисто
      git lfs migrate info
      
      # Миграция существующих больших файлов в LFS
      # Следующая команда мигрирует все файлы больше 100MB в Git LFS. Этот лимит 100MB основан на рекомендуемом GitHub ограничении размера файла для оптимальной производительности.
      
      git lfs migrate import --above 100MB
      TIP

      Для общих репозиториев: предупредите коллег перед миграцией, а при пуше переписанной истории используйте: git push --force-with-lease

    Шаг 5: Добавление, коммит и пуш

    После настройки LFS добавьте файлы в индекс, сделайте коммит и отправьте изменения в удалённый репозиторий.

    # Добавить все изменения, включая файл `.gitattributes` (если создан) и файлы модели.
    git add .
    git add --renormalize . # Убедиться, что все файлы, соответствующие правилам LFS, правильно помечены.
    
    # Проверить список файлов, отслеживаемых LFS (опционально)
    git lfs ls-files -n
    
    # Сделать коммит
    # Рекомендуется настроить имя пользователя и email, либо убедиться, что они настроены глобально.
    # git config --global user.name "Your Name"
    # git config --global user.email "your.email@example.com"
    git commit -am "Add LLM model files with Git LFS"
    git push -u origin main