
您已經構建了深度學習推理模型,并將其部署到 NVIDIA Triton ?聲波風廓線儀推理服務器 中,以最大限度地提高模型性能。如何進一步加快模型的運行速度?進入 NVIDIA Model Analyzer ,即將發布的工具,用于收集模型的計算需求。
如果沒有這些信息,在理解一個 GPU 上運行多少個模型就有一個知識缺口。通過收集熱存儲和冷存儲需求,您可以使用它們來通知模型的調度,從而獲得以下幾個好處:
- 最大化模型吞吐量 – 確保放置在每個 GPU 上的模型總和不超過可用內存和 GPU 利用率的某個閾值,例如 100% 。這將最大限度地提高硬件的吞吐量。
- 優化的硬件使用 – 檢查 GPU 內存需求,以便在較少的硬件上運行更多的模型。您可以使用這些數據來確定每個 GPU 可以加載的模型的最大數量,而不是針對吞吐量進行優化,從而減少所需的硬件,或者權衡吞吐量。
- 提高可靠性 —知道您在 GPU 上加載的模型不會超出其功能,從而消除內存不足錯誤。
此外,還有兩個關鍵的非日程安排好處:
- 有效模型 – 比較和對比不同的模型,將計算需求作為附加數據點,以了解模型的性能。這有助于生成更輕量級的模型,并減少推理所需的內存量。
- 更好的硬件尺寸 – 根據內存需求確定運行模型所需的確切硬件數量。
簡言之,理解推理模型的計算需求提供了從模型創建和硬件大小調整到可靠、高效運行模型的一系列好處。下面我們來看看 Model Analyzer ,看看它如何為最大性能推斷解決方案做出貢獻。
獲取 Model Analyzer Docker 容器
在使用推理服務器容器之前,必須安裝一些軟件,如 Docker 。有關詳細信息,請參閱 NVIDIA Docker : GPU 服務器應用程序部署變得容易 中的 安裝 Docker 和 NVIDIA Docker 部分。
ModelAnalyzer 以 Helm 圖表、 Docker 容器或獨立的命令行界面運行。這三種方法中的每一種都可以從 NVIDIA NGC 注冊表中獲得,并列出說明。模型分析器會定期更新,因此請確保獲取文件的最新版本。
對于本教程,請使用 Docker 容器。您可以將容器拉到本地系統或使用任何 支持 NGC 容器的平臺 。
docker pull nvcr.io/nvidia/clara/model-analyzer:latest
要運行模型的容器,請確保端口 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 \ nvcr.io/nvidia/clara/model-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 \ nvcr.io/nvidia/clara/model-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 或僅運行 Model Analyzer 的系統上運行它。
使用計算需求進行優化
下面是如何使用這些指標來優化系統性能。我們使用醫學推理模型討論兩個案例研究:
- 第一個案例研究探討了如何最小化間歇性運行的系統的硬件,例如需要在最小硬件上運行許多模型的低預算醫療提供商。
- 第二個案例研究探討了使用最少的硬件來最大限度地提高這些模型的吞吐量,例如一個大型急診室,在一致的基礎上運行許多模型。
這兩個案例研究都是手動完成這些步驟的,因此我們最后討論將模型元數據合并到自動調度中的下一個步驟。對于這兩個研究,為了簡化分析,我們使用總結的數據,對每個模型使用 2 的模型批大小和 4 的并發性。
Max Memory Utilization (%) | Max GPU Utilization (%) | Max GPU Memory (MB) |
0 | 9 | 309 |
Model | Batch | Concurrency | Throughput | Max Memory Utilization (%) | Max GPU Utilization (%) | Max GPU Memory (MB) |
classification_breast | 2 | 4 | 1381.6 infer/sec | 1 | 23 | 1461 |
classification_chest | 2 | 4 | 172.4 infer/sec | 11 | 56 | 5035 |
classification_malaria | 2 | 4 | 586 infer/sec | 2 | 43 | 1851 |
segmentation_ct_colon_tumor | 2 | 4 | 33.6 infer/sec | 60 | 60 | 6955 |
segmentation_ct_ pancreas | 2 | 4 | 29.6 infer/sec | 51 | 79 | 6955 |
segmentation_ct_ spleen | 2 | 4 | 32 infer/sec | 54 | 54 | 6955 |
segmentation_liver | 2 | 4 | 28 infer/sec | 53 | 76 | 11051 |
segmentation_mri_ brain_tumor | 2 | 4 | 4 infer/sec | 48 | 48 | 8579 |
segmentation_mri_ hippocampus | 2 | 4 | 30.8 infer/sec | 52 | 52 | 6955 |
通常,有幾種可能的方法:
- 根據 GPU 放置一個模型。對于這九款車型,這 9 款車型的售價為 9 GPUs 。例如,如果要在 DGXs 上運行這些,這種方法將需要兩個 dgx ,而這兩個 dgx 將無法充分利用。
- 將所有模型放在一個 GPU 上。這只需要一個 GPU ,但會導致“內存不足”錯誤。
- 在每個 GPU 上放置任意數量的模型。這就遇到了以前方法的問題。如果你在每個 GPU 上放兩個模型,你只需要五個 GPUs 。然而,記憶錯誤仍然是一個風險,例如,如果你把肝臟分割和腦瘤分割模型放在一個 GPU 上。同時,其他的 GPUs 沒有得到充分或最佳的利用,例如當你把乳房和胸部 x 光分類放在一個 GPU 上時。
還有什么選擇?
案例研究:最小化間歇系統的硬件
假設您有一個系統,您知道它只能間歇性地啟動,所以您希望在最少的硬件上安裝盡可能多的型號。在這種情況下, GPU 內存是瓶頸。您可以減去 Triton Server 的 309 MB 內存,僅獲得模型的 GPU 內存,然后查看 GPU 上一臺服務器上可以容納多少個型號。
表 3 顯示,這些型號可以匹配到只使用四個 16GB 的 GPUs ,配置如下,這就為這些需要 53GB 內存的機型提供了最少的 GPUs 。
GPU # | Models | Total GPU Memory (MB) With Server |
1 | classification_chest, segmentation_ct_colon_tumor | 11681 |
2 | classification_breast, segmentation_liver | 12203 |
3 | classification_malaria, segmentation_mri_hippocampus, segmentation_ct_spleen | 15143 |
4 | segmentation_ct_pancreas , segmentation_mri_brain_tumor | 15225 |
有了這個配置,您的 GPUs 數量最少,同時保證沒有內存錯誤。當吞吐量不需要達到最大時,這是間歇運行模型的良好設置。
案例研究:使一致的關鍵系統的性能最大化
對于這個設置,最大吞吐量是優先級,所以您必須確保吞吐量不會因為所有模式上的并發負載而下降。查看所有指標,以確保內存利用率, GPU 利用率和總 GPU 內存不會超過計算機的計算資源。
由于總的 GPU 利用率加起來高達 491% ,因此與總內存利用率( 332% ,即 4 個 GPU )或總 GPU 內存( 52gb ,或 4 個 GPU )相比,至少需要 5 個 GPUs ,因此 GPU 利用率是瓶頸,也是一個很好的起點。
表 4 假設 GPU 的利用率閾值為 100% ,并顯示了一個只有 6 個 16-GB GPUs 的配置示例。
GPU # | Models | Memory Utilization (%) | GPU Utilization (%) | Total GPU Memory (MB) With Server |
1 | segmentation_ct_colon_tumor | 60 | 60 | 6955 |
2 | segmentation_liver | 54 | 76 | 11051 |
3 | classification_chest, classification_breast | 12 | 79 | 2939 |
4 | segmentation_ct_pancreas | 51 | 79 | 6955 |
5 | classification_malaria, segmentation_ct_spleen | 56 | 97 | 8497 |
6 | segmentation_mri_hippocampus, segmentation_mri_brain_tumor | 100 | 100 | 15225 |
這對于每個模型來說都具有相同的批處理大小和并發性值。通過調整以使用不同的批處理大小和并發值來最大化吞吐量,內存和 GPU 利用率將有更大的變化,從而實現更大的節省。此外,如果您的系統可以犧牲一些吞吐量,那么您可以使用略高于 100% 的內存或 GPU 利用率來使用更少的硬件。
進一步的用例:自動調度
雖然這兩個案例研究顯示了優化系統運行的手動努力,但最有可能的用例是將這些數據自動納入調度中。調度規則將放在計算需求之上,比如在模型運行時,使用的 GPU 或 GPU 內存的 80% 以上。這些規則是你自己塑造的,模型計算元數據的使用也是如此。
有了計算機需求,您就可以確定什么對您最重要,并從您的硬件中獲得最佳性能。
結論
使用即將推出的 Triton ?聲波風廓線儀服務器工具,模型分析儀,您可以輕松高效地描述模型,從而最大限度地提高硬件性能。無論您使用命令行界面、 Docker 容器還是 Helm chart , Model Analyzer 都會收集模型的計算需求,從而最大限度地提高性能并最小化運行模型所需的硬件。
正如將 9 個 GPUs 減少到 4 個或 6 個 GPUs 的案例研究所示,將這些數據整合到您的調度中是非常強大的。對數據的進一步探索將深入了解批處理大小和并發性如何影響模型,使您能夠使用 Triton Server 以最大的性能運行模型。
計劃于 2020 年 9 月下旬發布, NVIDIA Clara 部署 7 . 2 。