Перейти к основному содержимому

Для чистой Markdown-версии этой страницы добавьте .md к этому URL. Полный индекс документации см. в https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. в https://docs.nvidia.com/dynamo/llms-full.txt.

简体中文

Руководство для участников

Dynamo — это распределенная платформа для инференса с открытым исходным кодом, которую создает растущее сообщество участников. Проект распространяется по лицензии Apache 2.0 и принимает вклад любого масштаба — от исправления опечаток до крупных функций. Вклад сообщества сформировал ключевые области Dynamo, включая интеграции бэкендов, документацию, инструменты развертывания и улучшения производительности.

С более чем 200 внешними участниками, 220+ объединенными PR сообщества и новыми участниками каждый месяц Dynamo входит в число самых быстрорастущих проектов с открытым исходным кодом для инференса. Посмотрите нашу активность коммитов и звезды GitHub. Это руководство поможет вам начать.

Присоединяйтесь к сообществу:

Кратко

Для опытных участников:

  1. Сделайте fork и клонируйте репозиторий
  2. Для изменений ≥100 строк или новых функций сначала откройте issue
  3. Создайте ветку: git checkout -b yourname/fix-router-timeout
  4. Внесите изменения, запустите pre-commit run
  5. Зафиксируйте коммит с DCO sign-off: git commit -s -m "fix: description"
  6. Откройте PR в main

Способы внести вклад

Сообщить об ошибке

Нашли что-то сломанное? Откройте отчет об ошибке, указав:

  • Шаги воспроизведения
  • Ожидаемое и фактическое поведение
  • Сведения об окружении (OS, GPU, версия Python, версия Dynamo)

Улучшить документацию

Улучшения документации всегда приветствуются:

  • Исправление опечаток или неясных объяснений
  • Добавление примеров или руководств
  • Улучшение документации API

Небольшие исправления в документации можно отправлять напрямую в PR без issue.

Предложить функцию

Есть идея? Откройте запрос на функцию, чтобы обсудить ее с сопровождающими до реализации.

Внести код

Готовы писать код? См. раздел Рабочий процесс участия ниже.

Помочь сообществу

Не весь вклад — это код. Также можно:

  • Отвечать на вопросы в Discord или в канале #ai-dynamo в CNCF Slack
  • Просматривать pull request
  • Делиться тем, как вы используете Dynamo, через блоги, выступления или соцсети
  • Поставить звезду репозиторию

С чего начать

Найти issue

Просмотрите открытые issue или ищите:

Тип issueОписание
Good First IssuesПодходит новичкам, есть подсказки
Help WantedПриветствуются вклады сообщества

Fork и клонирование

  1. Сделайте fork репозитория на GitHub
  2. Клонируйте свой fork:
git clone https://github.com/YOUR-USERNAME/dynamo.git
cd dynamo
git remote add upstream https://github.com/ai-dynamo/dynamo.git

Сборка из исходников

Полные инструкции по сборке приведены ниже. Раскройте аккордеон, чтобы настроить локальную среду разработки.

Развернуть инструкции по сборке

1. Установите системные библиотеки

Ubuntu:

sudo apt install -y build-essential libhwloc-dev libudev-dev pkg-config libclang-dev protobuf-compiler python3-dev cmake

macOS:

# Установите Homebrew, если он еще не установлен
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install cmake protobuf

# Проверьте доступность Metal
xcrun -sdk macosx metal

2. Установите Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

3. Создайте виртуальное Python-окружение

Установите uv, если он у вас еще не установлен:

curl -LsSf https://astral.sh/uv/install.sh | sh

Создайте и активируйте виртуальное окружение:

uv venv .venv
source .venv/bin/activate

4. Установите инструменты сборки

uv pip install pip maturin

Maturin — это инструмент сборки Rust-Python bindings.

5. Соберите Rust bindings

cd lib/bindings/python
maturin develop --uv

6. Установите GPU Memory Service

# Вернитесь в корень проекта
cd "$(git rev-parse --show-toplevel)"
uv pip install -e lib/gpu_memory_service

7. Установите wheel-пакет

uv pip install -e .

8. Проверьте сборку

python3 -m dynamo.frontend --help

Пользователи VSCode и Cursor могут использовать папку .devcontainer для преднастроенной среды разработки. Подробности см. в README devcontainer.

Настройка хуков pre-commit

uv pip install pre-commit
pre-commit install

Готово! Проявите любопытство — изучите кодовую базу, поэкспериментируйте с примерами и посмотрите, как все части сочетаются друг с другом. Когда будете готовы, выберите issue на доске Good First Issues или читайте дальше о полном процессе участия.


Рабочий процесс участия

Процесс участия зависит от размера и масштаба вашего изменения. Даже когда это не обязательно, открыть issue — отличный способ начать обсуждение с сопровождающими Dynamo до того, как тратить время на PR.

РазмерИзмененных строкПримерЧто нужно
XS1–10Исправление опечатки, правка конфигурацииОтправьте PR напрямую
S10–100Небольшое исправление ошибки, улучшение документации, точечный рефакторингОтправьте PR напрямую
M100–200Добавление функции, умеренный рефакторингСначала откройте issue
L200–500Функция в нескольких файлах, новый компонентСначала откройте issue
XL500–1000Крупная функция, изменение между компонентамиСначала откройте issue
XXL1000+Изменение архитектурыТребует DEP

Небольшие изменения (менее 100 строк): Отправляйте PR напрямую -- issue не нужен. Сюда входят опечатки, простые исправления и форматирование. Если ваш PR закрывает уже одобренное issue, свяжите его через "Fixes #123".

Более крупные изменения (≥100 строк): Сначала откройте issue Contribution Request и дождитесь метки approved-for-pr перед отправкой PR.

Изменения архитектуры: Изменения, затрагивающие несколько компонентов, добавляющие или меняющие публичные API, меняющие архитектуру communication plane или влияющие на контракты интеграции backend, требуют Dynamo Enhancement Proposal (DEP). Откройте DEP в репозитории ai-dynamo/enhancements до начала реализации.

Отправка Pull Request

  1. Создайте GitHub Issue (если требуется) — откройте Contribution Request и опишите, что вы решаете, предлагаемый подход, оценку размера PR и затронутые файлы.

  2. Получите одобрение — дождитесь, пока сопровождающие рассмотрят запрос и назначат метку approved-for-pr.

  3. Отправьте Pull Requestоткройте PR, который ссылается на issue с помощью GitHub-ключевых слов (например, "Fixes #123").

  4. Отработайте ревью Code Rabbit — ответьте на автоматические замечания Code Rabbit, включая мелкие придирки.

  5. Запустите CI-тесты — для внешних участников сопровождающий должен оставить комментарий /ok to test COMMIT-ID, чтобы запустить полный CI. COMMIT-ID — это короткий SHA вашего последнего коммита. Исправьте все падающие тесты до запроса человеческого ревью.

  6. Запросите ревью — добавьте в reviewers человека, который одобрил ваше issue. Проверьте CODEOWNERS, чтобы понять, какие одобряющие нужны для измененных файлов.

Код, сгенерированный ИИ: Хотя мы поощряем использование AI-инструментов, вы должны полностью понимать каждое изменение в своем PR. Неспособность объяснить отправленный код приведет к отклонению.

Именование веток

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

yourname/fix-description

Примеры:

jsmith/fix-router-timeout
jsmith/add-lora-support

Стиль кода и качество

Сопровождающие оценивают качество вклада по стилю кода, покрытию тестами, соответствию архитектуре и оперативности реакции на ревью. Последовательный, качественный вклад — основа доверия к проекту.

Pre-commit hooks

Все PR проверяются через pre-commit hooks. После установки pre-commit запустите проверки локально:

pre-commit run --all-files

Правила сообщений коммитов

Используйте префиксы conventional commit:

ПрефиксДля чего использовать
feat:Новые функции
fix:Исправления ошибок
docs:Изменения в документации
refactor:Рефакторинг кода (без изменения поведения)
test:Добавление или обновление тестов
chore:Обслуживание, обновления зависимостей
ci:Изменения CI/CD
perf:Улучшения производительности

Примеры:

feat(router): add weighted load balancing
fix(frontend): resolve streaming timeout on large responses
docs: update quickstart for macOS users
test(planner): add unit tests for scaling policy

Правила по языкам

ЯзыкРуководство по стилюФорматтер
PythonPEP 8black, ruff
RustRust API Guidelinescargo fmt, cargo clippy
GoEffective Gogofmt

Тестирование

Запустите тестовый набор перед отправкой PR:

# Запустить все тесты
pytest tests/

# Запустить только unit-тесты
pytest -m unit tests/

# Запустить конкретный файл тестов
pytest -s -v tests/test_example.py

Для Rust-компонентов:

cargo test

Для Kubernetes operator (Go):

cd deploy/operator
go test ./... -v

Общие рекомендации

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

Локальный запуск GitHub Actions

Используйте act для локального запуска workflows:

act -j pre-merge-rust

Или используйте расширение VS Code GitHub Local Actions.


Чего ожидать

Метки статуса

СтатусЧто означает
needs-triageМы рассматриваем ваше issue
needs-infoНам нужны дополнительные подробности
approved-for-prГотово к реализации — отправляйте PR
in-progressКто-то уже работает над этим
blockedОжидание внешней зависимости

Сроки ответа

Мы стремимся к следующему:

  • Отвечать на новые issue в течение нескольких рабочих дней
  • Триажить высокоприоритетные issue в течение недели

Issue без активности в течение 30 дней могут быть автоматически закрыты (их можно открыть снова).

Процесс ревью

После отправки PR и выполнения шагов из раздела Отправка Pull Request:

  1. Ревьюер оставит замечания -- пожалуйста, отвечайте на все комментарии в разумные сроки
  2. Если запрошены изменения, внесите их и напомните ревьюеру о повторном просмотре
  3. Если ваш PR не был просмотрен в течение 7 дней, можно напомнить ревьюеру или оставить комментарий

Good First Issues

Issue с меткой good-first-issue рассчитаны на новых участников. Для них мы даем дополнительное руководство -- ищите в описании четкие критерии приемки и предлагаемый подход.


DCO & Licensing

Developer Certificate of Origin

Dynamo требует, чтобы все contributions были подписаны через Developer Certificate of Origin (DCO). Это подтверждает, что у вас есть право отправить свой вклад под лицензией Apache 2.0 проекта.

Каждый коммит должен содержать строку sign-off:

Signed-off-by: Jane Smith <jane.smith@email.com>

Добавьте это автоматически с флагом -s:

git commit -s -m "fix: your descriptive message"

Требования:

  • Используйте свое настоящее имя (без псевдонимов и анонимных вкладов)
  • user.name и user.email должны быть настроены в git

Проверка DCO не прошла? См. наше руководство по устранению неполадок DCO с пошаговыми инструкциями по исправлению.

Лицензия

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


Кодекс поведения

Мы стремимся поддерживать дружелюбную и инклюзивную среду. Ожидается, что все участники будут соблюдать наш Кодекс поведения.


Безопасность

Если вы обнаружили уязвимость безопасности, следуйте инструкциям из нашей Security Policy. Не открывайте публичный issue для уязвимостей безопасности.


Как получить помощь

Спасибо за вклад в Dynamo!