🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Как внести вклад в Milvus: краткое руководство для разработчиков

Как внести вклад в Milvus: краткое руководство для разработчиков

  • Engineering
December 01, 2024
Shaoting Huang

Milvus - это векторная база данных с открытым исходным кодом, предназначенная для управления высокоразмерными векторными данными. Если вы создаете интеллектуальные поисковые системы, системы рекомендаций или решения нового поколения в области искусственного интеллекта, такие как поиск с расширенной генерацией(RAG), Milvus - это мощный инструмент в вашем распоряжении.

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

Если вы неравнодушны к открытому коду, хотите учиться или оказать значительное влияние на ИИ, Milvus - идеальное место для вашего вклада. Это руководство проведет вас через весь процесс - от создания среды разработки до отправки первого запроса на внесение изменений. Мы также расскажем о типичных проблемах, с которыми вы можете столкнуться, и предложим решения для их преодоления.

Готовы погрузиться в работу? Давайте вместе сделаем Milvus еще лучше!

Настройка среды разработки Milvus

Прежде всего, необходимо настроить среду разработки. Вы можете установить Milvus на локальную машину или использовать Docker - оба способа просты, но вам также потребуется установить несколько сторонних зависимостей, чтобы все заработало.

Сборка Milvus на локальной машине

Если вы любите создавать вещи с нуля, то сборка Milvus на локальной машине не составит труда. Milvus упрощает задачу, собирая все зависимости в скрипт install_deps.sh. Вот быстрая настройка:

# Install third-party dependencies.
$ cd milvus/
$ ./scripts/install_deps.sh

# Compile Milvus.
$ make

Сборка Milvus с помощью Docker

Если вы предпочитаете Docker, есть два варианта: вы можете запускать команды в предварительно собранном контейнере или создать контейнер для разработчиков, чтобы использовать более практичный подход.

# Option 1: Run commands in a pre-built Docker container  
build/builder.sh make  

# Option 2: Spin up a dev container  
./scripts/devcontainer.sh up  
docker-compose -f docker-compose-devcontainer.yml ps  
docker exec -ti milvus-builder-1 bash  
make milvus  

Примечания к платформе: Если вы работаете в Linux, то все в порядке - проблемы с компиляцией возникают довольно редко. Однако пользователи Mac, особенно с чипами M1, могут столкнуться с некоторыми трудностями на этом пути. Не волнуйтесь - у нас есть руководство, которое поможет вам справиться с наиболее распространенными проблемами.

Рисунок: Конфигурация ОС

Полное руководство по настройке можно найти в официальном руководстве по разработке Milvus.

Общие проблемы и способы их решения

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

Homebrew: Неожиданное отключение при чтении пакета Sideband

Если вы используете Homebrew и видите ошибку, подобную этой:

==> Tapping homebrew/core
remote: Enumerating objects: 1107077, done.
remote: Counting objects: 100% (228/228), done.
remote: Compressing objects: 100% (157/157), done.
error: 545 bytes of body are still expected.44 MiB | 341.00 KiB/s
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: index-pack failed
Failed during: git fetch --force origin refs/heads/master:refs/remotes/origin/master
myuser~ %

Исправление: Увеличьте размер http.postBuffer:

git config --global http.postBuffer 1M

Если вы также столкнулись с Brew: command not found после установки Homebrew, возможно, вам нужно настроить конфигурацию пользователя Git:

git config --global user.email xxxgit config --global user.name xxx

Docker: ошибка при получении учетных данных

При работе с Docker вы можете увидеть следующее:

error getting credentials - err: exit status 1, out: ``  

Исправить: Откройте~/.docker/config.json и удалите поле credsStore.

Python: Нет модуля с именем 'imp'

Если Python выдает эту ошибку, это связано с тем, что в Python 3.12 удален модуль imp, который все еще используется в некоторых старых зависимостях.

Исправьте: Перейдите на Python 3.11:

brew install python@3.11  

Conan: Нераспознанные аргументы или команда не найдена

Проблема: Если вы видите Unrecognized arguments: --install-folder conan, то, скорее всего, вы используете несовместимую версию Conan.

Исправить: Перейдите на Conan 1.61:

pip install conan==1.61  

Проблема: Если вы видите Conan command not found, это означает, что ваше окружение Python не настроено должным образом.

Исправление: Добавьте каталог bin Python в ваш PATH:

export PATH="/path/to/python/bin:$PATH"

LLVM: Use of Undeclared Identifier 'kSecFormatOpenSSL'

Эта ошибка обычно означает, что ваши зависимости LLVM устарели.

Исправить: Переустановите LLVM 15 и обновите переменные окружения:

brew reinstall llvm@15
export LDFLAGS="-L/opt/homebrew/opt/llvm@15/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm@15/include"

Советы профессионала

  • Всегда перепроверяйте версии инструментов и зависимостей.

  • Если что-то не работает, то на странице Milvus GitHub Issues можно найти ответы или попросить помощи.

Настройка VS Code для интеграции C++ и Go

Обеспечить совместную работу C++ и Go в VS Code проще, чем кажется. При правильной настройке вы сможете упростить процесс разработки для Milvus. Просто измените свой файл user.settings с помощью приведенной ниже конфигурации:

{
   "go.toolsEnvVars": {
       "PKG_CONFIG_PATH": "/Users/zilliz/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.testEnvVars": {
       "PKG_CONFIG_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.buildFlags": [
       "-ldflags=-r /Users/zilliz/workspace/milvus/internal/core/output/lib"
   ],
   "terminal.integrated.env.linux": {
       "PKG_CONFIG_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.useLanguageServer": true,
   "gopls": {
       "formatting.gofumpt": true
   },
   "go.formatTool": "gofumpt",
   "go.lintTool": "golangci-lint",
   "go.testTags": "dynamic",
   "go.testTimeout": "10m"
}

Вот что делает эта конфигурация:

  • Переменные окружения: Устанавливает пути для PKG_CONFIG_PATH, LD_LIBRARY_PATH и RPATH, которые важны для поиска библиотек во время сборки и тестирования.

  • Интеграция инструментов Go: Включает языковой сервер Go (gopls) и настраивает такие инструменты, как gofumpt для форматирования и golangci-lint для линтинга.

  • Настройка тестирования: Добавляет testTags и увеличивает таймаут выполнения тестов до 10 минут.

После добавления эта настройка обеспечивает бесшовную интеграцию между рабочими процессами C++ и Go. Она идеально подходит для сборки и тестирования Milvus без постоянной настройки окружения.

Профессиональный совет

После настройки запустите быструю тестовую сборку, чтобы убедиться, что все работает. Если что-то не так, перепроверьте пути и версию расширения Go в VS Code.

Развертывание Milvus

Milvus поддерживает три режима развертывания - Lite, Standalone и Distributed.

  • Milvus Lite - это библиотека Python и сверхлегкая версия Milvus. Она идеально подходит для быстрого создания прототипов на Python или в среде ноутбука, а также для небольших локальных экспериментов.

  • Milvus Standalone - это вариант развертывания Milvus на одном узле, использующий модель клиент-сервер. Это Milvus-эквивалент MySQL, а Milvus Lite - SQLite.

  • Milvus Distributed - это распределенный режим Milvus, который идеально подходит для корпоративных пользователей, создающих крупномасштабные системы векторных баз данных или платформы векторных данных.

Все эти развертывания основаны на трех ключевых компонентах:

  • Milvus: движок векторной базы данных, который управляет всеми операциями.

  • Etcd: Механизм метаданных, управляющий внутренними метаданными Milvus.

  • MinIO: механизм хранения, обеспечивающий сохранность данных.

При работе в режиме Distributed в Milvus также встроен Pulsar для распределенной обработки сообщений с помощью механизма Pub/Sub, что делает его масштабируемым для сред с высокой пропускной способностью.

Milvus Standalone

Режим Standalone предназначен для установки одного экземпляра, что делает его идеальным для тестирования и небольших приложений. Вот как начать работу:

# Deploy Milvus Standalone  
sudo docker-compose -f deployments/docker/dev/docker-compose.yml up -d
# Start the standalone service  
bash ./scripts/start_standalone.sh

Milvus Distributed (ранее известный как Milvus Cluster)

Для больших наборов данных и высокого трафика режим Distributed предлагает горизонтальную масштабируемость. Он объединяет несколько экземпляров Milvus в единую целостную систему. Развертывание упрощается с помощью Milvus Operator, который работает на Kubernetes и управляет всем стеком Milvus за вас.

Хотите получить пошаговое руководство? Ознакомьтесь с руководством по установке Milvus.

Выполнение сквозных тестов (E2E)

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

# Navigate to the test directory  
cd tests/python_client  

# Install dependencies  
pip install -r requirements.txt  

# Run E2E tests  
pytest --tags=L0 -n auto  

Подробные инструкции и советы по устранению неполадок см. в руководстве по разработке Milvus.

Совет профессионала

Если вы новичок в Milvus, начните с Milvus Lite или автономного режима, чтобы прочувствовать его возможности, а затем перейдите в распределенный режим для рабочих нагрузок производственного уровня.

Отправка вашего кода

Поздравляем! Вы прошли все модульные и E2E-тесты (или отладили и перекомпилировали при необходимости). Хотя первая сборка может занять некоторое время, последующие будут намного быстрее, так что не стоит беспокоиться. Когда все пройдено, вы готовы отправить свои изменения и внести свой вклад в Milvus!

Каждый PR в Milvus должен быть привязан к соответствующему выпуску. Вот как это сделать:

  • Проверьте наличие существующих проблем: Просмотрите трекер выпусков Milvus, чтобы узнать, есть ли уже выпуск, связанный с вашими изменениями.

  • Создайте новую проблему: Если соответствующей проблемы не существует, откройте новую и объясните, какую проблему вы решаете или какую функцию добавляете.

Отправка вашего кода

  1. Форк репозитория: Начните с форка репозитория Milvus на свой аккаунт GitHub.

  2. Создайте ветку: Клонируйте форк локально и создайте новую ветку для своих изменений.

  3. Сделайте коммит с подписью: Убедитесь, что ваши коммиты содержат подпись Signed-off-by, чтобы соответствовать лицензированию с открытым исходным кодом:

git commit -m "Commit of your change" -s

Этот шаг подтверждает, что ваш вклад соответствует Сертификату происхождения разработчика (DCO).

Полезные ресурсы

Для получения подробной информации о шагах и лучших практиках ознакомьтесь с руководством по внесению вклада в Milvus.

Возможности для внесения вклада

Поздравляем - вы запустили Milvus! Вы изучили его режимы развертывания, провели тесты и, возможно, даже покопались в коде. Теперь пришло время повысить свой уровень: внести свой вклад в Milvus и помочь сформировать будущее ИИ и неструктурированных данных.

Независимо от ваших навыков, в сообществе Milvus найдется место и для вас! Будь вы разработчиком, которому нравится решать сложные задачи, техническим писателем, которому нравится писать чистую документацию или инженерные блоги, или энтузиастом Kubernetes, стремящимся улучшить развертывание, - для вас найдется способ внести свой вклад.

Ознакомьтесь с представленными ниже возможностями и найдите свой идеальный вариант. Каждый вклад помогает Milvus двигаться вперед - и кто знает? Возможно, ваш следующий запрос на исправление приведет в движение следующую волну инноваций. Итак, чего же вы ждете? Давайте начнем! 🚀

ПроектыПодходит дляРуководство
milvus, milvus-sdk-goРазработчики Go/
milvus, knowhereРазработчики CPP/
pymilvus, milvus-sdk-node, milvus-sdk-javaРазработчики, интересующиеся другими языкамиВклад в PyMilvus
milvus-helmЭнтузиасты Kubernetes/
Milvus-docs, milvus-io/community/blogТехнические писателиВклад в документацию milvus
milvus-insightВеб-разработчики/

Заключительное слово

Milvus предлагает различные SDK - на Питоне (PyMilvus), Java, Go и Node.js, - которые позволяют легко начать разработку. Вклад в Milvus - это не просто код, это присоединение к энергичному и инновационному сообществу.

Добро пожаловать в сообщество разработчиков Milvus и удачного кодинга! Нам не терпится увидеть, что вы создадите.

Читать далее

Like the article? Spread the word

Продолжить чтение