Spec-Zone.ru › PyTorch 2.14

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

Создано: 22 апр. 2026 г. | Последнее обновление: 21 мая 2026 г.

Общие сведения

Внешние (OOT) бэкенды ускорителей должны поддерживать совместимость с постоянно развивающейся кодовой базой PyTorch. По мере быстрого развития PyTorch изменения в вышестоящем репозитории могут нарушить интеграцию с нижестоящими ускорителями. Для решения этой задачи PyTorch предоставляет механизм Cross-Repository CI Relay (CRCR), который обеспечивает автоматическую координацию CI между репозиторием PyTorch и репозиториями сторонних разработчиков ускорителей.

В этой главе описан процесс интеграции репозиториев сторонних разработчиков ускорителей с экосистемой CI PyTorch, позволяющий непрерывно проверять совместимость.

Почему важна интеграция с CI

Интеграция с экосистемой CI PyTorch дает несколько важных преимуществ:

  • Раннее обнаружение: выявляйте проблемы совместимости до того, как они попадут в рабочую среду, сокращая затраты на отладку и влияние на пользователей.
  • Автоматизированная проверка: автоматически тестируйте свой ускоритель на PR PyTorch без ручного вмешательства.
  • Снижение затрат на сопровождение: упреждающее тестирование уменьшает необходимость в срочных исправлениях при нарушении совместимости.

Как это работает

Система CRCR состоит из четырех компонентов: приложения GitHub, которое обеспечивает взаимодействие с аутентификацией и событиями; репозитория PyTorch как источника вышестоящих событий; сервера ретрансляции, который отправляет события подходящим нижестоящим репозиториям; и нижестоящих репозиториев, которые получают события и при необходимости отправляют результаты обратно.

Когда в PyTorch открывают или обновляют PR, GitHub уведомляет сервер ретрансляции через приложение GitHub. Сервер ретрансляции проверяет событие, считывает список разрешений и отправляет событие repository_dispatch в каждый зарегистрированный нижестоящий репозиторий. Нижестоящие репозитории могут при необходимости отправлять результаты CI обратно на сервер ретрансляции, который отображает их в HUD PyTorch или в виде проверок PR.

        flowchart TD
    PyTorch["PyTorch<br/>(PR Event)"] -->|webhook| RS["Relay Server<br/>(Allowlist/Dispatch/Callback)"]
    GH["GitHub APP<br/>(Auth&Bridge)"] <--> RS
    RS <--> HUD["HUD<br/>(Dashboard)"]
    RS -->|repo_dispatch| DA[Downstream A]
    RS -->|repo_dispatch| DB[Downstream B]
    RS -->|repo_dispatch| DC[Downstream C]
    DA -->|callback| RS
    DB -->|callback| RS
    DC -->|callback| RS
    

Участие регулируется списком разрешений из четырех уровней:

  • L1: события пересылаются в нижестоящий репозиторий; результаты не отправляются обратно в вышестоящий репозиторий.
  • L2: результаты отображаются на отдельных страницах HUD нижестоящего репозитория.
  • L3: в PR PyTorch отображаются неблокирующие проверки, запускаемые по меткам сопровождающих.
  • L4: блокирующие проверки запускаются для всех PR PyTorch (уровень предназначен для критически важных ускорителей).

Нижестоящие репозитории переходят на следующие уровни, выполняя документированные требования к проверке оборудования, надежности CI и показателям успешности.

Подробное описание архитектуры и проектных решений см. в документе RFC-0050: ретрансляция CI между репозиториями для внешних бэкендов PyTorch.

Примечание

В настоящее время CRCR поддерживает только интеграцию уровня L1 (без уведомлений).

Этапы интеграции

Шаг 1. Установите приложение GitHub

Установите приложение GitHub PyTorch Cross-Repo CI Relay в своем репозитории: нажмите кнопку Configure и выберите репозиторий.

Шаг 2. Добавьте свой репозиторий в список разрешений

Отправьте pull request в pytorch/pytorch, добавив свой репозиторий в .github/allowlist.yml для ключа L1:

L1:
  - your-org/your-accelerator

Пример см. в #180352. Команда PyTorch проверит и примет PR, завершив подключение.

Шаг 3. Создайте файл workflow

Создайте в своем репозитории workflow GitHub Actions для получения событий repository_dispatch:

.github/workflows/pytorch_ci.yml
name: PyTorch CI

run-name: >-
  PyTorch CI -
  ${{
    github.event.client_payload.event_type == 'pull_request' &&
    format('PR #{0} ({1})',
      github.event.client_payload.payload.pull_request.number,
      github.event.client_payload.payload.action) ||
    format('Push {0}', github.event.client_payload.payload.after)
  }}

on:
  repository_dispatch:
    types: [pull_request, push]

concurrency:
  group: >-
    pytorch-ci-${{ github.event.client_payload.payload.repository.full_name }}-${{
    github.event.client_payload.payload.pull_request.number || github.run_id }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  cancel-workflow:
    if: ${{ github.event.client_payload.payload.action == 'closed' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "PR closed, canceling in-progress runs"

  ci:
    if: ${{ github.event.client_payload.payload.action != 'closed' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout downstream repo
        uses: actions/checkout@v4

      - name: Checkout PyTorch at triggered commit
        uses: actions/checkout@v4
        with:
          repository: pytorch/pytorch
          ref: >-
            ${{ github.event.client_payload.event_type == 'pull_request' &&
            github.event.client_payload.payload.pull_request.head.sha ||
            github.event.client_payload.payload.after }}
          path: pytorch

      - name: Build and test
        run: |
          # Your build and test commands
          echo "Running tests against PyTorch..."

Шаг 4. Проверьте интеграцию

Убедитесь, что интеграция работает правильно:

  1. Создайте тестовый PR в PyTorch (или попросите сопровождающих запустить тестовую отправку события)
  2. Убедитесь, что ваш workflow запускается правильно

Данные события

Ретранслятор CRCR работает как посредник без сохранения состояния: он пересылает полную полезную нагрузку веб-перехватчика GitHub в виде client_payload в событии repository_dispatch. Упрощенная промежуточная схема не используется.

Объект client_payload содержит два поля верхнего уровня:

  • event_type: либо pull_request, либо push
  • payload: исходная полезная нагрузка веб-перехватчика GitHub для этого типа события

Часто используемые поля:

github.event.client_payload.event_type                       # "pull_request" or "push"
github.event.client_payload.payload.action                   # "opened", "synchronize", "reopened" or "closed" only
github.event.client_payload.payload.pull_request.number      # PR number (pull_request events only)
github.event.client_payload.payload.pull_request.head.sha    # Head commit SHA to checkout
github.event.client_payload.payload.after                    # Commit SHA (push events only)

Поддерживаемые значения action для событий pull_request:

Действие

Описание

opened

Создан новый PR

synchronized

В существующий PR отправлены новые коммиты

reopened

Повторно открыт ранее закрытый PR

closed

PR закрыт или принят; запускает задание cancel-workflow для остановки выполняющихся запусков

Устранение неполадок

Workflow не запускается

  1. Убедитесь, что команда PyTorch завершила подключение вашего репозитория
  2. Проверьте, что файл workflow находится в ветке по умолчанию
  3. Убедитесь, что тип события repository_dispatch в вашем workflow совпадает с типом события, отправляемым ретранслятором

Ресурсы

  • RFC-0050: ретрансляция CI между репозиториями для внешних бэкендов PyTorch

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/accelerator/ci.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API