1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-pytorch_geometry

Клонировать/Скачать
CONTRIBUTING.md 26 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 29.06.2025 04:42 8b00a89

Внесение вклада в Kornia

Добро пожаловать!! Это уголок для участников проекта Kornia. Если вы читаете это, значит, вас интересует дифференциальная компьютерная визуализация, и вы готовы внести свой вклад в проект.

Все приветствуются для участия в проекте. Существует несколько способов внести свой вклад:

  1. Задавайте/Отвечайте на вопросы:

    • Где вы можете задавать вопросы?
      1. используя GitHub обсуждения в репозитории Kornia: GH Discussions
      2. Наша рабочая область Slack для поддержания связи с нашими основными участниками и сообществом: Присоединиться здесь
      3. используя тег #kornia в PyTorch Discuss
    • Пожалуйста, не используйте GitHub issues для Q&A.
    • Если вы разработчик и хотите узнать больше о экосистеме PyTorch, мы рекомендуем присоединиться к PyTorch Slack. Вы можете подать заявку с помощью этой формы: https://bit.ly/ptslack2. Сообщайте о багах через GitHub issues:
    • Сначала проведите быстрый поиск, чтобы убедиться, что никто не сообщил о подобной проблеме.
    • Если вы нашли неприведённый баг, пожалуйста, откройте новый тикет.
    • Постарайтесь предоставить как можно больше информации. Сообщайте с помощью одного из доступных шаблонов. Некоторые советы:
      • Ясное название и описание проблемы.
      • Опишите, как воспроизвести ошибку.
      • Сообщите о версиях ваших пакетов для упрощения задачи.
      • Постарайтесь включить образец кода/тест, который вызывает ошибку.3. Исправьте баг или разработайте функцию из дорожной карты:
    • У нас всегда будет открытый тикет, показывающий текущую дорожную карту.
    • Выберите неприсвоенную функцию (или предложите новую) или открытый тикет о баге.
    • Следуйте инструкциям из Разработка Kornia для настройки вашего разработческого окружения и начала работы.
    • Проверьте наши правила оформления кода. Подробнее см. ниже.
    • Запустите тестовую среду локально и убедитесь, что всё работает как ожидается, прежде чем отправить pull request.
    • Откройте Pull Request, получите зелёный свет от CI, и ваш код будет влит в проект.
  2. Пожертвуйте ресурсы проекту:

    • Если вы организация или учреждение, желающие оказать поддержку, стать спонсором или просто использовать проект, пожалуйста, свяжитесь с нами.
    • Мы открыты для любых форм сотрудничества и готовы слушать вашу обратную связь.
    • Мы стремимся предоставлять функции по запросу. Обращайтесь к нам!
    • В настоящее время мы ищем возможность пожертвования сервера для тестирования CUDA-кода. (Пожалуйста, свяжитесь с нами).

Разработка Kornia

Чтобы начать разработку, следуйте приведенным ниже шагам:1. Создайте форк репозитория kornia, нажав на кнопку fork на странице репозитория. Это создаст копию репозитория Kornia под вашим аккаунтом GitHub.2. Клонируйте ваш форк Kornia и добавьте репозиторий Kornia как удаленный: bash $ git clone git@github.com:<ваш логин на GitHub>/kornia.git $ cd kornia $ git remote add upstream https://github.com/kornia/kornia.git

  1. Создайте новый ветвь с осмысленным названием, отражающим ваш вклад. Пример:

    $ git checkout upstream/main -b feat/foo_feature
    # или
    $ git checkout upstream/main -b fix/bar_bug

    🚨 Не работайте на ветке main!

  2. Создание среды разработки

    Использование скрипта kornia

    Предполагая, что вы используете Ubuntu с установленными драйверами nvidia. В bash, выполните команду source ./path.bash.inc. Это создаст локальную среду conda под ./.dev_env, которая включает Pytorch и некоторые зависимости (не требуется root).

    $ source ./path.bash.inc
    $ python setup.py develop
    $ python -c "import kornia; print(kornia.__version__)"

    Для установки или обновления среды conda выполните setup_dev_env.sh

    $ ./setup_dev_env.sh

    Ручная настройка

    В противном случае, используйте виртуальную среду по вашему выбору. Мы рекомендуем использовать conda, так как это облегчает установку Pytorch, особенно для тех, у кого есть доступ к GPU.

    Пример создания и активации виртуальной среды под названием venv:

    # Используя virtualenv
    $ virtualenv venv -p <ваша версия python / псевдоним> # например python3.10
    $ ./venv/bin/activate
    
    # Используя conda
    $ conda create -p venv python=<версия языка> # например 3.10
    $ conda activate venv/
    ```    Установка Pytorch и Kornia:
    ```bash
    # Установка pytorch: https://pytorch.org/get-started/locally/
    # С помощью pip
    $ pip install torch
    # С помощью conda
    $ conda install pytorch cudatoolkit -c pytorch -c nvidia # Для окружения с GPU
    # или
    $ conda install pytorch cpuonly -c pytorch # Для окружения с CPU

    Установка Kornia для разработки

    $ pip install -e .[dev]

    Если вы хотите внести свой вклад в документацию

    $ pip install -e .[docs]

    
    **Внимание**: Если Kornia уже была установлена в вашей виртуальной среде, удалите её с помощью
    `pip uninstall kornia` перед повторной установкой в режиме редактирования с флагом `-e`.
    
  3. Разрабатывайте код на вашей ветке, и перед созданием запроса на слияние, убедитесь, что ваш код проходит проверки.

    В процессе разработки кода вы должны также создать тестовые случаи для вашего кода. Кроме того, убедитесь, что остальные тесты продолжают проходить. Вы можете запустить тесты с помощью:

    $ pytest tests/<TEST_TO_RUN>.py --dtype=float32,float64 --device=all

    С помощью аргумента dtype запускайте тесты с использованием тензоров со всеми желаемыми dtypes. Варианты: bfloat16, float16, float32, float64, и all.

    Аналогично, с помощью аргумента device запускайте тесты с использованием тензоров на желаемых устройствах. Варианты: cpu, cuda, tpu, mps, и all. Kornia использует pre-commit для запуска инструментов контроля качества кода. Убедитесь, что pre-commit установлен в вашей среде разработки; в противном случае вы можете установить инструменты вручную и запустить их с помощью доступных команд в Makefile. Подробнее о кодовых стандартах, используемых в проекте, можно прочитать здесь.# Вклад в документацию

Мы рады принимать вклады в документацию Kornia! Если вы хотите улучшить нашу документацию, следуйте этим шагам:

  1. Настройте вашу среду разработки, как описано в разделе Разработка Kornia выше.

  2. Внесите изменения в файлы документации, расположенные в директории docs/.

  3. Соберите документацию с помощью предоставленного Makefile:

    $ make build-docs

    Эта команда удалит любые ранее собранные файлы и сгенерирует новую версию документации.

  4. Собранные документы будут доступны в директории docs/build/html/. Вы можете открыть главную страницу в вашем браузере, запустив:

    $ open docs/build/html/index.html
  5. Проверьте ваши изменения в браузере, чтобы убедиться, что они отображаются так, как вы ожидаете.

  6. Когда вы удовлетворены своими изменениями, сделайте коммит и отправьте запрос на слияние, следуя инструкциям в разделе Запрос на слияние ниже.

Проведение бенчмаркирования

У нас настроена бенчмарк-среда в benchmarks/. Мы использовали библиотеку pytest-benchmark для бенчмаркирования наших функциональных модулей.

Наш Makefile содержит команду benchmark, которая является псевдонимом для запуска наших бенчмарков.

# Для запуска всего набора тестов
$ make benchmark

# Для запуска конкретного файла можно передать `BENCHMARK_SOURCE`
$ make benchmark BENCHMARK_SOURCE=benchmarks/augmentation/2d_geometric_test.py
```# Для запуска конкретного бенчмарка можно использовать `BENCHMARK_SOURCE` в соответствии с поведением pytest
$ make benchmark BENCHMARK_SOURCE=benchmarks/augmentation/2d_geometric_test.py::test_aug_2d_elastic_transform

# Для обновления оптимизаторов, которые нужно выполнить, можно передать `BENCHMARK_BACKENDS=`
$ make benchmark BENCHMARK_BACKENDS='inductor,eager'

# Для передачи других опций запуска, можно использовать `BENCHMARK_OPTS`
# Пример, настройка для запуска бенчмарка на cuda в режиме verbose
$ make benchmark BENCHMARK_OPTS='--device=cuda -vv'

Мы используем ту же тестовую генераторскую среду, поэтому вы можете настроить устройство внутри --device, тип данных внутри --dtype, и оптимизатор внутри --optimizer.

Поддерживаемые оптимизаторы в наборе тестов включают torch compile backend в режиме non-experimental, и '' или None, которые будут работать так же, как eager режим и выполнять любые действия, а также 'jit', который попытается скриптовать операцию с помощью torch.jit.script.

Вы можете использовать BENCHMARK_OPTS в make benchmark, чтобы перезаписать стандартные опции, используемые в pytest-benchmark.

По умолчанию мы используем:

  • разогрев, так как оптимизатор/jit может иметь дополнительные затраты.
  • группировку: для отображения бенчмарка для каждого теста
  • точность: для получения более точных результатов
  • стандартное значение для BENCHMARK_BACKENDS'inductor,eager'.
  • стандартное значение для BENCHMARK_SOURCEbenchmarks/.Вы также можете запустить бенчмарки внутри контейнера Docker:
$ make benchmark-docker

что построит и запустит образ docker/Dockerfile.benchmark. Команда бенчмаркирования может использоваться для BENCHMARK_BACKENDS и BENCHMARK_SOURCE.

Кодовые стандарты

Этот раздел предоставляет общие рекомендации по разработке кода для проекта. Следующие правила будут служить руководством в написании высококачественного кода, что позволит нам масштабировать проект и обеспечит, что база кода остается читаемой и поддерживаемой.

  • Используйте осмысленные имена для переменных, функций и классов.

  • Пишите небольшие постепенные изменения:

    • Чтобы иметь линейную и чистую историю коммитов, мы рекомендуем делать коммит каждого небольшого изменения, которое вы вносите в исходный код.

    • Ясные сообщения коммитов помогут понять прогресс вашей работы.

    • Пожалуйста, избегайте загрузки больших файлов.- Добавьте тесты:

    • Тесты критически важны, и мы ожидаем, что вы напишете юнит-тесты для каждой функциональности, которую реализуете. Также хорошей идеей будет группировать тесты для каждой функциональности.

    • В директории testing/ у нас есть набор функций, чтобы помочь вам создать значимые тесты. Не стесняйтесь добавлять любую функциональность, которую вы считаете необходимой и которая может использоваться с тестовым набором. Под этой директорией должны находиться все коды, необходимые для тестов и не являющиеся тестами или конфигурациями pytest (фикстуры и т.д.). ```python from testing.base import BaseTester

      class TestMyFunction(BaseTester): # Для сравнения фактических и ожидаемых тензоров используйте self.assert_close(...)

      def test_smoke(self, device, dtype):
          # тест функции с различными параметрами, чтобы проверить, что функция хотя бы запускается со всеми разрешенными аргументами.
          pass
      
      def test_exception(self, device, dtype):
          # тест исключений, которые могут возникнуть в вашей функции
      
          # пример правильного тестирования исключений
          # с pytest.raises(<raised Error>) как errinfo:
          #     your_function(<set of parameters that raise the error>)
          # assert '<msg of error>' в str(errinfo)
      
          pass
      
      def test_cardinality(self, device, dtype):
          # тест, чтобы проверить, что с различными параметрами форма выхода соответствует ожидаемой.
          pass
      
      def test_feature_foo(self, device, dtype):
          # тест базовой функциональности
          pass
      
      def test_feature_bar(self, device, dtype):
          # тест другой функциональности
          pass
      
      def test_gradcheck(self, device):
          # тест градиентов функциональности
          # Использует `self.gradcheck(...)`
          pass
      
      def test_dynamo(self, device, dtype, torch_optimizer):
          # тест функциональности с использованием оптимизатора dynamo
              # inputs = (...)
              # op = your_function
              # op_optimized = torch_optimizer(op)
              # self.assert_close(op(inputs), op_optimized(inputs))
      
              pass
      ```- Тесты должны охватывать различные устройства (`CPU`, `CUDA` и т.д.), типы данных и различные размеры пакетов входных данных. Устройство и тип данных генерируются из аргументов (`--dtype` и `--device`), как описано выше. Эти аргументы при вызове тестовых наборов с pytest сгенерируют все возможные комбинации, предоставляя фикстуры для всех функций. Пример:
      
      ```python
      import pytest
      
      @pytest.mark.parametrize("batch_size", [1, 2, 5])
      def test_smoke(batch_size, device, dtype):
          x = torch.rand(batch_size, 2, 3, device=device, dtype=dtype)
          assert x.shape == (batch_size, 2, 3)
  • Мы поддерживаем статический анализатор типов для Python >= 3.8

    • Пожалуйста, ознакомьтесь с MyPy cheatsheet для Python 3.
    • Рекомендуется использовать типы внутри функций, когда это повысит читаемость.
    • Попробуйте использовать все доступные элементы под kornia.core, например from kornia.core import Tensor.
    • Для модулей, которые больше не поддерживают JIT, рассмотрите возможность добавления from __future__ import annotations, чтобы включить новые возможности типизации.
    • Всегда указывайте типы входных и выходных данных функций, например:
      from __future__ import annotations
      from kornia.core import Tensor
      
      def homography_warp(
        patch_src: Tensor,
        dst_homo_src: Tensor,
        dsize: tuple[int, int],
        mode: str = 'bilinear',
        padding_mode: str = 'zeros'
      ) -> Tensor:
  • Мы рекомендуем использовать новые Python 3 f-Strings для улучшенного форматирования строк: Правила: PEP 498 - Литеральное строковое интерполяция

  • Форматируйте ваш код:

    • Мы следуем PEP8 стилю.

    • Используйте pre-commit для автоматического форматирования кода перед отправкой: pre-commit.com Для этого просто установите его для этого репозитория, выполнив команду: pre-commit install в терминале.

    • Изменения в PEP8:

    • Длина строки составляет 120 символов.

    • W504 (перенос строки после двоичного оператора) иногда допустим. Например:

      determinant = A[:, :, 0:1, 0:1] * A[:, :, 1:2, 1:2] -
                    A[:, :, 0:1, 1:2] * A[:, :, 1:2, 0:1]
  • Использование сторонних библиотек:

    • Все из стандартной библиотеки (https://docs.python.org/3/library/) и PyTorch (https://pytorch.org/) допустимо. Это не означает, что следует импортировать urllib просто так, но делать это по мере необходимости допустимо.

Запрос на слияние

Как только вы завершите реализацию функции или исправление ошибки, пожалуйста, отправьте запрос на слияние на https://github.com/kornia/kornia через веб-сайт.

Если вы не знакомы с созданием запроса на слияние, вот несколько руководств:

  • http://stackoverflow.com/questions/14680711/how-to-do-a-github-pull-request
  • https://help.github.com/articles/creating-a-pull-requestКак только вы создадите свой запрос на слияние, наша система непрерывной интеграции проверит ваш запрос на слияние. Непрерывная интеграция проверит, что:
  • pytest все тесты проходят.
  • Уровень покрытия тестами остается высоким. Пожалуйста, добавьте юнит-тесты, чтобы мы поддерживали покрытие кода.
  • Типизация с mypy проверяет типы в коде Python.
  • Если документация может быть успешно сгенерирована
  • pre-commit ci
    • ruff проверяет стиль кода (наши руководства основаны на PEP8) и проверяет, хорошо ли отформатирован код
    • docformatter проверяет, хорошо ли отформатированы строки документации кода
    • и некоторые другие проверки. Проверьте нашу конфигурацию pre-commitЕсли ваш код не проходит одну из этих проверок, вы будете обязаны исправить свой запрос на слияние до того, как он будет рассмотрен.

Лицензия

Принимая участие в проекте, вы соглашаетесь, что ваши вклады будут лицензированы под лицензией Apache LICENSE. Проверьте полную лицензию здесь

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-pytorch_geometry.git
git@api.gitlife.ru:oschina-mirror/mirrors-pytorch_geometry.git
oschina-mirror
mirrors-pytorch_geometry
mirrors-pytorch_geometry
main