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