架構(gòu)反轉(zhuǎn):通過(guò)移動(dòng)計(jì)算而不是數(shù)據(jù)來(lái)擴(kuò)展
大型玩家的擴(kuò)展技巧正變得越來(lái)越重要,這導(dǎo)致了架構(gòu)反轉(zhuǎn)的激增。
譯自Architecture Inversion: Scale by Moving Computation, Not Data,作者 Jon Bratseth。
你是否曾經(jīng)想過(guò),世界上最大的互聯(lián)網(wǎng)和社交媒體公司是如何如此快速地向如此多的用戶提供算法內(nèi)容的?
想想像 TikTok 這樣的公司需要做些什么才能為人們提供源源不斷的個(gè)性化視頻片段。他們擁有某個(gè)模型來(lái)代表用戶,他們需要使用這個(gè)模型從數(shù)十億個(gè)備選視頻中找到最適合向特定用戶展示的視頻片段。而且,由于他們也有數(shù)十億用戶,他們需要每秒進(jìn)行數(shù)百萬(wàn)次這樣的操作。
傳統(tǒng)解決方案
解決 TikTok 問(wèn)題的簡(jiǎn)單方法是將用戶模型與每個(gè)視頻片段進(jìn)行比較,以確定每個(gè)視頻片段與該用戶的匹配程度。眾所周知,這種蠻力方法無(wú)法擴(kuò)展——對(duì)于十億個(gè)視頻和每秒一百萬(wàn)個(gè)請(qǐng)求,這將變成每秒一千萬(wàn)億次比較!
對(duì)此的明顯解決方案是索引:維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu),使之能夠從用戶模型中找到合適的視頻片段,而無(wú)需考慮每個(gè)片段。例如,如果用戶模型注意到對(duì)英語(yǔ)視頻的偏好,則可以將視頻與 B 樹(shù)索引,該 B 樹(shù)直接指向英語(yǔ)視頻,以便可以忽略其余視頻。或者,如果用戶表示為興趣向量嵌入,則可以使用向量索引(如分層可導(dǎo)航小世界 (HNSW) 算法)來(lái)查找具有相似向量的視頻,而無(wú)需考慮其余視頻。
實(shí)際系統(tǒng)將使用這些索引的組合。現(xiàn)在,索引只提供關(guān)于哪些視頻可能適合用戶的粗略指示。為了真正呈現(xiàn)用戶發(fā)現(xiàn)最有趣或最有用的內(nèi)容,你需要在用戶模型和每個(gè)候選項(xiàng)目之間進(jìn)行更準(zhǔn)確的比較——如今通常使用神經(jīng)網(wǎng)絡(luò)來(lái)完成。這就是事情變得有趣的地方。
不影響質(zhì)量的擴(kuò)展
重新評(píng)分的常見(jiàn)方法是將從索引中檢索到的候選項(xiàng)目傳遞給架構(gòu)中的另一個(gè)組件,該組件執(zhí)行每個(gè)項(xiàng)目的詳細(xì)評(píng)分。應(yīng)該以這種方式重新評(píng)分多少個(gè)項(xiàng)目?這應(yīng)該是所有候選項(xiàng)目的一定比例。
要了解這一點(diǎn),請(qǐng)考慮索引檢索加上重新評(píng)分是對(duì)所有候選項(xiàng)目的蠻力評(píng)分的近似值,我們需要考慮的是這種優(yōu)化帶來(lái)的質(zhì)量損失。這可以用給定視頻(如果使用蠻力評(píng)估將顯示給用戶)出現(xiàn)在要重新排序的集合中的概率來(lái)表示。
隨著該集合相對(duì)于候選項(xiàng)目完整集合的大小變小,該概率趨于零。隨著要重新評(píng)分的比例減小,質(zhì)量損失會(huì)變大,并且隨著完整評(píng)分算法的改進(jìn),質(zhì)量損失也會(huì)變大,因?yàn)橛懈鄸|西要失去。
讓我們具體一點(diǎn),假設(shè)我們想要重新評(píng)分 1% 的候選項(xiàng)目,并且每個(gè)項(xiàng)目包含 2kb 的對(duì)最終評(píng)分有用的數(shù)據(jù)(大約一個(gè)向量和一百個(gè)屬性)。對(duì)于十億個(gè)項(xiàng)目,這意味著每個(gè)請(qǐng)求需要重新評(píng)分 1000 萬(wàn)個(gè)項(xiàng)目,而對(duì)于每秒一百萬(wàn)個(gè)請(qǐng)求,這意味著我們需要每秒移動(dòng) 20 PB 的數(shù)據(jù)進(jìn)行重新排序!即使是這個(gè)小比例也顯然離可行性很遠(yuǎn),那么大型公司在做什么呢?
答案是他們沒(méi)有將數(shù)據(jù)移動(dòng)到評(píng)分計(jì)算節(jié)點(diǎn),而是將評(píng)分計(jì)算移動(dòng)到索引中,以便在數(shù)據(jù)所在的位置本地執(zhí)行,從而繞過(guò)了整個(gè)問(wèn)題。
架構(gòu)反轉(zhuǎn)即將到來(lái)
現(xiàn)在,為什么我們其他人應(yīng)該關(guān)心這個(gè)問(wèn)題,因?yàn)槲覀兒苄疫\(yùn)地沒(méi)有像 TikTok、Google 等公司那樣擁有數(shù)十億用戶?許多因素變得越來(lái)越重要:
- ML 算法正在改進(jìn),本地計(jì)算能力也在提高,這意味著完全評(píng)分項(xiàng)目比以前更能提高質(zhì)量和最終利潤(rùn)。
- 隨著向量嵌入的出現(xiàn),此類算法消耗的信號(hào)數(shù)量增加了 1 到 2 個(gè)數(shù)量級(jí),使得網(wǎng)絡(luò)瓶頸更加嚴(yán)重。
- 使用越來(lái)越多的數(shù)據(jù)來(lái)解決問(wèn)題越來(lái)越具有成本效益,這意味著需要重新評(píng)分更多數(shù)據(jù)以保持恒定的質(zhì)量損失。
- 隨著此類系統(tǒng)數(shù)據(jù)的消費(fèi)者從主要為人類轉(zhuǎn)變?yōu)橹饕獮?LLM,RAG 解決方案,它在比以前更多的應(yīng)用程序中更快地提供大量評(píng)分?jǐn)?shù)據(jù)方面變得有利。這將最終導(dǎo)致大多數(shù)應(yīng)用程序都與向 LLM 提供高質(zhì)量數(shù)據(jù)以進(jìn)行長(zhǎng)鏈推理有關(guān),從而以非人速度做出高質(zhì)量的業(yè)務(wù)決策。
出于這些原因,最大玩家的擴(kuò)展技巧對(duì)于我們其他人來(lái)說(shuō)變得越來(lái)越重要,這導(dǎo)致了當(dāng)前的架構(gòu)反轉(zhuǎn)的激增,從傳統(tǒng)的兩層系統(tǒng)(其中數(shù)據(jù)從搜索引擎或數(shù)據(jù)庫(kù)中查找并發(fā)送到無(wú)狀態(tài)計(jì)算層)轉(zhuǎn)變?yōu)閷⒃撚?jì)算插入數(shù)據(jù)本身。
現(xiàn)在,要真正做到這一點(diǎn),您還需要一個(gè)能夠?qū)嶋H管理您的數(shù)據(jù)的平臺(tái),以這種方式對(duì)數(shù)據(jù)進(jìn)行索引和計(jì)算。這導(dǎo)致了Vespa.ai的普及,該平臺(tái)最初是雅虎在還是大型玩家之一時(shí)用于架構(gòu)反轉(zhuǎn)的解決方案。該技術(shù)后來(lái)開(kāi)源了。
Vespa.ai 允許您將結(jié)構(gòu)化數(shù)據(jù)、向量/張量和全文一起存儲(chǔ)和索引在任意數(shù)量的機(jī)器上,并在數(shù)據(jù)存儲(chǔ)的本地執(zhí)行任何類型的張量計(jì)算和機(jī)器學(xué)習(xí)推理。