你已經建立了你的深度學習推理模型并將它們部署到 NVIDIA Triton Inference Serve 最大化模型性能。 你如何進一步加快你的模型的運行速度? 進入 NVIDIA模型分析器 ,一個收集模型計算需求的工具。
沒有這些信息,在理解在GPU上運行多少模型方面就存在知識差距。 通過收集冷熱儲存需求,您可以使用它們通知模型的調度,以獲得幾個好處:
最大化模型吞吐量—確保放置在每個GPU上的模型總和不超過可用內存和GPU利用率的特定閾值,例如100%。這樣可以最大限度地提高硬件的吞吐量。
優化硬件使用—檢查GPU內存需求,以便在較少硬件上運行更多型號。您可以使用此數據來確定每個GPU可以加載的最大模型數,而不是優化吞吐量,從而減少所需的硬件,或者權衡吞吐量的權衡。
提高了可靠性—通過了解在GPU上加載的模型不會超出其能力,消除內存不足錯誤。
此外,還有兩個關鍵的非調度好處:
有效的模式—比較和對比不同的模型,將計算需求作為一個額外的數據點來衡量模型的性能。這有助于生成更輕量級的模型,并減少推理所需的內存量。
更好的硬件尺寸—使用內存需求確定運行模型所需的確切硬件數量。
總之,理解推理模型的計算要求提供了從模型創建和硬件大小到模型的可靠、高效運行的大量好處。 下面我們來看看ModelAnalyzer,看看它如何為最高性能的推理解決方案做出貢獻。
獲取模型分析器Docker容器
在使用推理服務器容器之前,必須安裝一些軟件,如Docker。 有關更多信息,請參見 安裝Docker和NVIDIA Docke 一節進去 NVIDIA Docker:GPU服務器應用程序部署容易.
模型分析器作為Helm圖表、Docker容器或獨立命令行接口運行。 對于本教程,您可以從源代碼the構建Docker容器 triton-inference-server/model_analyzer Github回購。
git clone https://github.com/triton-inference-server/model_analyzer.git cd model_analyzer docker build -t memory-analyzer
要為您的模型運行容器,請確保端口8000、8001和8002可用。 然后,運行以下命令,替換大寫參數:
docker run -v /var/run/docker.sock:/var/run/docker.sock / -v /ABSOLUTE/PATH/TO/MODELS:ABSOLUTE/PATH/TO/MODELS / -v /ABSOLUTE/PATH/TO/EXPORT/DIRECTORY:/results --net=host / memory-analyzer:ANALYZER-VERSION / --batch BATCH-SIZES / --concurrency CONCURRENCY-VALUES / --model-names MODEL-NAMES / --triton-version TRITON-VERSION / --model-folder /ABSOLUTE/PATH/TO/MODELS / --export --export-path /results/
這里有一個示例命令供參考:
docker run -v /var/run/docker.sock:/var/run/docker.sock / -v /home/user/models: /home/user/models / -v /home/user/results:/results --net=host / memory-analyzer:latest / --batch 1,2,4 / --concurrency 1,2,4 / --model-names chest_xray,covid19_xray/ --triton-version 20.02-py3 / --model-folder /home/user/models / --export --export-path /results/
容器完成后,每個模型、批處理大小和并發值的度量將導出到您選擇的目錄中。 信息是通過在系統運行時收集度量來收集的,因此在一個孤立的GPU或僅運行模型分析器的系統上運行它是理想的。
使用計算需求進行優化
下面是如何使用這些度量來優化系統性能。 我們討論了兩個使用醫學推斷模型的案例研究:
第一個案例研究探討了如何將間歇性運行的系統的硬件最小化,例如需要在最小硬件上運行許多模型的低成本醫療提供商。
第二個案例研究探討了使用最少的硬件來最大化這些相同模型的吞吐量,例如在一致的基礎上運行許多模型的大型急診室。
這兩個案例研究都是手動完成這些步驟的,因此我們最后討論了將模型元數據納入自動調度的下一步。 對于這兩項研究,為了簡化分析,我們使用總結的數據,對每個模型使用2的模型批處理大小和4的并發。
馬克斯記憶用法(%) | 馬克斯GPU使用(%) | 最大GPU內存(MB) |
0 | 9 | 309 |
表1。 只運行TritonServer的內存使用。
Model | Batch | 流率 | 馬克斯記憶用法(%) | 馬克斯GPU使用(%) | 最大GPU內存(MB) | |
classification_breast | 2 | 4 | 1381.6推斷/秒 | 1 | 23 | 1461 |
classification_chest | 2 | 4 | 172.4推斷/秒 | 11 | 56 | 5035 |
分類_瑪利亞 | 2 | 4 | 586推斷/秒 | 2 | 43 | 1851 |
節段_CT_Colon_Tumo | 2 | 4 | 33.6推斷/秒 | 60 | 60 | 6955 |
segmentation_ct_胰腺 | 2 | 4 | 29.6推斷/秒 | 51 | 79 | 6955 |
節段_CT_脾 | 2 | 4 | 32推斷/秒 | 54 | 54 | 6955 |
肝段 | 2 | 4 | 28推斷/秒 | 53 | 76 | 11051 |
分段_MRI_腦_腫瘤 | 2 | 4 | 4推斷/秒 | 48 | 48 | 8579 |
分段_MRI_海馬 | 2 | 4 | 30.8推斷/秒 | 52 | 52 | 6955 |
表2。 每個運行模型的內存使用情況。
通常,有幾種潛在的方法:
每個GPU放置一個模型。 這意味著這9種型號的9個GPU。 例如,如果要在DGX上運行,這種方法將需要兩個不能充分利用的DGX。
把所有的模型放在一個GPU上。 這只需要一個GPU,但會導致“內存不足”錯誤。
在每個GPU上放置任意數量的模型。 這涉及到以前方法的問題。 如果每個GPU放置兩個模型,則只需要5個GPU。 然而,記憶錯誤仍然是一個風險,例如,如果你把肝臟分割和腦腫瘤分割模型放在一個GPU上。 同時,其他GPU沒有得到充分或最佳的利用,例如當您將乳房和胸部x射線分類放在一個GPU上時。
另一種選擇是什么?
案例研究:盡量減少間歇系統的硬件
想象一下,你有一個系統,你知道它只會斷斷續續地出現,所以你想在最少的硬件上安裝盡可能多的模型。 在這種情況下,GPU內存是瓶頸。 您可以為Triton Server減去309MB的內存,以單獨獲得模型的GPU內存,然后查看在GPU上的一個服務器上可以容納多少模型。
表3顯示,可以匹配的模型只使用四個16GB GPU與以下配置,這協調了最小的GPU可能為這些模型,需要53GB的內存。
GPU # | 模特兒典型 | 帶有服務器的GPU內存(MB |
1 | 分類_胸部,節段_CT_結腸_腫瘤 | 11681 |
2 | classification_breast,segmentation_live | 12203 |
3 | 分類_瘧疾,節段_MRI_海馬,節段_CT_脾 | 15143 |
4 | 節段_CT_胰腺,節段_MRI_腦_腫瘤 | 15225 |
表3。 最小硬件的示例配置。
使用這種配置,您的GPU數量最少,同時保證沒有內存錯誤。 這是一個很好的設置,用于間歇性地運行模型,當吞吐量不需要達到最大值時。
案例研究:最大限度地提高一致的、關鍵的系統的性能
對于此設置,最大吞吐量是優先級,因此必須確保吞吐量不會因為所有模式的并發負載而下降。 查看所有指標,以確保內存利用率、GPU利用率和GPU內存總量不超過機器的計算資源。
As total GPU utilization adds up to 491% and would therefore require a minimum of five GPUs, compared to total memory utilization (332%, or four GPUs) or total GPU memory (52 GB, or four GPUs), GPU utilization is the bottleneck and a great place to start.
表4假設GPU利用率閾值為100%,并顯示了一個只有6個16GB GPU的示例配置。
GPU # | 模特兒典型 | 內存使用(%) | GPU使用(%) | 帶有服務器的GPU內存(MB |
1 | 節段_CT_Colon_Tumo | 60 | 60 | 6955 |
2 | 肝段 | 54 | 76 | 11051 |
3 | classification_chest,classification_breast | 12 | 79 | 2939 |
4 | segmentation_ct_pancreas | 51 | 79 | 6955 |
5 | 級化_級,細分_級 | 56 | 97 | 8497 |
6 | Segmentation_MRI_海馬,segmentation_mri_brain_tumo | 100 | 100 | 15225 |
表4。 最大吞吐量的示例配置。
這與每個模型的批處理大小和并發值相同。 通過調整,使用不同的批處理大小和并發值來最大化吞吐量,內存和GPU利用率會有更高的變化,從而節省更多的資源。 此外,如果您的系統可以犧牲一些吞吐量,您可以使用更少的硬件,只需占用內存或GPU利用率的100。
進一步用例:自動調度
雖然這兩個案例研究顯示了優化系統運行的手工操作,但最有可能的用例是將這些數據自動納入調度。 調度規則將放在計算需求之上,例如在模型運行時不要使用超過80%的GPU或80%的GPU內存。 這樣的規則是你的模式,模型的使用計算元數據收集。
有了計算機需求,您就可以確定什么對您最重要,并從硬件中獲得最大的性能。
結局推論
使用Triton Server工具Model Analyzer,您可以輕松高效地描述您的模型,使您能夠最大限度地提高硬件的性能。 無論您使用命令行接口、Docker容器還是Helm圖表,ModelAnalyzer都會收集模型的計算需求,允許您最大化性能并最小化運行模型所需的硬件。
正如將9個GPU減少到4個或6個GPU的案例研究所顯示的,將這些數據合并到您的調度中是非常強大的。 對數據的進一步探索提供了對批處理大小和并發如何影響模型的洞察,使您能夠使用Triton Server以最大的性能運行模型。
Model Analyzer 是開源的,在GitHub上可用。
關于作者
關于大衛·亞斯特雷姆斯基
大衛·亞斯特雷姆斯基是NVIDIA的軟件實習生,從事克拉拉部署工作。 他是一名碩士學位學生,在賓夕法尼亞大學學習計算機科學,對醫療AI充滿熱情,未來人人都能獲得高質量的醫療保健。
審核編輯 黃昊宇
-
分析儀
+關注
關注
0文章
1479瀏覽量
52018 -
NVIDIA
+關注
關注
14文章
4940瀏覽量
102817 -
深度學習
+關注
關注
73文章
5493瀏覽量
120979
發布評論請先 登錄
相關推薦
評論