Современная разработка всё сильнее зависит от автоматического тестирования. Практически каждый проект на GitHub использует GitHub Actions для проверки кода, запуска тестов и сборки приложений.
Но у стандартного подхода есть ограничения: ограниченный выбор оборудования, отсутствие доступных GPU и зависимость от инфраструктуры GitHub.
Команда Hugging Face решила эту проблему необычным способом — оставить GitHub Actions в качестве системы управления CI, но перенести выполнение задач на собственную платформу Hugging Face Jobs.
Результат оказался весьма впечатляющим: CPU-задачи стали выполняться примерно на 30% быстрее, а разработчики получили возможность запускать полноценные GPU-тесты без поддержки собственных серверов.
Что такое Hugging Face Jobs
Hugging Face Jobs — это облачная серверless-платформа, позволяющая запускать команды и скрипты практически на любом типе оборудования.
Разработчик может выбрать:
- Docker-образ;
- тип процессора;
- необходимую видеокарту;
- переменные окружения;
- секреты и токены.
Например, можно запустить обычный Python-скрипт:
hf jobs run python:3.12 python -c "print('Hello world')"
Или выполнить задачу на GPU:
Для проектов, связанных с машинным обучением, такой подход особенно интересен. Теперь тесты можно запускать на реальном GPU без необходимости содержать собственную инфраструктуру.
Как работает интеграция с GitHub Actions
Для интеграции была создана специальная прослойка под названием huggingface/jobs-actions.
Схема работы выглядит следующим образом.
Когда разработчик создаёт Pull Request, GitHub запускает workflow.
Если в конфигурации указан специальный раннер вроде:
или
GitHub отправляет событие специальному диспетчеру Hugging Face.
Далее происходит автоматический запуск временного раннера внутри Hugging Face Jobs.
GitHub воспринимает его как обычный self-hosted runner и передаёт ему выполнение задач.
После завершения работы контейнер автоматически уничтожается.
Таким образом GitHub остаётся центром управления CI, а вычисления выполняются на инфраструктуре Hugging Face.
Настройка начинается с диспетчера
Первым шагом необходимо создать специальный Space-диспетчер.
Для этого Hugging Face предлагает продублировать готовый проект:
После запуска Space пользователь получает webhook-адрес вида:
Этот адрес потребуется для дальнейшей интеграции с GitHub.
Если настройка выполняется через терминал, используется следующая команда:
После создания диспетчера необходимо определить URL:
Этот этап подготавливает инфраструктуру для получения событий от GitHub.
После выполнения этих команд диспетчер будет готов принимать webhook-запросы и запускать задачи на серверах Hugging Face.
Создание GitHub App
Следующий этап — создание GitHub App.
В настройках диспетчера необходимо указать репозиторий:
После этого система автоматически создаёт GitHub-приложение, которое сможет:
- получать события workflow;
- регистрировать временные раннеры;
- запускать задания через Hugging Face Jobs.
Также потребуется токен Hugging Face с правами на запуск задач.
Он сохраняется в секрете:
После установки приложения на нужный репозиторий GitHub начинает передавать задания новой инфраструктуре.
Как изменить существующий workflow
Самая приятная часть заключается в том, что менять GitHub Actions практически не нужно.
Стандартная конфигурация выглядит так:
Для переноса на Hugging Face достаточно заменить её на:
Если необходим GPU:
Фактически весь перенос CI может ограничиться одной строкой в workflow-файле.
После изменения GitHub начнёт автоматически отправлять задания на инфраструктуру Hugging Face.
Проверка работоспособности
Для тестирования Hugging Face предлагает создать минимальный workflow.
Сначала создаётся файл:
Этот workflow запускает простейшую проверку на инфраструктуре Hugging Face.
После отправки изменений можно проверить выполнение:
Эти команды позволяют увидеть статус GitHub Actions, активные задачи Hugging Face и журналы диспетчера.
После проверки можно убедиться, что GitHub успешно использует новую инфраструктуру.
Почему Docker-образ имеет значение
Во время экспериментов разработчики столкнулись с неожиданной проблемой.
Первоначально использовался стандартный образ:
ubuntu:22.04
Однако он требовал установки множества пакетов при каждом запуске.
В итоге команда перешла на образ Playwright:
Для GPU-задач использовался:
Это позволило существенно сократить время запуска тестов и ускорить CI.
Насколько быстрее работает новый подход
Наиболее интересны реальные результаты проекта Trackio.
Стандартный GitHub Actions на ubuntu-latest выполнял тесты примерно за:
1m40s
После перехода на Hugging Face Jobs время сократилось до:
1m10s
То есть примерно на 30%.
GPU-проверка на машине t4-small завершалась всего за:
45s
Причём стоимость такого запуска составляла менее одного цента.
Для проектов в области ИИ это особенно важно, поскольку полноценные GPU-тесты становятся доступны даже небольшим командам.
Почему это может изменить рынок CI
До сих пор GitHub Actions оставался фактическим стандартом для большинства open-source проектов.
Однако Hugging Face предлагает интересную альтернативу.
Разработчики сохраняют привычный интерфейс GitHub Actions, но получают:
- более гибкий выбор оборудования;
- поддержку GPU;
- собственные Docker-образы;
- более быстрые тесты;
- удобную работу с логами;
- возможность подключения датасетов и моделей напрямую из экосистемы Hugging Face.
Особенно выиграть могут проекты, связанные с искусственным интеллектом, где GPU уже давно стал обязательным инструментом разработки.