• Русский
  • Репозиторий моделей

    Ключевая концепция функции репозитория моделей заключается в предоставлении системы хранения с версионным контролем на основе Git для моделей машинного обучения, что позволяет командам управлять файлами моделей, отслеживать версии и совместно работать между tenant'ами. Для хранения больших файлов используется Git LFS, а также обеспечивается интеграция с рабочими процессами MLOps, чтобы связать разработку и развертывание моделей.

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

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

    • Отслеживайте изменения моделей с помощью commits/branches/tags, обеспечивая воспроизводимость.

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

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

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

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

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

    • Развертывайте модели из репозитория напрямую в inference services.

    Основные возможности

    Создание и удаление репозитория моделей

    • Создавайте пустой repository на базе Git с метаданными (name/description/visibility).
    • Удаляйте модели после проверки зависимостей (например, убедитесь, что нет активных inference services).

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

    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 из ветви по умолчанию для описаний моделей.

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

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

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

    1. Готовность к развертыванию
      • Запуск inference service в один клик из 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.

    Создание репозитория моделей

    WARNING

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

    $ git lfs version

    Шаг 1: Клонируйте или инициализируйте repository

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

    # Method 1: Clone an existing repository
    git clone <repository-url>
    cd <repo-name>
    
    # Method 2: Initialize a new repository
    mkdir <your-repo-name>
    cd <your-repo-name>
    git init
    git checkout -b main # Create and switch to the main branch

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

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

    git lfs install

    Шаг 3: Скопируйте файл модели в каталог repository (опционально)

    # If you have local model files that need to be added to the repository, copy them to the current directory.
    
    cp -r /path/to/your/model/files/* .

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

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

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

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

      # This method tells Git LFS which files to track by explicitly specifying the file types in the `.gitattributes` file.
      # This is useful for new projects or when you know exactly what file types you want to track.
      
      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
      
      # You can also manually add or modify the `.gitattributes` file, for example:
      git lfs track "*.h5" "*.bin" "*.pt" # Track files with the specified suffix
      TIP

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

      git add --renormalize .

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

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

      # Check for files that need to be migrated
      ```bash
      # Check for files that need to be migrated
      
      git status # Ensure the working tree is clean
      git lfs migrate info
      
      # Migrate existing large files to LFS
      # The following command will migrate all files larger than 100MB to Git LFS. This 100MB limit is based on GitHub's recommended file size limit for optimal performance.
      
      git lfs migrate import --above 100MB
      TIP

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

    Шаг 5: Добавьте, зафиксируйте и отправьте изменения

    После настройки LFS добавьте файлы в staging area, зафиксируйте их и отправьте в удаленный repository.

    # Add all changes, including the `.gitattributes` file (if created) and the model files.
    git add .
    git add --renormalize . # Ensure all files that conform to LFS rules are correctly tagged.
    
    # Check the list of files currently tracked by LFS (optional)
    git lfs ls-files -n
    
    # Commit the changes
    # It is recommended to configure your username and email address, or make sure you have them configured globally.
    # 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