Milvus에 기여하는 방법: 개발자를 위한 빠른 시작하기
Milvus는 고차원 벡터 데이터를 관리하도록 설계된 오픈 소스 벡터 데이터베이스입니다. 지능형 검색 엔진, 추천 시스템 또는 검색 증강 세대(RAG)와 같은 차세대 AI 솔루션을 구축할 때 Milvus는 손끝에서 사용할 수 있는 강력한 도구입니다.
하지만 Milvus를 진정으로 발전시키는 것은 첨단 기술뿐만 아니라 그 뒤에 있는 활기차고 열정적인 개발자 커뮤니티입니다. 오픈 소스 프로젝트인 Milvus는 여러분과 같은 개발자의 기여 덕분에 번창하고 발전하고 있습니다. 커뮤니티의 모든 버그 수정, 기능 추가, 성능 향상은 Milvus의 속도와 확장성, 안정성을 더욱 향상시킵니다.
오픈소스에 대한 열정이 있거나, 배우고자 하는 열망이 있거나, AI에 지속적인 영향을 미치고 싶다면 Milvus는 기여하기에 완벽한 곳입니다. 이 가이드는 개발 환경 설정부터 첫 풀 리퀘스트 제출까지 모든 과정을 안내합니다. 또한 직면할 수 있는 일반적인 문제를 강조하고 이를 극복하기 위한 솔루션도 제공합니다.
시작할 준비가 되셨나요? 함께 Milvus를 더욱 개선해 보세요!
Milvus 개발 환경 설정하기
가장 먼저 해야 할 일은 개발 환경을 설정하는 것입니다. Milvus를 로컬 컴퓨터에 설치하거나 Docker를 사용할 수 있습니다. 두 방법 모두 간단하지만 모든 것을 실행하려면 몇 가지 서드파티 종속성을 설치해야 합니다.
로컬에서 Milvus 구축하기
처음부터 무언가를 구축하는 것을 좋아한다면 로컬 머신에서 Milvus를 쉽게 구축할 수 있습니다. Milvus는 install_deps.sh
스크립트에 모든 종속성을 번들링하여 쉽게 만들 수 있습니다. 다음은 빠른 설정입니다:
# Install third-party dependencies.
$ cd milvus/
$ ./scripts/install_deps.sh
# Compile Milvus.
$ make
Docker로 Milvus 빌드하기
미리 빌드된 컨테이너에서 명령을 실행하거나 개발 컨테이너를 스핀업하여 보다 실무적인 접근 방식을 사용하는 두 가지 방법이 있습니다.
# 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 칩을 사용하는 경우 컴파일 과정에서 몇 가지 문제가 발생할 수 있습니다. 하지만 걱정하지 마세요. 가장 일반적인 문제를 해결하는 데 도움이 되는 가이드가 있으니까요.
그림: OS 구성
전체 설정 가이드는 공식 Milvus 개발 가이드에서 확인하세요.
일반적인 문제와 해결 방법
때때로 Milvus 개발 환경 설정이 계획대로 원활하게 진행되지 않을 수 있습니다. 걱정하지 마세요. 일반적인 문제와 이를 빠르게 해결하는 방법을 간략하게 정리해 보았습니다.
홈브루: 사이드밴드 패킷을 읽는 동안 예기치 않은 연결 해제
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
Homebrew를 설치한 후에도 Brew: command not found
오류가 발생하면 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
코난: 인식할 수 없는 인수 또는 명령을 찾을 수 없음
문제: Unrecognized arguments: --install-folder conan
이 표시되면 호환되지 않는 코난 버전을 사용하고 있을 가능성이 높습니다.
수정: 코난 1.61로 다운그레이드하세요:
pip install conan==1.61
문제: Conan command not found
이 표시되면 Python 환경이 제대로 설정되지 않은 것입니다.
수정: 파이썬의 bin 디렉터리를 PATH
에 추가하세요:
export PATH="/path/to/python/bin:$PATH"
LLVM에 추가하세요: 선언되지 않은 식별자 '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 이슈 페이지에서 답변을 찾거나 도움을 요청하세요.
C++와 Go 통합을 위한 VS 코드 구성하기
VS Code에서 C++와 Go를 함께 사용하는 것은 생각보다 쉽습니다. 올바른 설정으로 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를 빌드하고 테스트하는 데 적합합니다.
전문가 팁
설정 후 빠른 테스트 빌드를 실행하여 모든 것이 제대로 작동하는지 확인하세요. 뭔가 이상하다고 느껴지면 경로와 VS Code의 Go 확장 버전을 다시 확인하세요.
Milvus 배포
Milvus는 라이트, 독립형, 배포의 세 가지 배포 모드를지원합니다 .
MilvusLite는 Python 라이브러리이자 초경량 버전의 Milvus입니다. Python 또는 노트북 환경에서의 신속한 프로토타이핑과 소규모 로컬 실험에 적합합니다.
MilvusStandalone은 클라이언트-서버 모델을 사용하는 Milvus의 단일 노드 배포 옵션입니다. Milvus는 MySQL에 해당하며, Milvus Lite는 SQLite와 유사합니다.
MilvusDistributed는 대규모 벡터 데이터베이스 시스템이나 벡터 데이터 플랫폼을 구축하는 기업 사용자에게 이상적인 Milvus의 분산 모드입니다.
이 모든 배포는 세 가지 핵심 구성 요소에 의존합니다:
Milvus: 모든 작업을 구동하는 벡터 데이터베이스 엔진.
Etcd: Milvus의 내부 메타데이터를 관리하는 메타데이터 엔진.
MinIO: 데이터 지속성을 보장하는 스토리지 엔진.
분산 모드에서 실행할 경우, Milvus는 Pub/Sub 메커니즘을 사용하여 분산 메시지 처리를 위한 Pulsar를 통합하여 처리량이 많은 환경에 맞게 확장할 수 있습니다.
Milvus 독립형
스탠드얼론 모드는 단일 인스턴스 설정에 맞게 조정되어 테스트 및 소규모 애플리케이션에 적합합니다. 시작하는 방법은 다음과 같습니다:
# 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 분산(이전의 Milvus 클러스터)
대규모 데이터 세트와 트래픽이 많은 경우, 분산 모드는 수평적 확장성을 제공합니다. 이 모드는 여러 Milvus 인스턴스를 하나의 응집력 있는 시스템으로 결합합니다. Kubernetes에서 실행되며 전체 Milvus 스택을 관리하는 Milvus Operator를 사용하면 배포가 쉬워집니다.
단계별 안내가 필요하신가요? 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에 대한 모든 PR은 관련 이슈에 연결되어야 합니다. 이를 처리하는 방법은 다음과 같습니다:
기존 이슈를 확인합니다: Milvus 이슈 트래커를 살펴보고 변경 사항과 관련된 이슈가 이미 있는지 확인하세요.
새 이슈를 만듭니다: 관련 이슈가 없는 경우 새 이슈를 열고 해결 중인 문제 또는 추가하려는 기능을 설명하세요.
코드 제출하기
리포지토리 포크: Milvus 리포지토리를 GitHub 계정으로 포크하여 시작하세요.
브랜치 만들기: 로컬에서 포크를 복제하고 변경 사항을 위한 새 브랜치를 만듭니다.
서명된 서명으로 커밋하기: 커밋에
Signed-off-by
서명이 포함되어 오픈 소스 라이선스를 준수하는지 확인하세요:
git commit -m "Commit of your change" -s
이 단계는 여러분의 기여가 개발자 출처 인증서(DCO)에 부합함을 인증합니다.
유용한 리소스
자세한 단계와 모범 사례는 Milvus 기여 가이드를 참조하세요.
기여 기회
Milvus를 설치 및 실행하신 것을 축하드립니다! 배포 모드를 살펴보고, 테스트를 실행하고, 코드를 자세히 살펴보기도 하셨을 것입니다. 이제 레벨 업을 할 차례입니다. Milvus에 기여하여 AI와 비정형 데이터의 미래를 만드는 데 도움을 주세요.
Milvus 커뮤니티에는 여러분의 스킬셋에 상관없이 여러분을 위한 자리가 있습니다! 복잡한 문제를 해결하는 것을 좋아하는 개발자든, 깔끔한 문서나 엔지니어링 블로그를 작성하는 것을 좋아하는 기술 작가든, 배포를 개선하고자 하는 Kubernetes 애호가든, 여러분이 영향력을 발휘할 수 있는 방법이 있습니다.
아래의 기회를 살펴보고 자신에게 딱 맞는 기회를 찾아보세요. 모든 기여는 Milvus를 발전시키는 데 도움이 되며, 누가 알겠어요? 여러분의 다음 풀리퀘스트가 다음 혁신의 물결에 힘을 실어줄지도 모릅니다. 무엇을 망설이고 계신가요? 지금 바로 시작하세요! 🚀
프로젝트 | 적합한 대상 | 가이드라인 |
---|---|---|
MILVUS, MILVUS-SDK-GO | Go 개발자 | / |
milvus, knowhere | CPP 개발자 | / |
pymilvus, milvus-sdk-node, milvus-sdk-java | 다른 언어에 관심이 있는 개발자 | 파이밀버스에 기여하기 |
milvus-helm | 쿠버네티스 애호가 | / |
밀버스-독스, 밀버스-io/커뮤니티/블로그 | 기술 작가 | 밀버스 문서에 기여하기 |
밀버스-인사이트 | 웹 개발자 | / |
마지막 한마디
Milvus는 간편하게 빌드를 시작할 수 있는 Python(PyMilvus), Java, Go, Node.js등 다양한 SDK를 제공합니다. Milvus에 기여하는 것은 단순히 코드를 제공하는 것뿐만 아니라 활기차고 혁신적인 커뮤니티에 참여하는 것입니다.
Milvus 개발자 커뮤니티에 오신 것을 환영하며 즐거운 코딩을 즐겨보세요! 여러분들이 어떤 결과물을 만들어낼지 기대됩니다.
더 읽어보기
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word