首页 > 营销活动 > 现在是2202。是否可以使用 CPU 进行 AI 推理训练?

    现在是2202。是否可以使用 CPU 进行 AI 推理训练?

    来源:营销活动

    发布时间:2022-09-22 21:34:16

    原标题:现在是2202年。是否可以使用 CPU 进行 AI 推理训练?

    机器之心原创

    作者:想

    说到模型训练,很多算法工程师首先想到的是各种深度学习框架,以及CUDA、cuDNN、NCCL等GPU训练环境。似乎BOB官方网站 - 手机网页版很少优先考虑直接在 CPU 上训练模型。这可能是下意识的,BOB官方网站 - 手机网页版把CPU当成一个不适合并行计算的设备,思考一下,也许CPU训练模型不仅速度慢,还占用内存等大量资源。

    但实际上,经过这么多年的发展,像Intel® Xeon® Scalable处理器这样的AI内置CPU在支持模型训练方面有了很大的提升,基本上每一代CPU都比上一代好。提升约1.5倍,使用与不使用CPU模型训练加速库的差异可达8倍。因此,CPU的整体训练速度已经非常可观了。此外,比显存更容易扩展的 CPU 内存已被大规模应用于推荐算法、排序模型、图像/图像识别等许多应用中。

    本文将主要介绍Intel® Xeon® Scalable处理器近年来在模型训练方面的努力和进展,包括AVX-512指令集、DL Boost低精度训练模型等;用这套来配置实际的训练模型也很简单。在这里,BOB官方网站 - 手机网页版将简要介绍如何在英特尔® 至强® 可扩展处理器上最有效地训练模型。最后,相比昂贵的GPU,CPU其实是一种性价比很高的训练硬件,效率也很高。它是一种深度学习模型,适用于制造、图像处理和分析等需要高精度结果并考虑成本因素的行业的客户。

    CPU 上的深度模型训练

    在 CPU 上训练模型看起来很简单,但高效训练实际上非常复杂。作为通用计算设备,英特尔® 至强® 可扩展处理器为各种设备或软件提供计算支持。如果想要更好地支持深度学习模型,从底层指令集的设计,到矩阵运算加速库,再到神经网络加速库,都需要额外的设计和优化。

    底层优化:AVX-512指令集

    了解计算机组成原理的同学都知道,CPU指令集或指令系统是实现计算机能力的核心部分。在 CPU 的眼里,它只是一条一条地执行指令,比如加法指令、从内存中读取一个值的指令等等。如果放在神经网络计算流中,那么优化或增加一些基础指令,比如支持FP16矩阵运算,支持单指令多运算数据等,可以大大提高CPU运行神经网络计算流的能力。

    Intel的AVX-512指令集的目的是增加每条指令的计算次数,从而提高CPU的矩阵运算效率。总之,一条指令一般分为操作码部分和地址码(内存地址)部分。早期的通用处理器一般基于SISD(Single Instruction Single Data Stream)指令,即在每个内核中,一条指令一次操作一条。数据。所以当BOB官方网站 - 手机网页版计算一个向量内积的时候,一个值需要和几个值相乘和相加,所以需要几个类似的指令,它们的操作码相同,但地址码不同。

    SIMD(Single Instruction Multiple Data Stream)就是为了解决这个问题,它允许一条指令一次对多条数据进行操作。此外,Intel还为矩阵运算场景增加了FMA(Fused multiply-add)指令集,让处理器可以同时执行乘法和加法两种基本运算。

    同一个向量内积,单指令单数据流需要拆分成多指令,单指令多数据流只需要一条指令。

    现在,英特尔至强处理器使用的AVX-512指令集(Advanced Vector Extensions,AVX)基于SIMD的基本思想,经过20多年的优化开发,其寄存器由原来的64个升级位到 512 位。位,并具有两个 512 位 FMA(Fused Multiply Add)单元,这意味着一个应用程序可以同时执行 32 个双精度、64 个单精度浮点运算,或者对 8 个 64 位和 16 个 32 位整数进行运算.

    加速训练:DL Boost

    之前,BOB官方网站 - 手机网页版介绍了非常基本的 AVX-512 指令集。假设数值精度为模型训练常用的FP32,单个512位寄存器可以存储16个浮点数。如果配合两个FMA单元,可以同时执行16*2*2=64。辅助浮点运算。那么BOB官方网站 - 手机网页版会想,如果训练和推理模型不需要FP32精度,只需要BF16或者INT8,那并行计算的数量是不是翻倍或者翻倍呢?结合内存可以移动更多数据量的事实,整体低精度计算快多少倍?

    这就是英特尔 DL Boost 的想法。其技术本质是将低精度数据格式的操作指令集成到AVX-512指令集中,分别为AVX-512_VNNI(向量神经网络指令)和AVX-512_BF16(bfloat16)。增加了对 INT8(主要用于量化推理)和 BF16(推理和训练)的支持。

    不同的指令集,单个 SIMD 指令可以包含的数据类型和数据量。

    2020年面世的第三代英特尔®至强®可扩展处理器家族,集成了英特尔深度学习加速技术、两个AI加速指令集,广泛应用于商业深度学习训练和推理。其中,AVX-512_VNNI 理论上可以将推理效率提高 4 倍,而 AVX-512_BF16 可以帮助将训练性能提高 1.93 倍。

    让BOB官方网站 - 手机网页版看一个更接地气的实践场景。以图像分析为例,如图 3 所示,如果在图像分析场景中引入集成英特尔深度学习加速技术的英特尔® 至强® 可扩展处理器,并使用 OpenVINO 工具套件,则检测模型转换为INT8。经过优化,推理速度比原方案快了8.24倍,准确率损失小于0.17%。

    模型在英特尔® 至强® 可扩展处理器上改造和优化前后的性能对比。

    AI训练:性价比极高

    现在BOB官方网站 - 手机网页版了解了英特尔® 至强® 可扩展处理器如何加速模型训练的基本原理,让BOB官方网站 - 手机网页版再考虑一件事,在模型计算量不那么大的情况下,使用 CPU 训练模型有什么优势?显然,与昂贵的 GPU 不同,英特尔® 至强® 可扩展处理器在推理和训练方面极具成本效益。仅采用英特尔® 至强® 可扩展处理器,可轻松按需扩展内存,并根据任务和场景分配计算内核,这是其他硬件难以企及的灵活性。

    例如,以入门级小模型 LeNet-5 为例,我们可以讨论如何使用几款高性价比的 Intel® Xeon® Scalable 处理器来构建具有可分配计算内核的深度学习系统。当然,在这个例子中,分配计算资源主要是为多个“用户”,也许是学生,来有效地训练 LeNet-5。事实上,这种计算资源分配在企业中也很常见,划分不同深度学习应用和不同用户的计算资源是一个比较大的需求。

    现在如果我们使用 TensorFlow 在 Intel® Xeon® Scalable 处理器上训练 LeNet-5,确定最佳并发线程数以及最佳计算能力分配方案非常重要,这样才能充分利用 CPU 能力。

    首先,为了确定最佳并发线程数,TensorFlow 在 CPU 上有三个重要参数:

    如上图所示,是一个经典的经验参数。一般来说,将inter_op设置为1在大多数情况下效果最好,但需要一段时间才能确定前两个参数。具体来说,我们可以给模型足够的计算能力,选择不同的并发线程数thread_num,看看模型的迭代速度。

    首先我们可以选择默认配置,这样 LeNet-5 在 Fashion-MNIST 上训练一个 epoch 大约需要 160 秒。当然,因为数据集和模型都很小,所以可以用epoch遍历时间作为指标。在真实数据集中,我们也可以用迭代时间作为指标。

    是时候使用默认参数训练 CPU 一个 epoch。

    如下训练代码所示,我们现在可以将OMP和intra_op的并行数设置为2,这样我们就可以尝试新配置的训练迭代时间了。实验表明,这种配置可以大大减少训练时间,最终只需要4.55秒。

    LeNet-5参数配置和训练代码,用这组配置迭代一个epoch只需要4.55秒。

    最后,通过依次将thread_num设置为不同的值,我们可以得到一个并行数分布表来选择最优的thread_num。当然,不同的模型会有不同的最优并行数,但是因为LeNet-5模型比较小,所以两个并行数可以达到很好的效果。

    LeNet-5 在 Fashion-MNIST 数据集上的最佳线程数分布。

    在确定了最优线程数之后,我们还可以确定分配给每个用户的最优核数,即看不同核数下的训练时间和CPU利用率。在此处使用 numactl 命令,您可以使用不同的套接字和核心数测试正在运行的模型。例如“numactl -C 0,48 -m 0 python train-lenet5.py”表示使用0和48两个核,使用第0个socket。

    如上图所示,这样的配置看起来并不算太慢,迭代一个epoch只需要6秒。这是因为 LeNet-5 模型较小,当核数较多时,分配给每个核的计算量太小,导致整体计算效率低。最好分配更少的计算核心。

    当我们用不同的核数运行测试时,我们可以得到下图中训练时间、分配核数和CPU利用率之间的关系。当然我们会选择性价比更高的2核配置。

    总的来说,经过以上两个实验,我们可以确定为单个 LeNet-5 模型配置的线程数和 CPU 核数这两个参数。这样的配置可以说是极具性价比的。假设单个 Xeon CPU 有 32 个核心,可将可观的训练资源分配给 16 个用户,无需降低训练速度。

    因此,如果没有超高延迟的要求,CPU对于需要训练精度的场景,比如制造等领域,确实是一个性价比的选择。

    AI产业应用:CPU也能当主角

    在企业部署 AI 模型时,CPU 服务器其实是非常常用的。只要模型对推理速度没有这么高的要求,只要模型不是特别大,部署配备英特尔® 至强® 可扩展处理器的服务器就可以节省大量资金。超过预算。在现实世界的应用场景中,大部分AI其实都需要并发,需要计算的指标是Query Per Seconds,特别适合Intel® Xeon® Scalable处理器。我们可以为每个模型进程配置适当数量的 CPU 内核,从而实现极高的并发性。

    在制造和图形/成像方面,模型都不会太大,它们特别适合将 CPU 用作计算设备。

    在制造业,基于机器视觉的工业辅助检测,或者基于云边协同新架构的AI缺陷检测系统,可以引入英特尔®至强®可扩展处理器作为边缘服务器的核心计算引擎,并使用英特尔AVX -512技术为深度学习推理任务中的密集计算提供硬件加速,同时引入OpenVINO工具套件,为检测提供软件调优,可大幅提升检测精度,降低人工成本。

    在制造业中,至强可扩展处理器可以作为边缘计算设备,也可以为多功能平台提供基础计算能力,以支持各种人工智能场景和模型。

    此外,对于常规的图像和图像识别,如果引入 Intel® Xeon® Scalable 处理器并使用 OpenVINO 工具套件的优化能力,则可以解决之前采购专用硬件服务器的成本问题、推理速度和准确性问题。解决。问题。使用 OpenVINO 工具包进行 AI 推理加速,可以将深度学习模型从 FP32 转换为使用 VNNI 优化的 INT8,成功加速了深度学习在成像信息系统中的推理速度。

    使用INT8量化推理可以充分利用CPU的计算能力,提高推理速度。

    总的来说,从指令集到加速库,CPU都做了很多优化来支持深度模型,而常规模型只使用CPU进行训练和推理是一个非常不错的选择。这种选择不仅极具成本效益,而且比其他计算设备更加灵活和稳定。毕竟,CPU 内存和持久存储可以轻松扩展。

    因此,借助 CPU 加速,AI 学习可以快速准确。现在,您是否对面向 AI 的英特尔® 至强® 可扩展处理器有了更深入的了解?

    点击以下链接了解更多信息:

    https://www.intel.cn/content/www/cn/zh/now/data-centric/heroproducts.html

    编辑: