🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvusへの貢献の仕方:開発者のためのクイックスタート

Milvusへの貢献の仕方:開発者のためのクイックスタート

  • Engineering
December 01, 2024
Shaoting Huang

Milvusは、高次元のベクトルデータを管理するために設計されたオープンソースのベクトルデータベースです。インテリジェントな検索エンジン、推薦システム、または検索拡張世代(RAG)のような次世代AIソリューションを構築しているかどうかにかかわらず、Milvusはあなたの指先で使える強力なツールです。

しかし、Milvusを真に前進させるのは、その高度な技術だけではありません。オープンソースプロジェクトであるMilvusは、皆様のような開発者の方々の貢献により繁栄し、進化しています。コミュニティからのバグフィックス、機能追加、パフォーマンス向上のたびに、Milvusはより速く、よりスケーラブルで、より信頼性の高いものとなっています。

Milvusは、オープンソースに情熱を持っている方、勉強熱心な方、AIに永続的な影響を与えたいと考えている方にとって、貢献するのに最適な場所です。このガイドでは、開発環境のセットアップから最初のプルリクエストの提出までのプロセスを説明します。また、あなたが直面するかもしれない一般的な課題を強調し、それらを克服するための解決策を提供します。

飛び込む準備はできましたか?一緒に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の構築

Dockerを使用する場合、ビルド済みのコンテナでコマンドを実行する方法と、開発用コンテナを立ち上げてより実践的なアプローチを行う方法の2つがあります。

# 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:サイドバンドパケット読み込み中の予期せぬ切断

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  

Conan: 認識できない引数またはコマンドが見つからない

問題 Unrecognized arguments: --install-folder conan が表示される場合、互換性のない Conan のバージョンを使っている可能性があります。

修正Conan 1.61 にダウングレードする:

pip install conan==1.61  

問題 Conan command not found が表示される場合、Pythonの環境が正しくセットアップされていない可能性があります。

修正: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 Issuesページで答えを見つけたり、助けを求めたりすることができます。

C++とGoの統合のためのVS Codeの設定

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は3つのデプロイモード(Lite、StandaloneDistributed)をサポートしています

  • Milvus LiteはPythonライブラリであり、Milvusの超軽量バージョンです。Pythonやノートブック環境でのラピッドプロトタイピングや小規模なローカル実験に最適です。

  • Milvus StandaloneはMilvusのシングルノードデプロイメントオプションで、クライアントサーバーモデルを使用します。MilvusはMySQLに相当し、Milvus LiteはSQLiteに相当します。

  • Milvus DistributedはMilvusの分散モードで、大規模なベクターデータベースシステムやベクターデータプラットフォームを構築する企業ユーザに最適です。

これらの導入はすべて3つのコアコンポーネントに依存しています:

  • Milvus:ベクトルデータベースエンジン。

  • Etcd:Milvusの内部メタデータを管理するメタデータエンジン。

  • MinIO:データの永続性を保証するストレージエンジン。

MilvusをDistributedモードで実行する場合、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 Distributed (旧Milvus Cluster)

より大きなデータセットと高いトラフィックに対して、Distributedモードは水平スケーラビリティを提供します。複数のMilvusインスタンスを1つのまとまったシステムに統合します。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またはスタンドアロンモードから始めて、Milvusの機能を実感してください。

コードの提出

おめでとうございます!すべての単体テストとE2Eテストをクリア(または必要に応じてデバッグと再コンパイル)しました。最初のビルドには時間がかかるかもしれませんが、今後のビルドはもっと速くなります。これで、Milvusに貢献する準備が整いました!

MilvusへのPRは、関連するissueと紐付ける必要があります。ここではその方法を説明します:

  • 既存の課題をチェックする Milvusのissue trackerに目を通し、あなたの変更に関連するissueが既に存在しないか確認してください。

  • 新しい課題を作成する:関連する課題が存在しない場合、新しい課題を作成し、あなたが解決しようとしている問題や追加しようとしている機能を説明してください。

コードを投稿する

  1. リポジトリをフォークする:GitHubアカウントに Milvusリポジトリをフォークしてください。

  2. ブランチを作成します:ローカルでフォークをクローンし、新しいブランチを作成します。

  3. Signed-off-by署名付きでコミットします:オープンソースライセンスに準拠するため、コミットにSigned-off-by 署名が含まれていることを確認します:

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

このステップでは、あなたの貢献がDeveloper Certificate of Origin (DCO) に沿っていることを証明します。

役立つリソース

詳細なステップとベストプラクティスについては、 Milvusコントリビューションガイドをご覧ください。

貢献の機会

Milvusの立ち上げと運用が完了しました!デプロイメントモードを検討し、テストを実行し、コードを掘り下げたことでしょう。Milvusに貢献し、AIと非構造化データの未来を形作るお手伝いをしましょう。

あなたのスキルに関わらず、Milvusコミュニティにはあなたの居場所があります!複雑な課題を解決するのが好きな開発者であれ、きれいなドキュメントやエンジニアリングブログを書くのが好きな技術ライターであれ、デプロイメントを改善したいKubernetes愛好家であれ、あなたが影響を与える方法があります。

以下の募集をご覧いただき、あなたにぴったりの仕事を見つけてください。すべての貢献はMilvusを前進させるのに役立ちます。あなたの次のプルリクエストが、次のイノベーションの波となるかもしれません。さあ、何を待っていますか?さあ、始めましょう!🚀

プロジェクト対象ガイドライン
milvus,milvus-sdk-go囲碁開発者/
milvusknowhereCPP開発者/
pymilvusmilvus-sdk-nodemilvus-sdk-java他の言語に興味のある開発者PyMilvusへの貢献
milvus-helmKubernetes愛好家/
milvus-docsmilvus-io/コミュニティ/ブログ技術ライターmilvusドキュメントへの貢献
milvus-insightウェブ開発者/

最後に

Milvusは、Python(PyMilvus)、JavaGoNode.jsといった様々なSDKを提供しており、簡単に開発を始めることができます。Milvusに貢献することはコードだけではありません-それは活気に満ちた革新的なコミュニティに参加することです。

Milvus開発者コミュニティへようこそ!私たちは、皆さんがどのようなものを創り上げるのか待ちきれません。

さらに読む

Like the article? Spread the word

続けて読む