2020 Techo Park開發者大會召開,作業幫分享拍搜系統架構演變歷程
(原標題:2020 Techo Park開發者大會召開,作業幫分享拍搜系統架構演變歷程)
12月19日至20日,由騰訊主辦的2020 Techo Park開發者大會於北京召開。據悉,本次大會邀請了全球超200位頂級技術專家來到現場,與數千位參會者就雲計算、大數據和人工智能等前沿技術話題展開深度交流,爲中國及全球雲計算愛好者、從業者、開發者提供最具參考價值的創新分享。
作業幫視覺智能實驗室架構負責人程童受邀參加大會,並發表了題爲《作業幫拍照搜題系統架構的演變》的主題演講,系統地介紹了作業幫拍搜系統概況、不同階段面臨的問題和應對方法,以及GPU服務虛擬化的實踐經歷和取得的遷移效果。
作爲中國最大的K12在線教育公司,作業幫致力於用科技助力教育普惠,解決教育領域痛點,旗下擁有作業幫、作業幫直播課、作業幫口算、鴨鴨AI課、智能硬件喵喵機等多款教育產品,總日活用戶超5000萬,月活用戶超1.7億,累計激活用戶設備超8億。其中,作業幫APP是進入中國應用市場Top30的唯一一款教育類APP,作業幫直播課是中國在線教育領軍品牌,累計服務學員已超6500萬。
在作業幫的整套產品鏈條中,拍搜系統提供了底層的技術支持。據程童介紹,作業幫拍搜系統擁有多項OCR、檢索、系統專利,率先在業界實現“隨手一拍,秒出答案”。與此同時,隨着拍搜功能的不斷拓展,作業幫完成了從單題到整頁再到猜你想拍,從搜索到批改再到打分的全方位搜題場景設定,充分幫助學生提高學習效率。
據瞭解,作業幫拍搜算法架構主要分爲OCR和檢索兩部分。其中,OCR系統主要任務是將所拍內容識別成文本,由多個策略&預處理模塊,以及大量使用GPU作爲運算設備的深度學習在線推理服務組成;而檢索系統的主要任務是通過識別出的文本檢索答案,包含策略層、正排系統、倒排系統和離線建庫四個主要部分,針對拍照搜題這個垂直領域進行了大量的策略優化。
程童表示:“針對用戶在不同使用場景下可能出現的模糊、傾斜、低像素、干擾等各類拍照問題,作業幫在持續5年以上的自主研發和數據積累中,不斷進行算法迭代和架構完善。”
在一次完整的文字識別流水線中,作業幫拍搜系統擁有超30種不同的神經網絡各司其職,平均一次識別可運行260次以上的神經網絡預測。此外,通過構建大規模的並行GPU集羣,平均只需要200毫秒,便可完成一次完整的識別流程,且作業幫系統在一分鐘可完成百萬次這樣的搜題請求。對於識別出的題目內容,系統可以在索引量超過3億的題庫搜索引擎中進行匹配,確保用戶獲取更全面和準確的信息。
從更快更準到快速應變,有限算力下的極限探索
程童在演講中提到,在過去的六年裡,作業幫拍搜系統以兩年爲進化週期,大致可分爲三個發展階段,每個階段因業務場景和系統規模不同,面臨的問題也有所不同。2015年至2016年屬於第一階段,作業幫拍搜系統業務剛起步,需要解決的核心問題是更快和更準。更快是爲了提供更好的用戶體驗,更準則容易形成口碑傳播,吸引更多用戶。
爲了實現“隨手一拍,秒出答案”的效果,作業幫視覺智能實驗室工程架構團隊從並行計算、調度策略、工程實現三方面做出了努力。團隊率先將GPU用於在線推理服務:使用CPU做預處理,利用GPU強大的並行運算能力運行深度神經網絡,上線後取得了10倍的加速效果,平均耗時從3秒以上縮短至300多毫秒,後續持續優化到平均200毫秒。團隊還自研輕量級RPC框架,設計適合多GPU協同的線程池和調度策略,高峰期GPU利用率達到90%以上。
伴隨業務流量的持續上漲,作業幫拍搜系統在2017年至2018年進入發展的第二階段,不斷擴張的業務引入了更多的算法模型,需要不斷開發交付新的服務;算力需求的快速上漲又帶來了成本上的壓力。這兩年,團隊在開發和運維雙線面臨挑戰。
團隊迅速調整策略,制定應對方案。首先,優先滿足業務發展需求,儘快交付服務,確保算法模型的快速上線;同時,盡力優化系統環境,減少技術債務。例如,針對環境異構的問題,團隊通過升級接入層,優化自研RPC客戶端,滿足多機房、多機型負載均衡以及實驗分流需求;通過遷移服務器的機會收斂異構機型和環境;不斷根據業務情況調整優化系統部署,將日常操作自動化,提高管理效率。
經過技術團隊不懈努力,在業務不斷擴展、流量持續增加的情況下,系統有力支撐了作業幫拍照搜題類業務的發展,自身也成長到了一定規模。
2019-2020年系統進入到第三階段,針對前期發展過程中的各種問題,程童和團隊沒有停留於表面,而是不斷回顧、總結和深挖,認爲之前出現的很多問題,表現出的形式是性能和穩定性相關,但實際上是因爲系統靈活性不足。在人力有限的前提下,以物理機(bare metal,裸金屬服務器)作爲資源分配和系統管理的最小單位,無法突破兩個矛盾,即日益頻繁的變動與系統管理之間的矛盾,和日益增長的需求與資源管理之間的矛盾。爲了突破這一瓶頸,團隊選擇了虛擬化,具體實現形式是K8s和容器。
對於爲什麼選擇K8s,程童解釋道:“在最關鍵的資源分配環節,K8s突破了機器的邊界,將資源抽象整合爲資源池,應用按需申請,由調度器分配,解決了資源管理的矛盾;而通過抽象出pod、deployment、service等概念,可低成本實現應用整個生命週期的自動化,解決了系統管理的矛盾。”
爲了減小系統遷移的風險,團隊制定了漸進式的遷移步驟,首先對環境進行標準化,對一些不適合容器環境使用的組件或功能進行改造;之後將整個系統容器化運行,瞭解和掌握相關數據;最後實現灰度環境驗證和線上系統遷移。針對K8s原生不支持按顯存調度的問題,團隊也通過研發調度插件給出瞭解決方案。
從目前的遷移效果來看,通過更細顆粒度的資源分配和服務混部,部分集羣遷移後節省了50%的機器資源,資源利用率也大大提升;而通過遷移獲得的彈性伸縮能力,可以讓系統在應對流量高峰時更遊刃有餘;相比於集羣調整平均需要2小時的物理機時代,如今平均只需要10分鐘即可完成;而在故障處理方面,也從原來的平均20分鐘縮短至平均5分鐘,對於簡單故障,系統可以實現無人工介入。
在程童看來,遷移效果遠不止如此,虛構化改造所帶來的靈活性,讓之前許多不方便的事情變得更加便捷,創造了許多可能性。未來,作業幫技術團隊將持續搭建先進技術系統,不斷突破在線教育發展所遇到的技術難題,真正實現以科技賦能在線教育創新發展。