天天看點

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

「在資訊爆炸的網際網路海洋中,有價值的資訊仍然是稀缺的」。知乎的誕生源于這樣一個非常簡單的初心。

而在挖掘真正有價值的資訊過程中,知乎很好地利用了 AI 技術。

在今年上海召開的 2020 世界人工智能大會雲端峰會開發者日「企業及 AI 架構專場」分論壇上,知乎合夥人、首席技術官李大海老師為分享了知乎作為一個内容社群,在 AI 架構上的搭建和應用。

李大海老師擁有多年的搜尋算法經驗,曾擔任 Google 中國軟體工程師,雲雲網工程總監,并曾擔任豌豆莢搜尋技術負責人,讓豌豆莢成為最早涉足應用内搜尋和 Deep Link 的公司。

2015 年李大海以合夥人身份加入知乎,先後負責知乎廣告技術團隊、資料、算法業務。在出任 CTO 之後,李大海統籌負責包括大資料團隊、内容流通、AI 新業務拓展等在内的知乎整體技術業務。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

以下為演講主要内容,機器之心進行了不改變原意的整理: 大家好,我是李大海。很榮幸代表知乎來世界人工智能大會開發者日做分享。特殊時期,以這種特殊的方式跟大家作交流,心情是很複雜的。2020 年上半年是非常不容易的半年,不過我們也很高興地看到,很多企業通過技術創新應對疫情,幫助大家維持正常的工作和生活。知乎也是其中的一員。

從 2016 年引入機器學習以來,AI 技術已經在知乎社群很多環節紮下根。以前我們講算法講得比較多,今天我想重點說一下我們在 AI 架構的搭建和應用上的經驗。

在知乎,我們的 AI 架構的不同是由不同的 AI 場景和實踐催生的。當然,介紹這些應用場景之前,我們應該先簡單了解一下知乎。知乎是一個内容社群,包括問答、熱榜、知識服務、圈子、直播等等各種産品功能和業務闆塊,沉澱了數億的問題、回答、專欄、電子書等等内容,這些内容每天都在被生産、分享、消費。對于一個平台來說,是一個浩大的工程。為了讓内容在社群運轉得更高效,知乎引入了 AI 技術。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

到目前為止,知乎的 AI 應用已經觸及到業務的方方面面,并且在實踐的過程中,逐漸形成幾個不同的算法架構。基礎 AI 架構

首先是基礎 AI 架構。2017 年,知乎成立專門的 AI 團隊,為各個業務提供一個基礎算法能力輸出。這個團隊基于知乎海量的内容及使用者行為資料,通過資料挖掘、機器學習、自然語言處理等技術,精準、全面地了解内容及使用者,并将基礎算法能力以标準統一的形式輸出,為公司各業務賦能。

AI 團隊自成立以來,為各種不同的業務提供了非常多的應用。随着時間的推移,也産生了一些痛點。比如說,由于沒有統一的系統開發架構,各個業務子產品和子項目都是單點作戰,隻有一個同僚清楚業務細節,并且建立一個項目要寫很多和業務無關腳手架類型的代碼。再比如,有的線上代碼沒經過代碼稽核、存在非主幹分支釋出、個人倉庫開發等問題,非常不利于協同和維護。另外,服務和子產品的複用性比較低,有些常用的邏輯,比如識别打壓大話題,被多人、多項目分别實作。另外,像監控不完善,部分問題發現不及時等等,都是小應用太多帶來的問題。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用
是以,急需統一的系統架構來整合所有資源,搭建穩定的基礎架構,加速 AI 技術積累并助力業務創新。
知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

我們首先考慮設計統一的基礎服務架構,統一定義基礎 AI 算法的工作流和資料流。有了這個統一架構之後,很友善在架構上添加監控、報警等等功能,及時發現可能出現的問題,提高服務品質、穩定性和可用率。

在設計良好的架構和統一代碼管理的模式下,友善我們去建構這個場景下的通用代碼庫,提高基礎功能的代碼複用率,并解決項目和代碼的散亂問題。

在統一的基礎服務架構上,團隊成員的開發工作模式一緻,并且溝通語言都是基于此,一定程度上會提升協作效率和溝通效率。

同時,開發人員更容易了解非自己主導項目的脈絡主線,可以極大地降低工作内容調整和交接的複雜度。從另一個角度提升了協作、溝通效率。

在統一的基礎服務架構下,團隊不再需要關心一些通用的細節,隻是按需調用 / 複用通用元件,将主要的精力用在解決問題的核心算法 / 模型上,這樣一來,加速了團隊的技術積累,快速地推進業務的創新。

這張圖可以簡單的展示知乎基礎 AI 架構的體系。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用
我們的統一架構取名叫 zai,本質上是一個工作流水線。其中的每個部件都是可定制的。workflow 分為三大類:

  • base workflow,通常隻包含一種推斷服務或預測服務。
  • series workflow ,其可以串聯多個不同的 base workflow,形成一個更複雜的服務鍊,比如關鍵詞服務,需要前序依賴分詞服務。
  • parallel workflow ,其可以并聯多種 series workflow,形成相對比較複雜的網絡,比如監聽内容建立 kafka topic,并分别進行多種預測處理。

在這個架構中,我們選擇 proto buffer 來進行資料 schema 的定義,滿足速率快和存儲小的需求。

zai-serving 是預測 / 推薦子產品,加載 zai-model 子產品訓練出來的模型來進行推斷服務。模型可以支援傳統模型和 NN 模型。其中 NN 模型基于 tensorflow estimator 做了改造和封裝,這樣具備以下優點:

  • 資料管道和模型分離。
  • 保留足夠的模型靈活度,具有模型自定義的自由和模型相關超參調整的自由。
  • 封裝了訓練、預測、評估、模型輸出;隻需要關心模型本身。

基礎 AI 架構的主要應用場景,一般是各種離線的資料處理場景。在典型的線上推薦場景中,我們也正在形成統一推薦架構。

統一推薦 AI 架構

當越來越多的業務都需要用到推薦服務時,我們開始了統一推薦架構的工作:我們期望通過統一 Ranking 架構,将推薦系統全局排序階段的技術統一,降低開發和維護成本,提高效率。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

知乎的統一推薦架構包括以下子產品:

  • 統一的完備的資料 schema,打通各業務線的資料,減少重複特征資料的落地成本,并成為統一推薦架構的标準輸入。
  • 統一的特征落盤服務,各業務線可根據業務特點,靈活填充 schema 中的特征字段,減少在特征落盤和訓練資料管理部分的開發工作。特定業務還可以低成本的實作跨部門資料複用,打通不同部門之間的資料協同作用。
  • 統一的訓練資料流水線。
  • 統一的特征工程架構。
  • 統一的訓練代碼庫。有利于模型結構複用,相容離線訓練和 online learning 訓練。
  • 統一的線上預測服務。支援 tensorflow 和 xgboost 的模型;支援模型的自動加載和更新;提供通用的特征、預測分數監控。支援 CPU 或 GPU 部署。優化公共特征計算。

我重點講一下其中的幾個子產品。

第一個是特征引擎。

特征資料處理,是要把結構化的特征資料(如使用者畫像,内容畫像等)轉換成向量化的訓練資料。我們的特征引擎具備以下功能:

  • 特征工程配置化:管理使用哪些特征;增删特征無需改代碼。避免了離線資料處理和線上預測服務代碼不一緻的情況。
  • 特征工程子產品化:我們把對特征資料的操作抽象成一個個操作子 (operator)。比如:Echo, OneHot 等。規範了 operator 的輸入輸出;每個 operator 可以處理不同的特征資料;大部分 operator 和具體的業務無關,代碼可複用性大大增強。每個 operator 必須有嚴格的單元測試,保證了特征工程代碼品質。
  • 結構化資料字段擷取動态加速,有效的提升效率。
  • 自定義向量化特征資料格式:避免了 parse protobuf 的序列化、反序列化 cpu 開銷,比 tensorflow 的 tf record 快很多,典型場景有 10 倍的性能差異。

第二個是特征落盤服務。

為了對特征覆寫率等名額進行監控,并讓落地的資料在多個業務之間低成本複用,特征在落地之前需要經過統一落盤處理。落盤服務提供的主要功能有:

  • 流式特征覆寫率統計監控,特征分布統計。
  • 樣本資料分流。大的樣本資料盡量落成一份,小的特殊業務可以進行靈活的分流。
  • 跨業務的進行特征補全。

未來,知乎的統一推薦架構将在三個方面進行完善和更新:

  • 一站式配置管理、資料流管理、特征監控、名額監控。
  • 通用化 online learning,讓更多業務可以直接用線上學習的優勢。
  • AutoML,降低業務使用機器學習模型的門檻。

社群治理、反作弊及多媒體 AI 架構

除了統一推薦,知乎還有一個很特殊的場景,就是社群治理。除了垃圾資訊、有害資訊的處理,一些對社群内容建設和人們的需求沒幫助的資訊,也在知乎的治理範圍内,比如答非所問、陰陽怪氣等等。這個場景沉澱出來的基礎架構,和前面提到的 zai 架構是比較相似的,但是整個架構針對圖檔、視訊等多媒體内容,做了很多特化的優化處理,比如通用的緩存轉碼之類的。具體細節在這裡就不贅述了。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

機器學習架構—Jeeves 機器學習平台

除了直接面向業務應用場景的三個架構之外,我們還建構了機器學習平台 Jeeves,用于幫助算法工程師快速建構、訓練和部署機器學習任務。Jeeves 将算法工程師從繁重的部署和配置工作中解放出來,專注于高品質模型的開發。 随着機器學習對 GPU 資源的需求快速增加,僅通過算法工程師自行管理、排程,不僅增加了業務部門管理成本,也造成了 GPU 等計算資源一定程度的浪費。具體包括以下幾點:

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用
  • 訓練前部署難。算法工程師需投入大量精力進行運作環境的配置和資源調配,不便于工程師專注于模型優化和調參。
  • 資源配置優化難。算法工程師難以判斷機器學習任務的性能瓶頸在哪種資源上(如 CPU、GPU、記憶體等),不便于全局優化資源調配。
  • 單機訓練瓶頸。縱向擴充成本高、提升小。機器學習需要快速疊代試錯,性能瓶頸制約了其最終産出的品質和速度。

Jeeves 将 Tensorflow 容器化,通過容器進行訓練資源的排程和管理,并為算法工程師提供友善的資源申請和釋放流程。具體來說,Jeeves 提供:

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用
  • 一鍵部署能力。算法工程師隻需要申請資源、載入訓練資料和代碼,即可一鍵部署環境并開展工作。
  • 資源消耗監控。監控資源在每個任務的消耗情況,便于識别瓶頸所在,針對性的進行性能優化和資源調配。
  • 算力水準擴充。支援分布式機器學習,支援算力的快速擴充。

下圖是 Jeeves 及其學習平台架構。Jeeves 通過容器管理 GPU 叢集的資源,底層使用 Docker 來隔離 GPU 資源,并通過 Kubernetes 對 Docker 容器進行排程。并提供訓練資料挂載,日志和模型的持久化的功能。同時 Jeeves 還會監測空閑資源并保證其及時回收,提高資源利用效率。 功能層面,Jeeves 主要提供兩類功能:一種是「筆記本」,用于線上互動式試驗訓練代碼;另一種是「項目」,用于建立單機或分布式訓練。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

筆記本為算法工程師提供互動式體驗和資料科學可視化的工具,使用者可以通過浏覽器快速疊代優化訓練代碼。對于不習慣使用浏覽器或者不友善使用浏覽器的使用者,Jeeves 還提供了 ssh notebook 的功能。 項目分為單機訓練和分布式訓練兩類。單機訓練使用一台獨立伺服器執行訓練任務;而分布式訓練根據使用者申請的資源用量,将任務合理拆分後,交由對應叢集執行。項目啟動後,Jeeves 會提供 TensorBoard,輔助使用者掌握訓練過程。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

總結

以上是知乎最近在 AI 應用實踐中逐漸沉澱出來的一些基礎架構和提效平台。AI 應用本質上是能夠對海量資料進行高效應用的前沿計算機算法系統,是以,過去正常計算機系統在資料規模和業務請求量增大到一定程度後,會遇到的各種問題,AI 應用也同樣會遇到。如果解決這些問題,就需要有良好的架構設計,否則再好的資料和模型,也都會受制于系統的計算能力和吞吐能力,不能發揮資料和模型完整的表達能力。是以,在工業界真實的生産環境中,AI 應用必須同時兼顧資料、算法和架構三者的投入。作個不太适當的比喻,這三者的關系就好像食材、菜單和廚具,要想把 AI 應用的使用者體驗這道菜做的色香味俱全,三樣東西每樣都要做好、做足、做精。

知乎CTO李大海:謝邀,來分享下内容社群的AI架構搭建與應用

通過這些架構的落地和應用,我們也希望知乎這個内容社群,能夠在更多的産品細節上,輕松使用各種 AI 技術,成為一個人與技術、人與機器、人文與技術有效融合「智能社群」。 最後,打個廣告,歡迎更多對 AI 技術有興趣和熱情的同學加入我們,加入知乎,一起做些更有趣、更有挑戰性的工作。我的分享就到這裡,謝謝大家。

本文為機器之心報道,轉載請聯系本公衆号獲得授權。

繼續閱讀