国产精品久久国产精麻豆99网站,激烈18禁高潮视频免费,老师含紧一点h边做边走视频动漫,双乳被一左一右的吸着

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

基于內(nèi)容的召回在推薦系統(tǒng)中是比較常見的召回策略,常見有基于用戶或物品的標(biāo)簽召回或者基于用戶的年齡,地域等召回,一般該策略的實(shí)現(xiàn)是基于開源軟件 Elasticseach 實(shí)現(xiàn)的。雖然召回的結(jié)果都比較合理,但是召回的新穎度,驚喜度等都比較低。比如通過標(biāo)簽“劉德華”進(jìn)行召回,基本上召回的都是包含劉德華字眼的物品,不太可能召回出“黎明”,“張學(xué)友”等其他四大天王的物品。近年隨著萬物皆可 Embedding,特別是 word2vec,item2vec, graph2vec 等技術(shù)的成功應(yīng)用,通過物品向量召回物品向量的方法也成為推薦系統(tǒng)中比較常用的召回策略。本文著重講述通過開源軟件 Vearch 來搭建一個向量搜索服務(wù),并成功實(shí)現(xiàn)以圖搜圖的功能。

介紹

最近一直在做小視頻的推薦優(yōu)化,優(yōu)化的目標(biāo)是人均入屏。按照之前資訊流的推薦經(jīng)驗(yàn),希望根據(jù)用戶的播放記錄召回更多相關(guān)的小視頻來給用戶消費(fèi)。小視頻的推薦場景和現(xiàn)在比較火爆的抖音有點(diǎn)類似,就是自動播放一小段視頻(5-30s左右),該小視頻基本占據(jù)了一整屏,用戶可以對這個小視頻進(jìn)行點(diǎn)贊,分享,評論;如果不喜歡可以通過上滑來觀看下一個小視頻??紤]到?jīng)Q定用戶是否想看的因素不太可能是視頻下方兩行的視頻標(biāo)題,更多的因素還在于視頻的封面圖能否引起用戶的興趣。基于這樣的項(xiàng)目背景,所以才想搭建一個以圖搜圖的服務(wù)來進(jìn)行小視頻的封面圖召回。

因?yàn)橹笆褂眠^ gRPC 封裝過 Faiss 來搭建向量召回服務(wù),再加上之前做過圖片的分類項(xiàng)目,都是將圖片轉(zhuǎn)換為向量作為分類器的輸入,所以要做這個事基本要解決兩件事:

  1. 對圖片進(jìn)行預(yù)處理,并將其轉(zhuǎn)換為固定長度的向量
  2. 將各個圖片的向量錄入 Faiss,并使用其完成向量搜索的任務(wù)

比如在博文Faiss 在項(xiàng)目中的使用中,作者就是使用 SIFT 算法進(jìn)行圖片特征的提取,這些特征對應(yīng)一個 128 維的向量。將每張圖片的特征向量輸入給 Faiss 進(jìn)行相似向量的召回。比如在博文基于gRPC的Faiss server實(shí)踐中,MXPlayer的技術(shù)團(tuán)隊(duì)對原先基于 Flask 框架開發(fā)的用戶/物品向量召回服務(wù)進(jìn)行了 gRPC 的升級,單機(jī)壓測 QPS 比之前高了2倍以上。本來打算是魔改之前 基于 gRPC 的 Faiss 服務(wù)來滿足當(dāng)期的業(yè)務(wù)場景需求的,但是偶然間發(fā)現(xiàn)京東開源的軟件 Vearch,就將之前的念頭掐滅了,并決定好好的學(xué)習(xí)這個開源軟件。

服務(wù)組成

以圖搜圖的服務(wù)由兩部分組成,一個是向量搜索服務(wù),由 Vearch 提供;一個是將圖片的特征提取成特征向量,由 Vearch 的插件 python-algorithm-plugin 提供。

向量搜索服務(wù)-Vearch

Vearch 是對大規(guī)模深度學(xué)習(xí)向量進(jìn)行高性能相似搜索的彈性分布式系統(tǒng)。它的核心是向量搜索,是基于 Faiss 實(shí)現(xiàn)的叫 Gamma 引擎。不過除了向量搜索外, Gamma 還可以存儲包含標(biāo)量的文檔,并對這些標(biāo)量字段進(jìn)行快速索引和過濾。說白了,標(biāo)量和矢量都支持,而一般的像 Elasticsearch只支持標(biāo)量。Faiss 只能構(gòu)建單機(jī)的向量搜索服務(wù),而Vearch 以 Gamma 為向量搜索引擎,使用 Raft 協(xié)議實(shí)現(xiàn)多副本存儲,提供 Master 和 Router組件來構(gòu)建向量相似搜索的彈性分布式系統(tǒng)。其架構(gòu)圖如下:

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

圖中主要有三大組件: Master, Router,PartitionServer,其功能如下:

  • Master 負(fù)責(zé) schema 管理,進(jìn)行集群級別的源數(shù)據(jù)和資源協(xié)調(diào)
  • Router 提供增刪改查的 RESTful API,對請求進(jìn)行路由轉(zhuǎn)發(fā)和結(jié)果合并
  • PartitionServer 主要是基于raft協(xié)議實(shí)現(xiàn)多副本存儲,而具體的存儲,索引和檢索能力是由 Gamma 引擎提供。 從上面可以知道 Gamma 之于 Vearch,就相當(dāng)于 Lucene 之于 Elasticsearch。

圖片處理服務(wù)-Vearch插件

圖像處理的服務(wù) Vearch 也提供了對應(yīng)的插件python-algorithm-plugin。Vearch 的目標(biāo)是構(gòu)建一個高性能相似搜索的彈性分布式系統(tǒng)。文本,圖片和視頻都可以轉(zhuǎn)換成向量,所以 Vearch 團(tuán)隊(duì)提供了對應(yīng)的插件來更好的集成到 Vearch 中。對于圖片,該插件提供了目標(biāo)檢測,特征提取和相似搜索等功能。其處理邏輯如下:

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

其邏輯就是從圖片中抽取向量特征存儲進(jìn) Vearch 的 Gamma 引擎中,并提供檢索服務(wù)。

服務(wù)搭建

以圖搜圖的服務(wù)由兩個服務(wù)構(gòu)成,一個是向量搜索服務(wù),由 Vearch 提供;另一個是圖片特征提取為向量,由 Vearch 的插件python-algorithm-plugin提供。

vearch

Vearch 是用 Go 編寫的,而其核心引擎 Gamma 是用 C 編寫的(畢竟Faiss 也是 C 開發(fā)的),所以服務(wù)安裝部署比較簡單粗暴,只要設(shè)置好依賴的 lib 包(Faiss,Gamma,RocksDB),并有編譯好的二進(jìn)制文件 vearch,對于單機(jī)模式直接使用 ./vearch -conf config.toml 進(jìn)行服務(wù)的啟動,而對于集群服務(wù),通過最后的命令參數(shù) ./vearch -conf config.toml ps/router/master 進(jìn)行配置。

不過因?yàn)槲覀兙€上服務(wù)器 Gcc 的版本太低,沒有 Go 環(huán)境等因素,所以采用的是 Docker 方式。鑒于要詳細(xì)了解 Faiss 服務(wù)是如何演變?yōu)?Vearch 這個彈性分布式系統(tǒng)的,所以采用的源碼編譯安裝。

# 下載源碼git clone https://github.com/vearch/vearch# 切換到鏡像編譯目錄cd vearch/cloud# 打包環(huán)境鏡像 vearch/vearch_env:3.2.2,將gcc,git,faiss,rocksdb,go等安裝好# 這步打包比較慢,可以直接使用官方鏡像 docker pull vearch/vearch_env:3.2.2sh compile_env.sh# 使用 vearch_env 編譯二進(jìn)制文件 vearch,主要是拉取 gamma 源碼進(jìn)行編譯sh compile.sh# 打包 vearch/vearch:3.2.2, 將打包好的二進(jìn)制文件vearch和依賴的庫放到鏡像中。# 可以直接使用官方鏡像 docker pull vearch/vearch:3.2.2sh build.sh

官方的鏡像打包還是有優(yōu)化的空間的,打包建議使用centos源,準(zhǔn)備好 Faiss, RocksDB, Go等源文件。

圖像處理

圖像處理的服務(wù)沒有現(xiàn)成的 Docker 鏡像,而且 Github 倉庫上提供的鏡像打包有問題,可以使用以下的倉庫進(jìn)行打包。

# 下載源碼(使用修正后的 Dockfile 文件)git clone -b study https://github.com/haojunyu/python-algorithm-plugin# 切換到鏡像目錄并打包鏡像 vearch/images:3.2.2# 可以直接使用打包好的鏡像 docker pull haojunyu/vimgs:3.2.2cd python-algorithm-plugin && docker build -t haojunyu/vimgs:3.2.2 .

swarm啟動

因?yàn)閮蓚€服務(wù)都已經(jīng)打包成 Docker 鏡像了,這里直接使用命令 docker stack deploy -c docker-compose.yml vearch 來啟動服務(wù), docker-compose.yml 內(nèi)容如下:

version: '3.3'services: vearch: image: vearch/vearch:3.2.2 ports: - "8817:8817" - "9001:9001" volumes: - ./config.toml:/vearch/config.toml - ./data:/datas - ./logs:/logs deploy: mode: replicated replicas: 1 restart_policy: condition: on-failure delay: 10s max_attempts: 3 logging: driver: "json-file" options: max-size: "1g" imgs: image: haojunyu/vimgs:3.2.2 ports: - "4101:4101" volumes: - ./python-algorithm-plugin/src/config.py:/app/src/config.py - ./images/imgs:/app/src/imgs command: ["bash", "../bin/run.sh", "image"] deploy: mode: replicated replicas: 3 restart_policy: condition: on-failure delay: 10s max_attempts: 3

注意: 掛載文件 python-algorithm-plugin/src/config.py 是圖片處理服務(wù)的配置文件,一般只需要針對自己的情況改動以下四個配置:

  • port 指圖片處理服務(wù)的端口,默認(rèn) 4101
  • gpus 指定服務(wù)是否使用 gpu,默認(rèn)不用為 -1
  • master_addressrouter_address指 Vearch 服務(wù)的 master 和 router服務(wù)

服務(wù)用法

因?yàn)閳D片服務(wù)和 Vearch 服務(wù)是高度集成的。一般是直接調(diào)用圖片服務(wù),而圖片向量錄入 Vearch交給圖片服務(wù)自己處理。Vearch 詳細(xì)的操作可以參考文檔。

服務(wù)監(jiān)控

# 這里master_server指vearch主節(jié)點(diǎn)及其對應(yīng)端口:localhost:8817# 查看集群狀態(tài)curl -XGET http://master_server/_cluster/stats# 查看健康狀態(tài)curl -XGET http://master_server/_cluster/health# 查看端口狀態(tài)curl -XGET http://master_server/list/server# 清除鎖(在創(chuàng)建表時會對集群加鎖,若在此過程中,服務(wù)異常,會導(dǎo)致鎖不能釋放,需要手動清除才能新建表。)curl -XGET http://master_server/clean_lock# 副本擴(kuò)容縮容curl -XPOST -H "content-type: application/json" -d'{ "partition_id":1, "node_id": 1, "method": 0}' http://master_server/partition/change_member

庫和空間操作

庫和空間的概念類似mysql里面的數(shù)據(jù)庫和表的概念。

  • 庫操作

# 查看及群眾所有的庫curl -XGET http://master_server/list/db# 創(chuàng)建庫curl -XPUT -H "content-type:application/json" -d '{ "name": "sv_month"}' http://master_server/db/_create# 查看庫curl -XGET http://master_server/db/$db_name# 刪除庫(庫下存在表空間則無法刪除)curl -XDELETE http://master_server/db/$db_name# 查看指定庫下所有表空間curl -XGET http://master_server/list/space?db=$db_name

  • 表空間操作

# 在庫sv_month下創(chuàng)建表空間test(針對image)curl -XPUT -H "content-type: application/json" -d '{ "name":"test", "partition_num":1, "replica_num":1, "engine":{ "name":"gamma", "index_size":70000, "max_size":10000000, "id_type":"String", "retrieval_type":"IVFPQ", "retrieval_param":{ "metric_type":"InnerProduct", "ncentroids":256, "nsubvector":32 } }, "properties":{ "itemid":{ "type":"keyword", "index":true }, "feature1":{ "type":"vector", "dimension":512, "model_id":"vgg16", "format":"normalization" } }}' http://image_server:4101/space/sv_month/_create

數(shù)據(jù)操作

  • 數(shù)據(jù)插入

# 插入本地圖片數(shù)據(jù)到表空間中curl -XPOST -H "content-type: application/json" -d' { "itemid":"COCO_val2014_000000123599", "feature1":{ "feature":"../images/COCO_val2014_000000123599.jpg" }} ' http://image_server:4101/sv_month/test/AW63W9I4JG6WicwQX_RC

  • 數(shù)據(jù)搜索

# 查詢相似結(jié)果curl -H "content-type: application/json" -XPOST -d '{ "query": { "sum": [ { "feature":"../images/COCO_val2014_000000123599.jpg", "field":"feature1" }] }}' http://image_server:4101/sv_month/test/_search

服務(wù)效果及上線

效果

在服務(wù)構(gòu)建成功后,就需要查看一下以圖搜圖的效果,而對于效果的鑒別初步以人工為準(zhǔn),最終以線上的指標(biāo)數(shù)據(jù)為準(zhǔn)。對于一個服務(wù)效果的好壞在搭建服務(wù)之初就應(yīng)該有個預(yù)期,比如:

  1. 相同的圖片相似度得接近 100%
  2. 相同類型的應(yīng)該得到相同類型的結(jié)果,比如用小狗搜索出小狗,用汽車搜索出汽車等

以下就是以圖搜圖的效果截圖:

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

推薦系統(tǒng)工程篇之搭建以圖搜圖服務(wù)(以圖搜圖開源項(xiàng)目)

總體來說效果還是挺不錯的。

上線

推薦策略的上線方式有以下幾種:

  1. 直接服務(wù)線上,像排序模型。這種方式要求服務(wù)支持高并發(fā),高性能和高可用
  2. 線上調(diào)用 緩存,像內(nèi)容搜索。這種方式要求服務(wù)支持高性能和高可用,并且緩存有較大概率被命中
  3. 結(jié)果離線寫入緩存,像 cf,熱門等可以提前算好的結(jié)果。

導(dǎo)入了小視頻最近 7 天新增和最近 30 天曝光的視頻共 9 萬數(shù)據(jù)導(dǎo)入到單機(jī)模式的 Vearch 服務(wù)中,無法支撐兩個桶平均 48 QPS的沖擊,后使用第二種方式解決上線問題。而對應(yīng)用戶向量(播放的圖片向量均值)搜索圖片向量策略通過第三種方式上線的。

參考文獻(xiàn)

  1. Faiss 在項(xiàng)目中的使用
  2. faiss-web-service
  3. 基于gRPC的Faiss server實(shí)踐
  4. 京東分布式向量檢索系統(tǒng)vearch
  5. vearch中文文檔
  6. vearch核心引擎gamma
  7. vearch圖像處理插件
  8. 圖片搜索頁面

如果該文章對您產(chǎn)生了幫助,或者您對技術(shù)文章感興趣,可以關(guān)注微信公眾號: 技術(shù)茶話會, 能夠第一時間收到相關(guān)的技術(shù)文章,謝謝!

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實(shí),本站將立刻刪除。

成年美女黄网站色大免费视频| 亚洲av无码av日韩av网站| 日本xxxx色视频在线播放| 少妇真实被内射视频三四区| 公主从小H后必须夹玉势SM| 激情欧美日韩一区二区| 国产欧美日韩一区二区搜索| 把她按在桌上疯狂顶撞| 日本亲与子乱人妻hd| 亚洲砖码砖专无区2023| 99久久无码一区人妻| 无码精品人妻一区二区三区影院| 韩国三级大全久久网站| 泳池里强摁做开腿呻吟| a级毛片在线观看| 日本无码sm凌虐强制m字开腿| 日本孕妇大胆孕交无码| 久久精品中文字幕一区| 亚洲国产精品无码久久九九大片| 国产丰满麻豆videossexhd| 女人与公拘交酡zozo| 精品亚洲成a人在线观看| 人妻 丝袜美腿 中文字幕 | 亚洲日韩在线中文字幕综合| 亚洲爆乳精品无码一区二区三区| 日本真人做爰免费的视频| 英语老师解开裙子坐我腿中间| 初爱视频教程| 女人被躁到高潮嗷嗷叫游戏| 体育老师把我C了一节课作文| 含紧一点h边做边走动| 欧美极品少妇×XXXBBB| 国产99久久久国产精品~~牛| 欧美性大战xxxxx久久久| 日本肉体裸交xxxxbbbb| 小少爷撅着屁股挨c双龙| 美妙人妻系列100部| 久久国产欧美国日产综合抖音| 国内精品久久久久影视老司机| 国产一产二产三精华液| 人妻偷人va精品国产旡码|