Commit Graph

43 Commits

Author SHA1 Message Date
Francis
b138ae742d
fix: docs for python3 and conan (#32656)
Conan 1.x is broken for Python 3.12, since imp is deprecated in favour
of importlib, removed in 3.12.

https://github.com/milvus-io/milvus/issues/32655

Signed-off-by: light-city <455954986@qq.com>
2024-05-28 14:35:42 +08:00
shaoting-huang
de7901121f
Upgrade go from 1.20 to 1.21 (#33047)
Signed-off-by: shaoting-huang [shaoting-huang@zilliz.com]

issue: https://github.com/milvus-io/milvus/issues/32982

# Background
Go 1.21 introduces several improvements and changes over Go 1.20, which
is quite stable now. According to
[Go 1.21 Release Notes](https://tip.golang.org/doc/go1.21), the big
difference of Go 1.21 is enabling Profile-Guided Optimization by
default, which can improve performance by around 2-14%. Here are the
summary steps of PGO:
1. Build Initial Binary (Without PGO)
2. Deploying the Production Environment
3. Run the program and collect Performance Analysis Data (CPU pprof)
4. Analyze the Collected Data and Select a Performance Profile for PGO
5. Place the Performance Analysis File in the Main Package Directory and
Name It default.pgo
6. go build Detects the default.pgo File and Enables PGO
7. Build and Release the Updated Binary (With PGO)
8. Iterate and Repeat the Above Steps
<img width="657" alt="Screenshot 2024-05-14 at 15 57 01"
src="https://github.com/milvus-io/milvus/assets/167743503/b08d4300-0be1-44dc-801f-ce681dabc581">

# What does this PR do
There are three experiments, search benchmark by Zilliz test platform,
search benchmark by open-source
[VectorDBBench](https://github.com/zilliztech/VectorDBBench?tab=readme-ov-file),
and search benchmark with PGO. We do both search benchmarks by Zilliz
test platform and by VectorDBBench to reduce reliance on a single
experimental result. Besides, we validate the performance enhancement
with PGO.

## Search Benchmark Report by Zilliz Test Platform
An upgrade to Go 1.21 was conducted on a Milvus Standalone server,
equipped with 16 CPUs and 64GB of memory. The search performance was
evaluated using a 1 million entry local dataset with an L2 metric type
in a 768-dimensional space. The system was tested for concurrent
searches with 50 concurrent tasks for 1 hour, each with a 20-second
interval. The reason for using one server rather than two servers to
compare is to guarantee the same data source and same segment state
after compaction.

Test Sequence:
1. Go 1.20 Initial Run: Insert data, build index, load index, and
search.
2. Go 1.20 Rebuild: Rebuild the index with the same dataset, load index,
and search.
3. Go 1.21 Load: Upload to Go 1.21 within the server. Then load the
index from the second run, and search.
4. Go 1.21 Rebuild: Rebuild the index with the same dataset, load index,
and search.

Search Metrics: 
| Metric | Go 1.20 | Go 1.20 Rebuild Index | Go 1.21 | Go 1.21 Rebuild
Index |

|----------------------------|------------------|-----------------|------------------|-----------------|
| `search requests` | 10,942,683 | 16,131,726 | 16,200,887 | 16,331,052
|
| `search fails` | 0 | 0 | 0 | 0 |
| `search RT_avg` (ms) | 16.44 | 11.15 | 11.11 | 11.02 |
| `search RT_min` (ms) | 1.30 | 1.28 | 1.31 | 1.26 |
| `search RT_max` (ms) | 446.61 | 233.22 | 235.90 | 147.93 |
| `search TP50` (ms) | 11.74 | 10.46 | 10.43 | 10.35 |
| `search TP99` (ms) | 92.30 | 25.76 | 25.36 | 25.23 |
| `search RPS` | 3,039 | 4,481 | 4,500 | 4,536 |

### Key Findings
The benchmark tests reveal that the index build time with Go 1.20 at
340.39 ms and Go 1.21 at 337.60 ms demonstrated negligible performance
variance in index construction. However, Go 1.21 offers slightly better
performance in search operations compared to Go 1.20, with improvements
in handling concurrent tasks and reducing response times.

## Search Benchmark Report By VectorDb Bench
Follow
[VectorDBBench](https://github.com/zilliztech/VectorDBBench?tab=readme-ov-file)
to create a VectorDb Bench test for Go 1.20 and Go 1.21. We test the
search performance with Go 1.20 and Go 1.21 (without PGO) on the Milvus
Standalone system. The tests were conducted using the Cohere dataset
with 1 million entries in a 768-dimensional space, utilizing the COSINE
metric type.

Search Metrics: 
Metric | Go 1.20 | Go 1.21 without PGO
-- | -- | --
Load Duration (seconds) | 1195.95 | 976.37
Queries Per Second (QPS) | 841.62 | 875.89
99th Percentile Serial Latency (seconds) | 0.0047 | 0.0076
Recall | 0.9487 | 0.9489

### Key Findings
Go 1.21 indicates faster index loading times and larger search QPS
handling.

## PGO Performance Test
Milvus has already added
[net/http/pprof](https://pkg.go.dev/net/http/pprof) in the metrics. So
we can curl the CPU profile directly by running
`curl -o default.pgo
"http://${MILVUS_SERVER_IP}:${MILVUS_SERVER_PORT}/debug/pprof/profile?seconds=${TIME_SECOND}"`
to collect the profile as the default.pgo during the first search. Then
I build Milvus with PGO and use the same index to run the search again.
The result is as below:

Search Metrics
| Metric | Go 1.21 Without PGO | Go 1.21 With PGO | Change (%) |

|---------------------------------------------|------------------|-----------------|------------|
| `search Requests` | 2,644,583 | 2,837,726 | +7.30% |
| `search Fails` | 0 | 0 | N/A |
| `search RT_avg` (ms) | 11.34 | 10.57 | -6.78% |
| `search RT_min` (ms) | 1.39 | 1.32 | -5.18% |
| `search RT_max` (ms) | 349.72 | 143.72 | -58.91% |
| `search TP50` (ms) | 10.57 | 9.93 | -6.05% |
| `search TP99` (ms) | 26.14 | 24.16 | -7.56% |
| `search RPS`                 | 4,407       | 4,729       | +7.30%    |

### Key Findings
PGO led to a notable enhancement in search performance, particularly in
reducing the maximum response time by 58% and increasing the search QPS
by 7.3%.

### Further Analysis
Generate a diff flame graphs between two CPU profiles by running `go
tool pprof -http=:8000 -diff_base nopgo.pgo pgo.pgo -normalize`

<img width="1894" alt="goprofiling"
src="https://github.com/milvus-io/milvus/assets/167743503/ab9e91eb-95c7-4963-acd9-d1c3c73ee010">
Further insight of HnswIndexNode and Milvus Search Handler
<img width="1906" alt="hnsw"
src="https://github.com/milvus-io/milvus/assets/167743503/a04cf4a0-7c97-4451-b3cf-98afc20a0b05">
<img width="1873" alt="search_handler"
src="https://github.com/milvus-io/milvus/assets/167743503/5f4d3982-18dd-4115-8e76-460f7f534c7f">

After applying PGO to the Milvus server, the CPU utilization of the
faiss::fvec_L2 function has decreased. This optimization significantly
enhances the performance of the
[HnswIndexNode::Search::searchKnn](e0c9c41aa2/src/index/hnsw/hnsw.cc (L203))
method, which is frequently invoked by Knowhere during high-concurrency
searches. As the explanation from Go release notes, the function might
be more aggressively inlined by Go compiler during the second build with
the CPU profiling collected from the first run. As a result, the search
handler efficiency within Milvus DataNode has improved, allowing the
server to process a higher number of search queries per second (QPS).



# Conclusion
The combination of Go 1.21 and PGO has led to substantial enhancements
in search performance for Milvus server, particularly in terms of search
QPS and response times, making it more efficient for handling
high-concurrency search operations.

Signed-off-by: shaoting-huang <shaoting.huang@zilliz.com>
2024-05-22 13:21:39 +08:00
Yinzuo Jiang
2cc50d80a3
fix: add openblas in install_deps.sh (#33065)
Install openblas using apt or yum in scripts/install_deps.sh, update
documentations and fix some typos related to build and installation.

issue: #33056, #33066

Signed-off-by: Yinzuo Jiang <jiangyinzuo@foxmail.com>
2024-05-17 14:53:37 +08:00
shaoting-huang
0e3188b683
doc: Update F&Q in DEVELOPMENT.md (#32782)
Update errors might be encountered when building Milvus in
DEVELOPMENT.md.

Signed-off-by: shaoting-huang <shaoting.huang@zilliz.com>
2024-05-06 16:17:28 +08:00
Ashwin Krishna Kumar
1c55016504
doc: fix conan version in DEVELOPMENT.md (#31414)
The conan version used in all the setup scripts was updated to `1.61.0`
in https://github.com/milvus-io/milvus/pull/27870. However, a line in
the developer documentation was left out.

Since the dependencies no longer install correctly with conan `1.58`
(https://github.com/milvus-io/milvus/issues/27869), all documentation
should consistently use the updated version.

Signed-off-by: Ashwin Krishna Kumar <ashwin.kumar6@ibm.com>
2024-03-20 10:23:07 +08:00
sammy.huang
7a49cf2104
enhance: [skip e2e] How to build Milvus v2.3.4 arm image to support ky10 sp3 (#30813)
issue: #30843

Signed-off-by: Sammy Huang <sammy.huang@zilliz.com>
2024-02-27 10:52:57 +08:00
yah01
6f59510723
Upgrade go to 1.20 (#24390)
Signed-off-by: yah01 <yang.cen@zilliz.com>
2023-11-10 07:46:18 +08:00
Enwei Jiao
4faba61647
Upgrade conan to 1.61.0 (#27870)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2023-10-24 17:50:10 +08:00
Sheldon
351c64b606
fix some typos (#27851)
1. fix some typos in md,yaml #22893

Signed-off-by: Sheldon <chuanfeng.liu@zilliz.com>
2023-10-24 09:30:10 +08:00
Enwei Jiao
f2a6683a97
Update doc for remove Centos7 (#26476)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2023-08-21 09:54:20 +08:00
Enwei Jiao
c9d9940918
Remove Ubuntu18.04 support (#24666)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2023-06-06 14:06:36 +08:00
Enwei Jiao
940ead200a
Update Development.md (#23207)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2023-04-04 13:38:28 +08:00
Jenny Li
9aa307d851
Clean unnecessary deps to make milvus (#19711)
Signed-off-by: Jenny Li <jing.li@zilliz.com>

Signed-off-by: Jenny Li <jing.li@zilliz.com>
2022-10-12 14:33:23 +08:00
Enwei Jiao
aab060aeff
upgrade Go 1.18 in go.mod (#18165)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2022-08-01 14:28:33 +08:00
Enwei Jiao
b32ff76696
update doc about run single test (#17916)
Signed-off-by: Enwei Jiao <enwei.jiao@zilliz.com>
2022-06-30 14:00:18 +08:00
aakejiang
30be20e357
correct DEVELOPMENT.md (#16302)
Signed-off-by: kejiang <ke.jiang@zilliz.com>

Co-authored-by: kejiang <ke.jiang@zilliz.com>
2022-03-31 09:21:28 +08:00
edward.zeng
d4ad785b76
Bump go version in documentation (#15979)
Signed-off-by: Edward Zeng <jie.zeng@zilliz.com>
2022-03-16 18:51:21 +08:00
jaime
307a8ce535
Support compile and run on Mac (#15491)
Co-authored-by: jaime <yun.zhang@zilliz.com>
Co-authored-by: Cai Yudong <yudong.cai@zilliz.com>
Co-authored-by: Jenny Li <jing.li@zilliz.com>
Co-authored-by: Nemo <yuchen.gao@zilliz.com>
Signed-off-by: yun.zhang <yun.zhang@zilliz.com>

Co-authored-by: Cai Yudong <yudong.cai@zilliz.com>
Co-authored-by: Jenny Li <jing.li@zilliz.com>
Co-authored-by: Nemo <yuchen.gao@zilliz.com>
2022-02-09 14:27:46 +08:00
yanliang567
da972768fc
[skip e2e]Fix a grammar issue (#15085)
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
2022-01-10 22:26:20 +08:00
yanliang567
ced23921ca
[skip e2e]Fix a grammar issue (#14974)
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
2022-01-07 21:07:49 +08:00
yanliang567
6e68372833
[skip ci]Update typo in development md (#11586)
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
2021-11-10 20:26:58 +08:00
edward.zeng
3b3ff4b9c1
[skip ci] Refine development doc. (#11263)
Signed-off-by: Edward Zeng <jie.zeng@zilliz.com>
2021-11-04 18:52:27 +08:00
ThyeeZz
621ef0a604
[skip ci] remove useless item of TOC (#10581)
Signed-off-by: ThyeeZz <jialian.ji@zilliz.com>
2021-10-27 18:22:23 +08:00
shiyu22
649399e29e
[skip ci]Update development.md (#10544)
Signed-off-by: shiyu22 <shiyu.chen@zilliz.com>
2021-10-26 14:31:03 +08:00
zwd1208
eb5985f0bc
[skip ci]Update DEVELOPMENT.md (#9817)
Signed-off-by: Weida Zhu <weida.zhu@zilliz.com>
2021-10-13 19:18:33 +08:00
zwd1208
ad5c2c8fe5
[skip ci]Change uppercase of minio (#9475)
Signed-off-by: Weida Zhu <weida.zhu@zilliz.com>
2021-10-08 16:24:58 +08:00
edward.zeng
751f2b05d1
[skip ci] refine development guide (#9331)
Signed-off-by: Edward Zeng <jie.zeng@zilliz.com>
2021-10-06 17:18:18 +08:00
elfisworking
809129ba63
Update doc to help developers (#9270)
Signed-off-by: elfisworking <zymustb@126.com>
2021-10-05 21:10:22 +08:00
groot
f02d572532
[skip ci] Update development doc (#9187)
Signed-off-by: groot <yihua.mo@zilliz.com>
2021-10-04 09:07:56 +08:00
groot
9600407f83
[skip ci] Fix DEVELOPMENT.md (#9137)
Signed-off-by: yhmo <yihua.mo@zilliz.com>
2021-10-03 17:46:18 +08:00
edward.zeng
57329670bf
[skip ci] Refine development doc toc (#9008)
Signed-off-by: Edward Zeng <jie.zeng@zilliz.com>
2021-10-01 12:30:45 +08:00
Xiaofan
7d0b099907
[skip ci] Add document about how to start test cluster (#8986)
Signed-off-by: xiaofan-luan <xiaofan.luan@zilliz.com>
2021-10-01 08:55:21 +08:00
edward.zeng
23eb8ad891
[skip ci] Refine development doc (#8727)
Signed-off-by: Edward Zeng <jie.zeng@zilliz.com>
2021-09-28 09:52:04 +08:00
groot
f121be436c
[skip ci] Update development doc (#8310)
Signed-off-by: yhmo <yihua.mo@zilliz.com>
2021-09-22 17:47:53 +08:00
Xiangyu Wang
06e3e5bf83
Unify command format in different documents (#8107)
Signed-off-by: Xiangyu Wang <xiangyu.wang@zilliz.com>
2021-09-17 10:25:50 +08:00
Xiaofan
3d6ec9c127
Add unit test running command at DEVELOPMENT.md (#7767)
Signed-off-by: xiaofan-luan <xiaofan.luan@zilliz.com>
2021-09-13 09:44:02 +08:00
binbin
eff75c7701
Replace sdk source and merge tests and tests20 (#7182)
Signed-off-by: Binbin Lv <binbin.lv@zilliz.com>
2021-08-20 11:00:56 +08:00
binbin
8d67f89051
Add test cases for wildcard search (#6839)
* Add test cases for wildcard search

Signed-off-by: Binbin Lv <binbin.lv@zilliz.com>

* Modify pytest-parallel to pytest-xdist for orm test

Signed-off-by: Binbin Lv <binbin.lv@zilliz.com>
2021-07-28 19:35:22 +08:00
quicksilver
9322cf7484
[skip ci] Update DEVELOPMENT.md for compile on CentOS (#6407)
Signed-off-by: quicksilver <zhifeng.zhang@zilliz.com>
2021-07-09 16:24:39 +08:00
ThreadDao
6286d2b951
Update development doc for toc and e2e test (#6339)
* Update development doc for toc and e2e test

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* Update development doc

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>
2021-07-07 15:12:00 +08:00
quicksilver
efb6115a4b
Add Building Milvus with Docker Docs (#6188)
Signed-off-by: quicksilver <zhifeng.zhang@zilliz.com>
2021-06-30 16:16:33 +08:00
quicksilver
2834c8532f
[skip ci] Update README.md and DEVELOPMENT.md (#6173)
Signed-off-by: quicksilver <zhifeng.zhang@zilliz.com>
2021-06-28 16:30:17 +08:00
Xiangyu Wang
0317dbe7a3
[skip ci]Add development.md (#5913)
Signed-off-by: Xiangyu Wang <xiangyu.wang@zilliz.com>
2021-06-21 12:08:06 +08:00