Milvus 究竟是一個計算平臺,還是一個數據庫?應用在哪些場景?諸如此類的問題我們的開發者常常在羣裏被小夥伴問到。這次我們對 Milvus 做了一個簡單的概述,讓大家可以更清楚 Milvus 是怎樣的數據平臺,以及 Milvus 長遠的目標爲何。完整的會議實錄請點擊以上視頻。
| Milvus Q&A 與文字實錄
Attendee= 參會者
Attendee A:
我也是在人工智能行業做一些技術研發,包括現在會做一些 AI 賦能行業的一些應用。因爲向量檢索也是之前在我的工作當中一直會去涉及到的一個工作點,所以對這一塊的話也是有很大的興趣的。
然後剛剛顧老師在這個片子當中也講到了很多的 use case,其實還對我來講還是非常熟悉的,我之前遇到的一些問題,比方說像以圖搜圖那個場景,可能是說好像是 5500 萬圖片,然後是 20 毫秒檢測出來的。那我有個問題就是它是基於一個 GPU server,它是基於多卡的來做檢索是吧?因爲沒有具體的配置,我們說 20 毫秒這個可能對..我會想知道他這個細節,他這個配置。
顧老師 @ Milvus:
它是一個阿里雲上的 T4 的雙卡的服務器,但是他(用戶)反映說在阿里雲上的 GPU 服務器這種虛擬出來的顯卡的性能其實是不如實體卡的。
Attendee A:
這是一個問題,就是虛擬化這是一個問題。就是因爲我最關心的是 5500 萬張圖片,它通過 VGG 提取特徵之後,這個特徵的長度是多少?
顧老師 @ Milvus:
512。其實在搜索這個角度來講的話,並不需要 GPU。
Attendee A:
其實只需要 GPU 來運行 VGG 模型提取特徵對吧?
顧老師 @ Milvus:
對沒錯。
Attendee A:
Ok,所以說它的特徵差不多是 100 個 GB 這樣的一個數據量?
顧老師 @ Milvus:
差不多,對。
Attendee A:
然後它這個服務器的內存能存的下嗎?
顧老師 @ Milvus:
是這樣的,就是我們有一種叫 IVFSQ8 這種壓縮型的索引,它基本上你可以理解是 1/5 的內存消耗,這就是 20 多 G。
Attendee A:
然後就是說你們對他 512 維這個特徵進行了矢量量化的這種搜索方式是吧?
顧老師 @ Milvus:
應該是標量量化。
Attendee A:
就是說對它這個特徵進行一個量化了。對吧?Ok 這樣的話應該差不多。因爲這個數據量可能還不是特別大,比方說如果說是幾十億張的話,可能會涉及到多個節點,分佈式來做檢索,你們這邊開源的方案現在支持嗎?
顧老師 @ Milvus:
我們有一個分佈式部署方案,但是它現在還不是一個分佈式集羣的方案。對分佈式部署的話,成本還是會低一點。我們感覺做成一個集羣當然也很好,但是其實大家對成本還是非常敏感的。
Attendee A:
那是的。因爲當數據量比較大的時候,因爲這個是 5500 萬,它可能通過你量化之後,它可能就是佔了個 1、20 GB 的這種這種內存,你再上比方說再乘以 100 倍的話,你可能單節點就可能就存不下這個特徵向量。對吧?那個時候你可能就必須得做節點。分佈式這個技術的話,你們現在是支持了嗎?分佈式查詢的這種技術。
顧老師 @ Milvus:
因爲其實向量搜索的場景,它不像傳統關係型數據庫會有 drawing 這些,因爲其實你可以想每個分佈式部署,其實就類似於說我分庫分表到不同的節點,然後不同的節點一起搜索之後,在最後做一次歸併。
Attendee A:
其實就是說對於整個搜索的架構基本上沒什麼影響,還說是每個節點都是同時併發的去做這種搜索,然後再回到某一個 client 的節點,做一個彙總,對吧?還是這種架構。
顧老師 @ Milvus:
對,是的。
Attendee A:
我看到的很多片子當中都會有一個 object URI 和 vector ID,我的理解就是說這個 vector ID 你會事先把這個 vector ID 和比方說我的圖片或者我的文本,在他的 object 做一個 map 的這樣的一個映射關係是吧?
顧老師 @ Milvus:
對,其實這個映射的關係現在可以不放在 Milvus ,你可以自己去維護。因爲其實這部分的話,剛纔沒有跟大家解釋就是說 Milvus 如果核心的部分它其實不存那些數據的,我們會存原始的向量到但我們不存這張圖片。
Attendee A:
對, 在 object store 對象存儲當中。然後你們先通過 Milvus 然後返回 vector ID,然後再到對象存儲裏邊,然後把這些實際的對象給大家映射出來。
顧老師 @ Milvus:
對,是的。
Attendee A:
Ok,所以說存儲的方案得用戶(使用者)他自己來選型,對吧?
顧老師 @ Milvus:
對,你想存硬盤上或是你想存分佈式存儲上也可以。
Attendee A:
所以說你們只給個 vector ID, 至於是後面的怎麼存儲,怎麼高效的去找到 object,其實你們這個方案都不涉及了。
顧老師 @ Milvus:
對,因爲這些存儲的這種項目當中已經有很多非常優秀的項目,我們再去把它做一遍好像沒什麼必要。
Attendee A:
那我聽下來你們其實還是類似於提供一個黑盒子,然後輸入可能是 query,然後輸出是它的 vector ID 這樣簡單的東西是吧?可以這麼簡單理解嗎?
顧老師 @ Milvus:
對,是的。包括未來支持多模態的搜索,也是以這樣的方式去做。
Attendee A:
對,也就是搜索的 input 的話,它可能是多個模態的 query vector,對吧?然後語音、圖像、文本...
顧老師 @ Milvus:
對,然後我最後告訴你它的 Entity 是哪一個。
Attendee A:
對,類似於還是輸出它的 vector ID,至於它怎麼找到它真實的 object,就運營層來做這樣的一些事情就可以了。
顧老師 @ Milvus:
對是的,因爲它這個東西不是特別的相關。
Attendee B:
我這邊問顧老師一個問題,我以前有用過 Faiss。 我不太知道 Milvus 的話跟 Faiss 相比的話我們有哪些不同, 或者說我們怎麼會 PK 掉對手或者怎麼樣的。
顧老師 @ Milvus:
其實剛纔有一頁當中我沒有講,就是說 Milvus 要做的事情是要提供一個非結構數據服務,它其實有更多的工作要去做的。當然在向量搜索這部分,像高稠密向量的搜索部分,其實我們是從最初直接引用 Faiss 的算法,到後來自己做了很多的調整。
因爲一個算法庫,因爲 Faiss 是個單文件的嘛,像我們這邊我們因爲有這種數據管理,我有這種新的數據過來,然後怎麼樣去爲它新建索引的。所以其實一個數據這種系統它是一個多文件的分片的,有屬性標籤的這些東西,你要去做很多的一些這種調整和適配,包括原來在單位文件下最有效的方式在多文件下可能不是一個很好的方式,其實在這個過程當中是有很多的需要去改進的地方。
Attendee B:
Ok 明白,我大概知道你的意圖了。
顧老師 @ Milvus:
因爲其實你要去調整自己的模型已經要花很多時間了,如果一個應用開發 AI 算法工程師或者開發人員,還要花很多時間在向量搜索上那其實整個項目開發週期也好,硬件成本也好,都會讓你原來的那些 AI 創意變得不是那麼的可行。但是對於一些大產可能在成本上沒有那麼的敏感?
Attendee B:
也不是,如果這個東西真的很好用的話,也會直接拿來用,是這樣的。
Attendee C:
顧老師你好,我上次問過你就是我們 Milvus 的數據管理方案,然後後來我發現我們整個 Milvus 它雖然是以 collection 爲集合的,但是我在去建索引的時候,實際也是以 collection 作爲一個大的單位去構建索引的。
顧老師 @ Milvus:
對,但是其實它是存儲在每一個數據段上,每一個 segment 上建索引。
Attendee C:
上次我問你那個問題,有一個問題是這樣的,我有兩份向量嘛 A 和 B, 一個是 old 一個是 new,我這時需要做個 double 更新嘛。如果你是以這種 collection 爲集合去做構建的話,好像我只能用 collection 這個單位去做我這種新舊向量的替換,這種管理。
顧老師 @ Milvus:
是這樣的,就是說你新建的,你新插入一個 collection 的向量其實是在最後一部分 segment 裏面的,但是其實我們去構建新索引的時候,是構建更新最後的 segment 建索引。
Attendee C:
但是你的 segment 那不是在數據上是分片的嗎?對於對外的你是 collection 這種模式嘛,我理解是這樣的。
顧老師 @ Milvus:
對,是的。最後自動建索引那些都是系統後臺出發的,並不需要用戶去人工干預過程。
Attendee C:
Ok,我明白了,我回頭再試驗再試一下。其他沒有什麼問題了。
有興趣來與我們聊聊嗎?我們下週二8點線上見!記得加入我們技術交流羣獲取會議鏈接~
| 歡迎加入 Milvus 社區
github.com/milvus-io/milvus | 源碼
milvus.io | 官網
milvusio.slack.com | Slack 社區
zhihu.com/org/zilliz-11/columns | 知乎
zilliz.blog.csdn.net | CSDN 博客
space.bilibili.com/478166626 | Bilibili