跳转到主要内容
工程的博客

gpu真的贵吗?基准测试gpu砖集群的推理

2021年12月15日 工程的博客

分享这篇文章

,这不是什么秘密了gpu是人工智能和深度学习的关键应用程序,因为他们高效的体系结构使它们适合计算密集型的用例。然而,几乎每个人都用他们也意识到他们往往是昂贵的!在本文中,我们希望表明,虽然GPU的每小时成本可能会更大,它可能实际上从总cost-to-solution角度更便宜。此外,time-to-insight会大大降低,可能导致额外的储蓄。在该基准测试中,我们比较了运行时和8高性能gpu的cost-to-solution 2处理器仅仅在砖平台上可用的集群配置,NLP的应用程序。bob体育客户端下载

为什么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几乎是必不可少的,与他们相关的好的每小时成本趋向于阻止客户。然而,在本文中使用的基准的帮助我希望说明两个关键点:

  • 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上。

免费试着砖

相关的帖子

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