案例簡介
本案例中,阿里巴巴本地生活場景中,部署了大量使用 TensorFlow 的深度學習推薦模型,這些模型需要對每個用戶附近的數千家商戶和產品進行排名,對用戶響應時間和業務吞吐量(QPS)要求極高。為了滿足這樣的要求 GPU 落地使用是必然,但由于 TensorFlow 目前對 GPU 使用采用單一 steam 方式,并且逐個調用 GPU 算子的過程中存在大量的 GPU kernel 啟動開銷, 因此如何在這些系統中充分發揮 GPU 計算能力則需要探索。
阿里巴巴本地生活推薦系統結合 NVIDIA CUDA Graphs 對 GPU 進行算力釋放優化,讓推理過程單機吞吐增長 110%,耗時 P99 下降 66.7%。
本案例主要應用到 NVIDIA V100 Tensor Core GPU 和 NVIDA CUDA Graphs。
客戶簡介及應用背景
阿里巴巴集團旗下的阿里巴巴本地生活服務公司,是由餓了么和口碑會師合并組成國內領先的本地生活服務平臺,使命是“重新定義城市生活,讓生活更美好。”口碑專注到店消費服務,餓了么專注到家生活服務,蜂鳥即配專注即時配送服務,客如云專注為商家提供數字化升級的產品和服務,共同推動本地生活市場的數字化,讓天下沒有難做的生意。
阿里巴巴本地生活服務公司智能推薦系統基于智能AI系統對用戶所在區域萬級商戶商品進行實時智能推薦和服務。實時智能推薦伴隨著深度學習技術的發展,為了追求智能推薦的準確度,推薦模型朝著兩個維度快速發展:1. 更寬更深的網絡,更復雜的特征增強方式。2. 更多的不同維度的特征。這對在線推理階段的實時性能和算力提出了更高的挑戰。伴隨著搜索推薦模型的在 GPU 的廣泛落地使用,GPU 在各個場景下的算力優化也被廣泛關注。
在線 Inference 過程中,由于考慮到存儲 cache 的友好性,會把計算密集型算子和其周邊的數據變換算子都在 GPU 中執行,算子數量的增長會導致嚴重的 kernel 啟動開銷,主要原因是:1. 大量小 kernel 的執行
2. TensorFlow 的調度機制使得通過大量的線程啟動 kernel 到同一個 stream 中;多個線程競爭同個資源加劇 launch 開銷。
客戶挑戰
在阿里巴巴本地生活推薦搜索場景中,有大量的深度學習模型在用戶和商戶,用戶和商品匹配場景中使用,但是總體來看 GPU-Utilization 并不高,GPU 使用成本顯得比較高。隨著模型復雜度不斷攀升(Inference 計算達到 10~20 GFLOPS),算法同學的收益產出一定程度上和模型復雜度成正比關系。目前搜推廣的模型設計中部分子結構設計和變換很多,但是基本范式如下:
Feature Generation -》 Embedding -》 Attention/Transformer -》 MLP
綠色部分基本屬于計算密集型部分,但是在搜推廣場景中,這部分算子不但包含對于算力需求旺盛的深度網絡相關算子,也包含數據合并,數據變換等輕量級計算算子,這類算子的特點是:運算時長通常很短(1-10 微秒),而且這一類輕量級計算算子的數量伴隨著 Transformer 的落地,數量占比逐步增高。
我們從另一個角度來量化這一過程輕量級計算算子的數量占比,GPU 的繁忙情況通常來說有兩個指標:
1. GPU-Utilization,表示 GPU 在單位時間內在執行 kernel 的時間片比例。
2. SM Activity,表示 GPU 中 SM 在單位時間內用于執行 kernel 的 SM 使用比例*時間片比例。
我們可以看到在推薦搜索模型線上 Inference 過程中 SM Activity 通常遠遠低于 GPU-Utilization,這表示 GPU 雖然在忙碌,但是由于輕量級計算算子的數量占比較高,SM 使用比例使用比例不高,GPU 的實際 “工作量” 并不大。
輕量級計算算子的比例高會導致該部分算子在 CPU 上調度過程中 kernel launch 的執行時長遠遠大于算子在 GPU 上的執行時長,這個現象會導致嚴重的 kernel launch bound 現象。
應用方案
基于以上挑戰,阿里巴巴本地生活搜索推薦模型選擇了 NVIDIA 提供的 AI 加速方案:CUDA Graphs。
1、首先,我們根據業務場景的具體問題,使用 NVIDIA Nsight Systems 進行問題定位和分析。我們利用 NVIDIA Nsight Systems 集成到線上 Inference 環境中,獲取了真實環境下 Inference 過程的 GPU Profing 文件。通過 Profing 文件,我們可以清晰的看到 Inference 過程中,kernel launch bound 現象異常嚴重,符合我們的分析預想(如下圖)。
2、后續,我們采用集成 CUDA Graphs 進行模型 Inference 過程優化,理論上 CUDA Graphs 會大幅緩解 kernel launch bound 現象,因為 CUDA Graphs 會合并 N 個 kernel 獨立的 launch 操作,變為 1 個 graph launch 操作,這樣 kernel launch 不再是整個推理的瓶頸(如下圖)。
使用效果及影響
經過集成 NVIDIA Nsight System 進行 GPU 使用情況查看和細節問題的診斷,我們充分了解和分析了業務中對 GPU 的使用情況的 kernel 執行流程。對性能進一步優化起到了指導作用。后續集成 CUDA Graphs 后,符合預期效果。推薦深度學習模型在 Inference 過程中的耗時 P99 下降 66%,單機吞吐提升 110%。讓用戶在毫無感知的時間范圍內完成了模型算力達到 10 GFLOPS 的 Inference 過程,用戶體驗得到了極大的提升。
在使用 NVIDIA Nsight Systems 進行 GPU 瓶頸分析過程中,文檔查閱和使用教程很方便上手,集成過程也較為方便,指標介紹很豐富,快速完成 GPU 使用情況分析。后續 CUDA Graphs 使用過程中,相關文檔也比較完善,包括圖的切割和分裝,算子 Capture 標準等。
本次優化過程,團隊內部積累了一套較為完善的 GPU 優化手段和優化方法理論,后續遇到其他模型性能問題時也有的放矢。多場景進行優化后,對整個 GPU。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5299瀏覽量
106267 -
gpu
+關注
關注
28文章
4937瀏覽量
131143 -
AI
+關注
關注
88文章
35010瀏覽量
278816
發布評論請先 登錄
普華基礎軟件蒞臨阿里巴巴達摩院調研交流
阿里云爆發式的跨越

評論