Добро пожаловать!! Это уголок для участников проекта Kornia. Если вы читаете это, значит, вас интересует дифференциальная компьютерная визуализация, и вы готовы внести свой вклад в проект.
Все приветствуются для участия в проекте. Существует несколько способов внести свой вклад:
Задавайте/Отвечайте на вопросы:
#kornia
в PyTorch Discuss
Пожертвуйте ресурсы проекту:
Чтобы начать разработку, следуйте приведенным ниже шагам: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
Создайте новый ветвь с осмысленным названием, отражающим ваш вклад. Пример:
$ git checkout upstream/main -b feat/foo_feature
# или
$ git checkout upstream/main -b fix/bar_bug
🚨 Не работайте на ветке main
!
Создание среды разработки
Использование скрипта 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
$ pip install -e .[dev]
$ pip install -e .[docs]
**Внимание**: Если Kornia уже была установлена в вашей виртуальной среде, удалите её с помощью
`pip uninstall kornia` перед повторной установкой в режиме редактирования с флагом `-e`.
Разрабатывайте код на вашей ветке, и перед созданием запроса на слияние, убедитесь, что ваш код проходит проверки.
В процессе разработки кода вы должны также создать тестовые случаи для вашего кода. Кроме того, убедитесь, что остальные тесты продолжают проходить. Вы можете запустить тесты с помощью:
$ 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! Если вы хотите улучшить нашу документацию, следуйте этим шагам:
Настройте вашу среду разработки, как описано в разделе Разработка Kornia выше.
Внесите изменения в файлы документации, расположенные в директории docs/
.
Соберите документацию с помощью предоставленного Makefile:
$ make build-docs
Эта команда удалит любые ранее собранные файлы и сгенерирует новую версию документации.
Собранные документы будут доступны в директории docs/build/html/
. Вы можете открыть главную страницу в вашем браузере, запустив:
$ open docs/build/html/index.html
Проверьте ваши изменения в браузере, чтобы убедиться, что они отображаются так, как вы ожидаете.
Когда вы удовлетворены своими изменениями, сделайте коммит и отправьте запрос на слияние, следуя инструкциям в разделе Запрос на слияние ниже.
У нас настроена бенчмарк-среда в 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.
По умолчанию мы используем:
BENCHMARK_BACKENDS
— 'inductor,eager'
.BENCHMARK_SOURCE
— benchmarks/
.Вы также можете запустить бенчмарки внутри контейнера 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
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]
Использование сторонних библиотек:
urllib
просто так, но делать это по мере необходимости допустимо.Как только вы завершите реализацию функции или исправление ошибки, пожалуйста, отправьте запрос на слияние на https://github.com/kornia/kornia через веб-сайт.
Если вы не знакомы с созданием запроса на слияние, вот несколько руководств:
Принимая участие в проекте, вы соглашаетесь, что ваши вклады будут лицензированы под лицензией Apache LICENSE. Проверьте полную лицензию здесь
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )