公司簡介
杭州知衣科技有限公司是一家以人工智能技術(shù)為驅(qū)動(dòng)的國家高新技術(shù)企業(yè),致力于將數(shù)據(jù)化趨勢(shì)發(fā)現(xiàn)、爆款挖掘和供應(yīng)鏈組織能力標(biāo)準(zhǔn)化輸出,打造智能化服裝設(shè)計(jì)的供應(yīng)鏈平臺(tái)。知衣成立于2018年2月,同年獲得千萬美金A輪融資;2021年完成由高瓴創(chuàng)投、萬物資本領(lǐng)投的2億人民幣B輪融資,同年入圍“杭州市準(zhǔn)獨(dú)角獸企業(yè)榜單”。
知衣憑借圖像識(shí)別、數(shù)據(jù)挖掘、智能推薦等核心技術(shù)能力,不斷升級(jí)服務(wù)體系,自主研發(fā)了知衣、知款、美念等一系列服裝行業(yè)數(shù)據(jù)智能SaaS產(chǎn)品,為服裝企業(yè)和設(shè)計(jì)師提供流行趨勢(shì)預(yù)測(cè)、設(shè)計(jì)賦能、款式智能推薦等核心功能,并通過SaaS入口向產(chǎn)業(yè)鏈下游拓展,提供一站式設(shè)計(jì)+柔性生產(chǎn)的供應(yīng)鏈平臺(tái)服務(wù)。目前已服務(wù)UR、唯品會(huì)、綾致、赫基、太平鳥、海瀾之家、森馬等數(shù)千家時(shí)尚品牌和平臺(tái)。
方案架構(gòu)
當(dāng)前知衣在阿里云上的整體方案架構(gòu)如下,大致分為產(chǎn)品層、服務(wù)層、數(shù)據(jù)層以及大數(shù)據(jù)平臺(tái)。
產(chǎn)品層:知衣目前有多款A(yù)PP應(yīng)用,如主打產(chǎn)品知衣、增強(qiáng)設(shè)計(jì)協(xié)作的美念等。除此之外,我們還提供定制化API向第三方開放數(shù)據(jù)接口服務(wù)和以圖搜圖的功能。從數(shù)字選款到大貨成品交付的一站式服裝供應(yīng)鏈平臺(tái)也是核心的能力輸出。
服務(wù)層:相關(guān)產(chǎn)品的前后端系統(tǒng)都已經(jīng)實(shí)現(xiàn)容器化,部署在阿里云的ACK容器服務(wù)集群
數(shù)據(jù)層:主要保存原始圖片、業(yè)務(wù)系統(tǒng)產(chǎn)生的業(yè)務(wù)數(shù)據(jù)、以及OLAP數(shù)據(jù)分析服務(wù)
對(duì)象存儲(chǔ)OSS:保存原始圖片,構(gòu)建服裝行業(yè)十億級(jí)別款式庫
數(shù)據(jù)庫MySQL:OLTP業(yè)務(wù)數(shù)據(jù)
HBase:以KV格式訪問的數(shù)據(jù),如商品詳細(xì)信息、離線計(jì)算榜單等數(shù)據(jù)
特征向量庫:由圖片識(shí)別抽取的向量再經(jīng)過清洗后保存在阿里達(dá)摩院開發(fā)的Proxima向量檢索引擎庫
ElasticSearch:用于點(diǎn)查及中小規(guī)模數(shù)據(jù)的指標(biāo)統(tǒng)計(jì)計(jì)算。設(shè)計(jì)元素標(biāo)簽超過1000個(gè),標(biāo)簽維度主要有品類、面料、紋理、工藝、輔料、風(fēng)格、廓形、領(lǐng)型、顏色等
大數(shù)據(jù)平臺(tái)
日志服務(wù)SLS:用于緩存經(jīng)過圖片識(shí)別后的海量向量數(shù)據(jù)。SLS還有一個(gè)基于SQL查詢的告警能力,就是若向量數(shù)據(jù)沒有進(jìn)來會(huì)觸發(fā)告警,這對(duì)于業(yè)務(wù)及時(shí)發(fā)現(xiàn)問題非常有用。
離線數(shù)倉(DataWorks + MaxCompute):通過DataWorks集成緩存了圖片特征向量的日志服務(wù)作為數(shù)據(jù)源,然后創(chuàng)建數(shù)據(jù)開發(fā)任務(wù)對(duì)原始特征向量進(jìn)行清洗(比如去重等)保存在MaxCompute,再通過DataWorks將MaxCompute清洗后的向量數(shù)據(jù)直接寫入ElasticSearch的Proxima
數(shù)據(jù)挖掘 & 算法推薦:部署在ACK里的一些Python任務(wù),主要做推薦相關(guān)的內(nèi)容,比如用戶特征Embedding計(jì)算、基于用戶行為的款式圖片的推薦、相似性博主的推薦等
圖片識(shí)別服務(wù):目前圖片識(shí)別服務(wù)主要還是部署在IDC機(jī)房,5~6臺(tái)GPU服務(wù)器對(duì)圖片進(jìn)行批量識(shí)別
大數(shù)據(jù)方案演進(jìn)
知衣的大數(shù)據(jù)方案也是經(jīng)過不同的階段不斷的演進(jìn),滿足我們?cè)诔杀、效率和技術(shù)方面的追求,本質(zhì)上還是服務(wù)于業(yè)務(wù)需求。
階段一:IDC自建CDH集群
我們的業(yè)務(wù)系統(tǒng)一開始就部署在阿里云,同時(shí)在IDC機(jī)房部署了10臺(tái)服務(wù)器搭建CDH集群,構(gòu)建Hive數(shù)倉。計(jì)算過程是先將云上生產(chǎn)環(huán)境數(shù)據(jù)同步到CDH,在CDH集群進(jìn)行計(jì)算后將計(jì)算結(jié)果再回傳到阿里云上提供數(shù)據(jù)服務(wù)。
自建CDH集群雖然節(jié)省了計(jì)算費(fèi)用,但是也帶來不少問題。最主要的就是運(yùn)維比較復(fù)雜,需要專業(yè)的人員進(jìn)行集群的運(yùn)維管理。出現(xiàn)問題也是在網(wǎng)上到處搜索排查原因,效率比較低。
階段二:DataWorks + MaxCompute替換CDH集群
為了降低運(yùn)維復(fù)雜度,我們將計(jì)算任務(wù)遷移到MaxCompute,直接基于DataWorks做任務(wù)編排調(diào)度。
階段三:ElasticSearch構(gòu)建即席查詢
知款聚焦于快速發(fā)現(xiàn)時(shí)尚趨勢(shì)靈感,集成了社交平臺(tái)、品牌秀場(chǎng)、零售及批發(fā)市場(chǎng)、淘系電商、時(shí)尚街拍五大圖源,海量的設(shè)計(jì)靈感參考,幫助服裝品牌及設(shè)計(jì)師快速準(zhǔn)確地預(yù)判時(shí)尚風(fēng)向,掌握市場(chǎng)動(dòng)態(tài)。其中趨勢(shì)分析板塊就需要對(duì)某個(gè)季度下各種組合條件下的設(shè)計(jì)要素標(biāo)簽進(jìn)行統(tǒng)計(jì)分析,并輸出上升、下降以及餅圖等指標(biāo)。這也是我們數(shù)據(jù)量最大的查詢場(chǎng)景,掃描分析的數(shù)據(jù)量量級(jí)會(huì)接近百萬。
阿里云托管版ElasticSearch相比較開源版本最大優(yōu)點(diǎn)就是開箱即用免運(yùn)維,特別的就是支持達(dá)摩院的Proxima向量檢索引擎,非常適合我們業(yè)務(wù)的多維查詢和統(tǒng)計(jì)分析場(chǎng)景。后面會(huì)在圖片識(shí)別展開講述Proxima向量引擎。
圖片識(shí)別
我們的核心功能場(chǎng)景是以圖搜圖,前提是需要對(duì)海量的圖片庫數(shù)據(jù)進(jìn)行識(shí)別。我們以離線的方式對(duì)圖片庫的所有圖片進(jìn)行機(jī)器學(xué)習(xí)分析,將每一幅圖抽象成高維(256維)特征向量,然后將所有特征借助Proxima構(gòu)建成高效的向量索引。
模型訓(xùn)練
圖片識(shí)別之前需要訓(xùn)練模型。由專業(yè)的服務(wù)行業(yè)背景的人員對(duì)圖片庫進(jìn)行標(biāo)注,然后線下部署的GPU集群從阿里云對(duì)象存儲(chǔ)OSS批量拉取已標(biāo)注的圖片進(jìn)行訓(xùn)練。為了降低標(biāo)注的成本,我們采用了主動(dòng)學(xué)習(xí)(Active Learning)方法,即基于一部分已標(biāo)注的圖片由機(jī)器學(xué)習(xí)訓(xùn)練出一個(gè)模型,然后對(duì)未標(biāo)注的圖片進(jìn)行預(yù)測(cè),讓人工對(duì)預(yù)測(cè)結(jié)果再次進(jìn)行確認(rèn)和審核,再將標(biāo)注的數(shù)據(jù)使用監(jiān)督學(xué)習(xí)模型繼續(xù)進(jìn)行模型訓(xùn)練,逐步提升模型效果。
批量圖片識(shí)別
模型生成以后打包到Docker鏡像,然后在GPU節(jié)點(diǎn)上運(yùn)行容器服務(wù)就可以對(duì)海量的服裝圖片進(jìn)行識(shí)別,提取出高維的特征向量。因?yàn)樘崛〉奶卣飨蛄繑?shù)據(jù)量很大且需要進(jìn)行清洗,我們選擇將特征向量先緩存在阿里云日志服務(wù)SLS,然后通過DataWorks編排的數(shù)據(jù)開發(fā)任務(wù)同步SLS的特征向量并進(jìn)行包含去重在內(nèi)的清洗操作,最后寫入向量檢索引擎Proxima。
因?yàn)橐淮闻孔R(shí)別圖片的工作量很大,線下的GPU服務(wù)器計(jì)算性能有瓶頸,所以我們就借助云上彈性的GPU資源做計(jì)算資源的補(bǔ)充。線下GPU和云上GPU組成一個(gè)計(jì)算資源池,共同消費(fèi)同一批需要進(jìn)行圖片識(shí)別的計(jì)算任務(wù),效率大大提升。云上我們購買的是GPU搶占式實(shí)例,一般是按量價(jià)格的2~3折,可以進(jìn)一步降低成本。
單次圖片識(shí)別
我們以在線serving的模式在web前端提供單次單張圖片識(shí)別功能,比如用戶上傳一張圖片,通過模型的推理輸出如下結(jié)果。
以圖搜圖
構(gòu)建好服裝圖片的特征向量庫,我們就可以實(shí)現(xiàn)以圖搜圖的功能。當(dāng)用戶上傳一張新圖片的時(shí)候,我們用之前的機(jī)器學(xué)習(xí)方法對(duì)其進(jìn)行分析并產(chǎn)出一個(gè)表征向量,然后用這個(gè)向量在之前構(gòu)建的向量索引中查找出最相似的結(jié)果,這樣就完成了一次以圖片內(nèi)容為基礎(chǔ)的圖像檢索。選擇合適的向量檢索引擎非常重要。
Faiss
Faiss (Facebook AI Similarity Search) 是Facebook AI 團(tuán)隊(duì)開源的向量檢索庫引擎。初期我們也是選擇Faiss部署分布式服務(wù),在多臺(tái)GPU服務(wù)器上部署特征向量搜索匹配服務(wù),將搜索請(qǐng)求分發(fā)到每臺(tái)GPU子服務(wù)進(jìn)行處理,然后將TOP N的相似結(jié)果數(shù)據(jù)匯總返回給調(diào)用方。
在使用Faiss的過程中,我們也遇到了實(shí)際的困難。當(dāng)然這并不是Faiss本身的問題,而是需要投入更多人力開發(fā)運(yùn)維分布式系統(tǒng)才能匹配業(yè)務(wù)需求。
穩(wěn)定性較差:分布式GPU集群有5~6臺(tái),當(dāng)某一臺(tái)機(jī)器掛了會(huì)拉長整個(gè)接口響應(yīng)時(shí)間,業(yè)務(wù)的表現(xiàn)就是搜圖服務(wù)等很久才有結(jié)果返回。
GPU資源不足:我們采用的是最基礎(chǔ)的暴力匹配算法,2億個(gè)256維特征向量需要全部加載到顯存,對(duì)線下GPU資源壓力很大。
運(yùn)維成本高:特征庫分片完全手動(dòng)運(yùn)維,管理比較繁瑣。數(shù)據(jù)分片分布式部署在多個(gè)GPU節(jié)點(diǎn),增量分片數(shù)據(jù)超過GPU顯存,需要手動(dòng)切片到新的GPU節(jié)點(diǎn)。
帶寬爭搶:圖片識(shí)別服務(wù)和以圖搜圖服務(wù)都部署在線下機(jī)房,共享300Mb機(jī)房到阿里云的專線帶寬,批量圖片識(shí)別服務(wù)占用大帶寬場(chǎng)景下會(huì)直接導(dǎo)致人機(jī)交互的圖搜響應(yīng)時(shí)間延長。
特定場(chǎng)景下召回結(jié)果集不足:因?yàn)樘卣鲙毂容^大,我們?nèi)斯⑻卣鲙觳鸪?0個(gè)分片部署在多臺(tái)GPU服務(wù)器上,但由于Faiss限制每個(gè)分片只能返回1024召回結(jié)果集,不滿足某些場(chǎng)景的業(yè)務(wù)需求。
Proxima
Proxima是阿里達(dá)摩院自研的向量檢索引擎(https://developer.aliyun.com/article/782391),實(shí)現(xiàn)了對(duì)大數(shù)據(jù)的高性能相似性搜索,也集成在我們之前在用的阿里云托管版的ElasticSearch。功能和性能上與Faiss相比各有千秋,主要是針對(duì)Faiss使用上的困難,ElasticSearch + Proxima幫助我們解決了。
穩(wěn)定性高:開箱即用的產(chǎn)品服務(wù)SLA由阿里云保障,多節(jié)點(diǎn)部署的高可用架構(gòu)。到目前為止,極少碰到接口超時(shí)問題
算法優(yōu)化:基于圖的HNSW算法不需要GPU,且與Proxima集成做了工程優(yōu)化,性能有很大的提升(1000萬條數(shù)據(jù)召回只需要5毫秒)。目前業(yè)務(wù)發(fā)展特征向量已經(jīng)增長到3億。
運(yùn)維成本低:分片基于ES引擎,數(shù)據(jù)量大的情況下直接擴(kuò)容ElasticSearch計(jì)算節(jié)點(diǎn)就可以
無帶寬爭搶:以圖搜圖的服務(wù)直接部署在云上,不占用專線帶寬,圖搜場(chǎng)景下沒有再出現(xiàn)超時(shí)查詢告警
召回結(jié)果集滿足業(yè)務(wù)需求:Proxima也是基于segment分片取Top N相似,聚合后再根據(jù)標(biāo)簽進(jìn)行過濾。因?yàn)閟egment較多,能搜索到的數(shù)據(jù)量就比原先多很多。
技術(shù)架構(gòu)升級(jí)展望
OLAP分析場(chǎng)景優(yōu)化迭代
隨著數(shù)據(jù)量的不斷增長以及業(yè)務(wù)需求的不斷變化,OLAP分析場(chǎng)景越來越復(fù)雜,對(duì)算法和技術(shù)方案選型要求越來越高。舉個(gè)業(yè)務(wù)場(chǎng)景的例子:
10萬博主發(fā)布的圖片數(shù)量有1億多,用戶可以對(duì)博主進(jìn)行關(guān)注訂閱,關(guān)注上限是2000個(gè)博主。用戶關(guān)注的2000個(gè)博主對(duì)應(yīng)的圖片量級(jí)會(huì)在200萬左右。需要對(duì)用戶關(guān)注的圖片進(jìn)行實(shí)時(shí)多條件統(tǒng)計(jì)分析(每個(gè)用戶關(guān)注博主不同)
以上例子在使用Elasticsearch實(shí)現(xiàn)查詢的時(shí)候需要9秒,顯然不滿足業(yè)務(wù)需要。那有沒有更好的方案呢?近期在調(diào)研完Clickhouse之后,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理產(chǎn)生大寬表再查詢,查詢時(shí)延已經(jīng)降低到2秒以內(nèi),很好的滿足了業(yè)務(wù)需求。阿里云Clickhouse開箱即用,降低業(yè)務(wù)試錯(cuò)成本,幫助我們快速響應(yīng)業(yè)務(wù)需求。
規(guī)范數(shù)據(jù)建模和數(shù)據(jù)治理
目前DataWorks主要是用來做數(shù)據(jù)集成和任務(wù)調(diào)度,也有些少量的基于規(guī)則判斷數(shù)據(jù)質(zhì)量,團(tuán)隊(duì)內(nèi)部的約定更多的是文檔化的開發(fā)規(guī)范,缺乏一些有效工具的輔助。隨著業(yè)務(wù)場(chǎng)景越來越復(fù)雜,集成的數(shù)據(jù)源越來越豐富,數(shù)據(jù)開發(fā)人員也越來越多,制定全部門統(tǒng)一的開發(fā)規(guī)范非常必要。DataWorks的數(shù)據(jù)建模通過工具和流程建立數(shù)據(jù)標(biāo)準(zhǔn),可以實(shí)現(xiàn)結(jié)構(gòu)化有序的統(tǒng)一管理。數(shù)據(jù)治理模塊可以通過配置檢查項(xiàng)檢測(cè)不符合數(shù)據(jù)規(guī)范的開發(fā)流程,基于多項(xiàng)治理項(xiàng)的健康分度量項(xiàng)目健康度以及治理成效。目前我們正在結(jié)合自己的業(yè)務(wù)試用數(shù)據(jù)建模和數(shù)據(jù)治理,期待能幫助我們更好的管理數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)價(jià)值的最大化。
圖搜方案進(jìn)階合作
在服裝行業(yè)領(lǐng)域圖片識(shí)別和以圖搜圖是我們的核心競(jìng)爭力。阿里云機(jī)器學(xué)習(xí)PAI也提供了相似圖匹配的圖像檢索解決方案(https://help.aliyun.com/document_detail/313270.html)只需要配置原始圖像數(shù)據(jù),無需標(biāo)注就可以在線構(gòu)建模型,這點(diǎn)對(duì)我們來說比較有吸引力,后續(xù)可以考慮進(jìn)行測(cè)試對(duì)比,展開在服裝圖片建模領(lǐng)域的合作。