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执行推理任务,或者更确切地说情绪分析文本的文档。具体地说,基准由推理三个数据集上执行
- 一套小3的JSON文件
- 一个更大的拼花
- 更大的镶花文件划分为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的
- 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美元 |
- P2
这些有K80s(开普勒)和用于通用计算。
的名字 | gpu | 内存 | 价格 |
---|---|---|---|
p2.xlarge | 1 | 12 gb | 0.122美元 |
p2.8xlarge | 8 | 96 gb | 0.976美元 |
- 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上。