跳轉到主要內容
工程的博客

gpu真的貴嗎?基準測試gpu磚集群的推理

2021年12月15日 工程的博客

分享這篇文章

,這不是什麼秘密了gpu是人工智能和深度學習的關鍵應用程序,因為他們高效的體係結構使它們適合計算密集型的用例。然而,幾乎每個人都用他們也意識到他們往往是昂貴的!在本文中,我們希望表明,雖然GPU的每小時成本可能會更大,它可能實際上從總cost-to-solution角度更便宜。此外,time-to-insight會大大降低,可能導致額外的儲蓄。在該基準測試中,我們比較了運行時和8高性能gpu的cost-to-solution 2處理器僅僅在磚平台上可用的集群配置,NLP的應用程序。Beplay体育安卓版本

為什麼gpu有益?

gpu適合這個任務,因為他們有大量的計算單位對數據處理架構設計。例如,A100 Nvidia GPU已被證明是237倍速度比cpu MLPerf基準(https://blogs.nvidia.com/blog/2020/10/21/inference-mlperf-benchmarks/)。具體來說,對於深度學習應用程序,已經有相當多的工作來創建成熟框架如Tensorflow和Pytorch允許用戶利用這些架構。不僅gpu用於這些計算密集型任務,但它周圍的基礎設施,如NVlink互聯GPU記憶之間的高速數據傳輸。的NCCL圖書館允許執行multi-GPU操作在高速互聯,以便這些深度學習實驗規模在成千上萬的gpu。此外,NCCL緊密集成到最受歡迎的深度學習框架。

雖然深度學習gpu幾乎是必不可少的,與他們相關的好的每小時成本趨向於阻止客戶。beplay体育app下载地址然而,在本文中使用的基準的幫助我希望說明兩個關鍵點:

  • Cost-of-solution——而GPU實例的好的每小時成本可能更高,總cost-of-solution可能,事實上,更低。
  • Time-to-insight——gpu是更快,time-to-insight,通常是低得多由於深度學習的迭代性質或科學數據。這反過來會導致降低基礎設施成本,如存儲的成本。

基準

在這項研究中,使用gpu在NLP執行推理任務,或者更確切地說情緒分析文本的文檔。具體地說,基準由推理三個數據集上執行

  1. 一套小3的JSON文件
  2. 一個更大的拚花
  3. 更大的鑲花文件劃分為10個文件

這裏的目標是評估的總運行時推理任務隨著批量大小的變化占了GPU的差異可用內存。GPU內存利用率也監控占運行時的差異。獲得最從GPU性能的關鍵是確保所有GPU計算和內存足夠忙於工作單元。

列出的每個實例的好的每小時成本測試,我們計算推理總成本為了有意義的業務成本比較。下麵的代碼提供了用於基準。

模型=“distilbert-base-uncased-finetuned-sst-2-english”defget_all_files():partitioned_file_list = glob.glob (' / dbfs /用戶/(電子郵件保護)/ Peteall_partitioned / * .parquet ')file_list = [' / dbfs /用戶/ srij(電子郵件保護)/ Peteall.txt ']如果(USE_ONE_FILE = =真正的):返回(file_list)其他的:返回(partitioned_file_list)
              TextLoader(數據集):def__init__(自我,文件=沒有一個變換=沒有一個target_transform =沒有一個記號賦予器=沒有一個):自我。文件= pd.read_parquet(file)自我。文件= self.file自我。文件= tokenizer(列表(self.file [“full_text”]),填充=真正的截斷=真正的max_length =512年return_tensors =“pt”)自我。文件= self.file[“input_ids”]自我。變換=變換自我。target_transform = target_transformdef__len__(自我):返回len(self.file)def__getitem__(自我,idx):data = self.file [idx]返回(數據)
              SentimentModel(nn.Module):#我們的模型def__init__(自我):超級(自我SentimentModel) . __init__ ()#打印(“- - - - - - - - - - - - - - - - - - -初始化一次- - - - - - - - - - - - - - - - - -”)自我。fc = AutoModelForSequenceClassification.from_pretrained(模型)def向前(自我,輸入):#輸出(輸入)輸出= self.fc (輸入)pt_predictions = nn.functional.softmax(輸出。分對數,昏暗的=1)#打印(“\錫模型:輸入大小”,input.size ())返回(pt_predictions)
              dev =cuda的如果dev = =“cpu”:設備= torch.device (“cpu”)device_staging =cpu: 0的其他的:設備= torch.device (cuda的)device_staging =的cuda: 0
              記號賦予器= AutoTokenizer.from_pretrained(模型)
              all_files = get_all_files ()model3 = SentimentModel ()試一試:#如果你離開device_ids參數,它選擇所有可用的設備(gpu)model3 = nn.DataParallel (model3)model3.to (device_staging)除了:torch.set_printoptions(閾值=10000年)
              t0 = time.time ()文件all_files:data = TextLoader(文件=文件,編譯器=記號賦予器)train_dataloader = DataLoader(數據、batch_size = batch_size洗牌=)#洗牌應該設置為False= torch.empty (0,0)ct、數據列舉(train_dataloader):輸入= data.to (device_staging)如果(len= =0):= model3 (輸入)其他的:輸出= model3 (輸入)torch.no_grad ():=火炬。貓((輸出),0)df = pd.read_parquet(文件)“full_text”].numpy res = out.cpu () ()df_res = pd.DataFrame ({“文本”:df,“負麵”:res (:,0),“積極的”:res (:,1]})#打印(df_res)打印(“時間執行推理”time.time () - t0)

基礎設施——gpu和cpu

基準是8 GPU集群和2 CPU上運行集群。的GPU集群由K80s(開普勒),t4(圖靈)和V100s(伏特)GPU在各種配置可用通過AWS雲後台數據磚。選擇不同的配置的實例計算和內存配置。純粹的吞吐量,開普勒架構是最古老和最強大的而沃爾特是最強大的。

gpu的

  1. G4dn

這些實例有T4 NVIDIA gpu(圖靈)和英特爾瀑布湖cpu。得以優化,根據AWS的機器學習推理和小規模培訓”。以下實例被使用:

的名字 gpu 內存 價格
g4dn.xlarge 1 16 gb 0.071美元
g4dn.12xlarge 4 192 gb 0.856美元
G4db.16xlarge 1 256 gb 1.141美元
  1. P2

這些有K80s(開普勒)和用於通用計算。

的名字 gpu 內存 價格
p2.xlarge 1 12 gb 0.122美元
p2.8xlarge 8 96 gb 0.976美元
  1. P3

P3實例提供8英偉達®V100張量核心gpu在單一機器學習應用程序實例和理想。這些實例可以提供一個計算機的每個實例mixed-precision性能。P3dn。24 xlarge實例,例如,提供4 x網絡帶寬P3.16xlarge實例,可以支持NCCL分布式機器學習。

的名字 gpu GPU內存 價格
p3.2xlarge 1 16 gb 0.415美元
p3.8xlarge 4 64 gb 1.66美元
p3dn.24xlarge 8 256 gb 4.233美元

CPU實例

C5

C5實例特性Intel Xeon鉑8000係列處理器(Skylake-SP或級聯湖)的時鍾速度高達3.6 GHz。這裏的集群選擇48或96個vcpu和96 gb或192 gb的RAM。更大的內存允許我們使用更大的批量大小的推理。

的名字 cpu CPU內存 價格
c5.12x 48 96 gb 0.728美元
c5.24xlarge 96年 192 gb 1.456美元

基準

測試1

批量大小將gpu的總數為40倍規模的工作負載集群。在這裏,我們使用一個大文件,沒有任何分區。顯然,這種方法將會失敗,文件太大了,適合在集群上。

實例 小型數據集(年代) 更大的數據集(s) gpu的數量 每小時費用 成本的推理(小數據集) 成本的推理(大數據集)
G4dn.x 19.3887 NA 1 0.071美元 0.0003 NA
G4dn.12x 11.9705 857.6637 4 0.856美元 0.003 0.204
G4dn.16x 20.0317 2134.0858 1 1.141美元 0.006 0.676
P2.x 36.1057 3449.9012 1 0.122美元 0.001 0.117
P2.8x 11.1389 772.0695 8 0.976美元 0.003 0.209
P3.2x 10.2323 622.4061 1 0.415美元 0.001 0.072
P3.8x 7.1598 308.2410 4 1.66美元 0.003 0.142
P3.24x 6.7305 328.6602 8 4.233美元 0.008 0.386

正如所料,volta執行最佳其次是圖靈和開普勒架構。運行時也與gpu的數量規模除最後兩行。P3.8x集群比P3.24x更快,盡管有一半的gpu。這是由於這樣的事實:per-GPU內存利用率在17% P3.24x P3.8x比例為33%。

測試2

批處理大小設置為40倍可用gpu的數量以規模更大的工作負載集群。更大的文件現在劃分為10個較小的文件。唯一的區別從先前的結果表是高亮顯示的列對應於更大的文件。

實例 小型數據集(年代) 更大的數據集(s) gpu的數量 每小時費用 成本的推理(小) 成本的推理(大)
G4dn.x 19.3887 2349.5816 1 0.071美元 0.0003 0.046
G4dn.12x 11.9705 979.2081 4 0.856美元 0.003 0.233
G4dn.16x 20.0317 2043.2231 1 1.141美元 0.006 0.648
P2.x 36.1057 3465.6696 1 0.122美元 0.001 0.117
P2.8x 11.1389 831.7865 8 0.976美元 0.003 0.226
P3.2x 10.2323 644.3109 1 0.415美元 0.001 0.074
P3.8x 7.1598 350.5021 4 1.66美元 0.003 0.162
P3.24x 6.7305 395.6856 8 4.233美元 0.008 0.465

測試3

在這種情況下,批量大小增加到70和十大文件分割成較小的文件。在這種情況下,您將注意到P3.24x集群比P3.8x集群更快,因為P3.24x per-GPU利用率要高得多的比前一實驗。

實例 小型數據集(年代) 更大的數據集(s) gpu的數量 每小時費用 成本的推理(小數據集) 成本的推理(大數據集)
G4dn.x 18.6905 1702.3943 1 0.071美元 0.0004 0.034
G4dn.12x 9.8503 697.9399 4 0.856美元 0.002 0.166
G4dn.16x 19.0683 1783.3361 1 1.141美元 0.006 0.565
P2.x 35.8419 伯父 1 0.122美元 0.001 NA
P2.8x 10.3589 716.1538 8 0.976美元 0.003 0.194
P3.2x 9.6603 647.3808 1 0.415美元 0.001 0.075
P3.8x 7.5605 305.8879 4 1.66美元 0.003 0.141
P3.24x 6.0897 258.259 8 4.233美元 0.007 0.304

推理在處理器僅僅集群

這裏我們運行相同的推理問題,但這一次隻使用較小的數據集在處理器僅僅集群。批處理大小選為個vcpu數量的100倍。

實例 小型數據集(年代) 數個vcpu 內存 每小時費用 成本的推理
C5.12x 42.491 48 96年 0.728美元 0.009美元
C5.24x 40.771 96年 192年 1.456美元 0.016美元

您將注意到兩個集群,cpu的運行時更慢但推理的成本更比GPU集群。事實上,不僅是最昂貴的GPU集群基準(P3.24x) 6 x速度比CPU集群,但推理總成本(0.007美元)小於甚至較小的CPU集群(C5.12x, 0.009美元)。

結論

有普遍采用gpu的工作負載是否由於保費與定價有關,然而,在這個基準測試我們已經能夠說明有可能節約成本替換cpu與gpu的用戶。time-to-insight也大大減少,導致更快的迭代和解決方案可以GTM的關鍵策略。

檢查庫與筆記本電腦和筆記本的跑步者在Github上。

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map