作者 | Puck項(xiàng)目組
導(dǎo)讀
Puck是百度自研的開(kāi)源ANN檢索引擎。Puck開(kāi)源項(xiàng)目包含兩種百度自研的檢索算法,以高召回、高準(zhǔn)確、高吞吐為目標(biāo),適用于多種數(shù)據(jù)規(guī)模和場(chǎng)景。隨著業(yè)務(wù)發(fā)展不斷的優(yōu)化和迭代,進(jìn)行充分的技術(shù)開(kāi)發(fā)和測(cè)試,確保了技術(shù)的可靠性和成熟度。該項(xiàng)目于2019年廠內(nèi)開(kāi)源,廣泛應(yīng)用于內(nèi)部多條產(chǎn)品線,支撐萬(wàn)億級(jí)數(shù)據(jù)和海量請(qǐng)求。在benchmark上顯示,Puck在千萬(wàn)、億、十億等多個(gè)數(shù)據(jù)集上,性能優(yōu)勢(shì)明顯。
全文2682字,預(yù)計(jì)閱讀時(shí)間7分鐘。
ANN全稱近似最近鄰檢索(Approximate Nearest Neighbor),目標(biāo)是從全量向量數(shù)據(jù)中尋找距離最近的TopK個(gè)向量,同時(shí)需要平衡檢索效果和檢索成本。自2012年AlexNet出現(xiàn)之后,深度學(xué)習(xí)在圖像領(lǐng)域大放異彩,2017年 transformer的推出重構(gòu)了NLP領(lǐng)域,基于語(yǔ)義的檢索顛覆了傳統(tǒng)檢索領(lǐng)域,使得ANN技術(shù)廣泛應(yīng)用于搜索、推薦等多個(gè)場(chǎng)景,成為互聯(lián)網(wǎng)的基礎(chǔ)技術(shù)之一。
做為研究熱點(diǎn),無(wú)論學(xué)術(shù)界還是工業(yè)界,近些年都出現(xiàn)了許多ANN算法的創(chuàng)新研究和應(yīng)用,包括基于分區(qū)和基于圖形的索引策略、混合RAM和SSD存儲(chǔ)以高效存儲(chǔ)和處理超過(guò)RAM大小的大型數(shù)據(jù)集、使用加速器硬件、利用機(jī)器學(xué)習(xí)來(lái)降低原始矢量的維度,以及Spotify的ANNOY、Google的ScaNN、Facebook的Faiss和HNSW等。
01 Puck 是什么?
Puck是百度自研的高性能ANN檢索引擎,名稱取自經(jīng)典MOBA游戲DOTA中的智力英雄-Puck,是飄逸、靈動(dòng)的代表。
我們很早即投入自研近似最近鄰檢索算法(ANN)的研究,2017年P(guān)uck完成首次上線,2019年底內(nèi)部開(kāi)源,目前已廣泛應(yīng)用于百度內(nèi)部多條產(chǎn)品線,隨著業(yè)務(wù)發(fā)展不斷的優(yōu)化和迭代,進(jìn)行了充分的技術(shù)研發(fā)和測(cè)試,確保了技術(shù)的領(lǐng)先性和成熟度。
Puck開(kāi)源項(xiàng)目包含兩種百度自研的檢索算法Puck&Tinker,以高召回、高準(zhǔn)確、高吞吐為目標(biāo),在大中小數(shù)據(jù)集上都有優(yōu)異表現(xiàn)。在benchmark的千萬(wàn)、億、十億等多個(gè)數(shù)據(jù)集上,Puck性能優(yōu)勢(shì)明顯,均顯著超過(guò)競(jìng)品。在2021年底Nerulps舉辦的全球首屆向量檢索大賽BIGANN比賽中,Puck參加的四個(gè)項(xiàng)目均獲得第一。
02 Puck 優(yōu)勢(shì)有哪些?
1、易用性:提供簡(jiǎn)單易用的API接入,盡量少的暴露參數(shù),大部分參數(shù)使用默認(rèn)即可達(dá)到良好性能。
**2、擴(kuò)展性:**采用完全自研的索引結(jié)構(gòu),支持多種功能擴(kuò)展,適應(yīng)多種場(chǎng)景,項(xiàng)目模塊劃分合理,便于改造優(yōu)化,可方便用戶接口自行添加。
3、高性能:在benchmark的千萬(wàn)、億、十億等多個(gè)數(shù)據(jù)集上,Puck性能優(yōu)勢(shì)明顯,均顯著超過(guò)競(jìng)品。
4、可靠性:經(jīng)過(guò)多年在實(shí)際大規(guī)模場(chǎng)景下的驗(yàn)證打磨,廣泛應(yīng)用于百度內(nèi)部包括搜索、推薦等三十余條產(chǎn)品線,支撐萬(wàn)億級(jí)索引數(shù)據(jù)和海量檢索請(qǐng)求。
03 Puck 性能優(yōu)勢(shì)
Puck 在開(kāi)源前,曾參加過(guò)首屆國(guó)際向量檢索大賽BigANN。首屆國(guó)際向量檢索大賽BigANN是由人工智能領(lǐng)域全球頂級(jí)學(xué)術(shù)會(huì)議NeurIPS發(fā)起,由微軟、facebook等公司協(xié)辦的全球最高水平的賽事,旨在提升大規(guī)模ANN的研究創(chuàng)新和生產(chǎn)環(huán)境中的落地應(yīng)用。
雖是首屆大賽,但因NeurIPS的極高知名度和權(quán)威性,吸引了眾多知名企業(yè)和頂尖大學(xué)的同臺(tái)競(jìng)技。本屆比賽已于2021年12月NeurlPS’21會(huì)議期間公布結(jié)果,Puck在參賽的四個(gè)數(shù)據(jù)集中均排名第一 。
除此之外,Puck持續(xù)地優(yōu)化和迭代,以保持其在變化的業(yè)務(wù)環(huán)境中提供高效的檢索性能。除了十億數(shù)據(jù)集以外,我們構(gòu)建了億級(jí)&千萬(wàn)級(jí)benchmark,創(chuàng)建了更符合真實(shí)工業(yè)生產(chǎn)環(huán)境的benchmark機(jī)制和環(huán)境,Puck&Tinker在多個(gè)數(shù)據(jù)集上性能優(yōu)勢(shì)明顯。
BIGANN-10M
△deep-10M和BIGANN-10M數(shù)據(jù)集上,召回率 VS QPS的性能圖
更詳細(xì)benchmark見(jiàn):
https://github.com/baidu/puck/tree/main/ann-benchmarks
04 Puck 功能拓展
為了讓 Puck 更加親民,我們還做了多個(gè)功能的拓展,目前可以實(shí)現(xiàn):
1、實(shí)時(shí)插入:支持無(wú)鎖結(jié)構(gòu)的實(shí)時(shí)插入,做到數(shù)據(jù)的實(shí)時(shí)更新。
2、條件查詢:支持檢索過(guò)程中的條件查詢,從底層索引檢索過(guò)程中就過(guò)濾掉不符合要求的結(jié)果,解決多路召回歸并經(jīng)常遇到的截?cái)鄦?wèn)題,更好滿足組合檢索的要求。
3、分布式建庫(kù):索引的構(gòu)建過(guò)程支持分布式擴(kuò)展,全量索引可以通過(guò)map-reduce一起建庫(kù),無(wú)需按分片build,大大加快和簡(jiǎn)化建庫(kù)流程。
4、自適應(yīng)參數(shù):ANN方法檢索參數(shù)眾多,應(yīng)用起來(lái)有不小門檻,不了解技術(shù)細(xì)節(jié)的用戶并不容易找到最優(yōu)參數(shù),Puck提供參數(shù)自適應(yīng)功能,在大部分情況下使用默認(rèn)參數(shù)即可得到很好效果 。
05 Puck 在業(yè)務(wù)中的使用
在開(kāi)源前,Puck在多個(gè)業(yè)務(wù)中已經(jīng)進(jìn)行了大規(guī)模的有效驗(yàn)證。
Puck于2017年初啟動(dòng)研發(fā),2017年底首次上線,2019年百度內(nèi)部開(kāi)源,持續(xù)打磨至今,目前廣泛應(yīng)用于百度內(nèi)部包括搜索、推薦等三十余條產(chǎn)品線,支撐萬(wàn)億級(jí)索引數(shù)據(jù)和海量檢索請(qǐng)求。
△ANN檢索在業(yè)務(wù)應(yīng)用中的位置
Puck 開(kāi)源后, 鼓勵(lì)開(kāi)發(fā)者之間的合作和共享,同時(shí)支持大家進(jìn)行知識(shí)的分享和傳播,打造活躍而廣泛的生態(tài),促進(jìn)項(xiàng)目的高速、可持續(xù)發(fā)展,從而推動(dòng)技術(shù)的創(chuàng)新。
Puck遵循 Apache 2.0 開(kāi)源協(xié)議,尊重和保護(hù)原作者的創(chuàng)作權(quán),開(kāi)放使用包括商業(yè)化及二次開(kāi)源。
希望大家將好的使用經(jīng)驗(yàn)反饋給我們,如有問(wèn)題可以加入【QQ群:913964818】隨時(shí)咨詢。
同時(shí),歡迎大家成為社區(qū)貢獻(xiàn)者,積極參與開(kāi)源貢獻(xiàn),解決自身訴求、提升個(gè)人成長(zhǎng)的同時(shí)得到正向激勵(lì)。
在你因?yàn)閰⑴c開(kāi)源而得到回報(bào)的時(shí)候,你也在影響著開(kāi)源領(lǐng)域的發(fā)展,促進(jìn)開(kāi)源領(lǐng)域向更加廣闊的方向奔涌而去。
BigANN比賽詳情:
https://big-ann-benchmarks.com/neurips21.html
BigANN比賽結(jié)果:
https://github.com/harsha-simhadri/big-ann-benchmarks/blob/main/neurips21/t1_t2/README.md#results-for-t1
Puck開(kāi)源地址:
https://github.com/baidu/puck
——END——
推薦閱讀
存儲(chǔ)方案作為產(chǎn)品——Midgard探索
百度垂類離線計(jì)算系統(tǒng)發(fā)展歷程
度加剪輯App的MMKV應(yīng)用優(yōu)化實(shí)踐
百度工程師淺析解碼策略文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-703015.html
百度工程師淺析強(qiáng)化學(xué)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-703015.html
到了這里,關(guān)于百度自研高性能ANN檢索引擎,開(kāi)源了的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!