现在都2202年了用CPU做AI推理演习到底能不能行?_英特尔_模子
作者:思
CPU 不适宜模型推理和演习?那已经是老刻板印象了,英特尔® 至强® 可扩展处理器搭配 AVX-512 指令集,单核一次能同时进行 128 次 BF16 浮点运算,这对付一样平常的深度学习模型不论在演习还是推理已经是足够的了。
说到模型演习,很多算法工程师首先想到的便是各种深度学习框架,以及 CUDA、cuDNN、NCCL 等 GPU 演习环境,彷佛我们很少优先考虑在 CPU 上直接演习模型。这可能是在潜意识里,我们将 CPU 视为不适宜并行打算的设备,思考着,大概 CPU 演习模型不仅速率慢,同时内存等资源占用也不少。
但实际上,经由这么多年的发展,像英特尔® 至强® 可扩展处理器这种 AI build-in 的 CPU 在支持模型演习上已经有了极大的提升,基本上每一代 CPU 都比上一代提升个 1.5 倍旁边,利用或不该用 CPU 模型演习加速库的差别,能达到 8 倍。因此整体上 CPU 的演习速率已经非常可不雅观了,再加上比较显存更易扩展的 CPU 内存,很多推举算法、排序模型、图片 / 影像识别等运用,已经在大规模利用 CPU 作为根本打算设备。
本文将紧张先容近几年 英特尔® 至强® 可扩展处理器 在模型演习上的努力与进展,包括 AVX-512 指令集、DL Boost 低精度演习模型等等;用这一套配置实操演习模型也很大略,这里我们将大略看看 英特尔® 至强® 可扩展处理器 上的模型该怎么演习最为高效;末了,比较高昂的 GPU,CPU 实在是一种性价比很高的演习硬件,也非常适宜对结果准确度哀求高兼顾本钱考量的制造业、图像处理与剖析等行业客户的深度学习模型。
CPU 上的深度模型演习
在 CPU 上演习模型,看起来很大略,但实际上要做到高效演习还是很繁芜的。作为一种通用打算设备,英特尔® 至强® 可扩展处理器要为各种设备或者软件供应打算支持。如果想要更好地支持深度学习模型,那么从底层指令集的设计,到矩阵运算加速库,再到神经网络加速库,都须要额外的设计与优化。
底层优化:AVX-512 指令集
理解过打算机组成事理的同学们都知道,CPU 指令集或者说指令系统,是实现打算机能力的核心部分。在 CPU 的眼里,它只会一条条实行指令,例如加法指令,从内存读取某个值的指令等等。如果放到神经网络打算流,那么优化或者增加一些根本指令,例如支持 FP16 的矩阵运算、支持单指令多条运算数据等等,就能大大提高 CPU 运行神经网络打算流的能力。
英特尔 AVX-512 指令集的目的就旨在提升单条指令的打算数量,从而提升 CPU 的矩阵运算效率。大略而言,一条指令一样平常分为操作码部分与地址码(内存地址)部分,早期通用途理器一样平常是基于 SISD(单指令单数据流)指令,即每个核心中,一个指令单次操作一条数据。因此当我们打算一个向量内积,一个值须要和好几个值进行乘加运算,因此就须要好几条类似的指令,它们具有相同的操作码,只是不同的地址码。
SIMD(单指令多数据流)就为理解决这个问题,它能让一个指令可以单次操作多条数据。此外,英特尔还为特意为矩阵运算场景加入了 FMA (Fused multiply-add)指令集,让处理器一次能同时完成乘法和加法两种基本操作。
同样一个向量内积,单指令单数据流须要拆分成多条指令,单指令多数据流只须要一条指令。
现在,英特尔至强处理器所采取的 AVX-512 指令集(Advanced Vector Extensions,AVX),在 SIMD 的基本想法上,已经经由 20 多年的优化与发展,其寄存器已由最初的 64 位升级到了 512 位,且具备两个 512 位的 FMA (领悟乘加运算指令)单元,这意味着运用程序可同时实行 32 次双精度、64 次单精度浮点运算,或操作八个 64 位和十六个 32 位整数。
加速演习:DL Boost
前面我们先容了非常根本的 AVX-512 指令集,假设数值精度是模型演习常用的 FP32,单个 512 位寄存器能存储 16 个浮点数,如果合营两个 FMA 单元可以同时实行 1622=64 次浮点运算。那么我们会想到,假如演习和推理模型,用不上 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 倍。
让我们来看看更接地气的实践场景。以图像剖析为例,如图三所示,如果在影像剖析场景中引入集成有英特尔深度学习加速技能的英特尔® 至强® 可扩展处理器,合营 OpenVINO 工具套件,在对检测模型进行了 INT8 转换和优化后,推理速率较原始方案提升高达 8.24 倍,且精确度丢失不到 0.17%。
对模型进行转换、优化前后在英特尔 ® 至强 ® 可扩展处理器上的效果比拟 。
AI 实训:极高性价比
在理解 英特尔® 至强® 可扩展处理器加速模型演习的基本事理之后,我们再来考虑一件事,在模型打算量不那么大的情形下,利用 CPU 来演习模型有什么上风?显然,与昂贵的 GPU 不同,英特尔® 至强® 可扩展处理器 推理和演习的性价比极高。在只利用英特尔® 至强® 可扩展处理器的情形下,内存可以便捷地根据须要扩充,同时也可以根据任务和场景分配打算核心,这样的灵巧性是其它硬件很难具备的。
例如拿一个入门级的小模型 LeNet-5 作为示例,我们可以谈论一下如何用几块性价比极高的英特尔® 至强® 可扩展处理器,打造一个打算核心可分配的深度学习系统。当然,在本例子中,分配打算资源紧张为了多个「用户」,大概是学生,都能高效地演习 LeNet-5。实际上这种打算资源分配在企业中也非常常见,分割不同深度学习运用、不同用户的打算资源都是比较大的需求。
现在如果我们在英特尔® 至强® 可扩展处理器上利用 TensorFlow 演习 LeNet-5,那么主要的是确定最优并发线程数,以及最优算力分配方案,这样才能充分利用 CPU 的能力。
首先对付确定最优并发线程数,TensorFlow 在 CPU 上有三个主要参数:
OMP 并发线程数:单个进程中线程的并发数intra_op 线程并发数:实行单个 OP 算子 时的并行线程数inter_op 线程并发数:实行多个 OP 算子之间的线程并发数如上图所示为经典的履历参数,一样平常 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 命令就可以测试不同 Socket 与核心数运行模型。例如「numactl -C 0,48 -m 0 python train-lenet5.py」,则表明采取 0 与 48 两个核心,第 0 个 Socket。
如上图所示,这样的配置看起来演习速率也不是太低,只须要 6 秒就能迭代一个 epoch。这是由于 LeNet-5 模型较小,核多的时候,每个核分配到的打算量过小,导致整体打算效率不高,还不如分配少一点打算核心。
当我们跑完全个不同核心数的测试,就能得到下图关于演习韶光、分配核心数、 CPU 利用率三者的关系。当然我们会选择更加经济高效的 2 核心配置。
总的而言,经由上面两种实验,我们能确定为单个 LeNet-5 模型配置的线程数、CPU 核心数这两大参数。这样的配置可以称得上具有极高性价比了,假设单张至强 CPU 具有 32 核,那么能为 16 个用户分配可不雅观的演习资源,还不须要怎么降落演习速率。
以是说如果没有超高时延哀求,紧张对演习精度有哀求的场景,CPU 的确是个高性价比的选择,比如在制造业等领域。
AI 家当运用:CPU 也可以是主角
在企业中支配 AI 模型,CPU 做事器实在也特殊常用,只要模型对推断速率没有那么高的哀求,只要模型不算特殊大,利用搭载英特尔® 至强® 可扩展处理器的做事器支配可是能省太多预算了。在现实运用处景中,大多数 AI 实际哀求的是并发量,哀求打算的 指标是 Query Per Seconds, 这对付英特尔® 至强® 可扩展处理器来说特殊得当。我们可以为每个模型进程配置适当的 CPU 核心数,从而得到极高的并发量。
在制造业与图像 / 影像业,模型都不会太大,它们就特殊适宜用 CPU 充当打算设备。
在制造业,基于机器视觉的工业赞助检测,或者基于云边协同新架构的 AI 瑕疵检测系统,都能引入了英特尔® 至强® 可扩展处理器作为边缘做事器的核心打算引擎,并借助英特尔 AVX-512 技能,为深度学习推理任务中的密集打算供应硬件加速,还引入 OpenVINO 工具套件来为检测供应软件调优,可大幅提升检测准确率并降落人力本钱。
在制造业中,至强可扩展处理器可作为边缘打算设备,也可为多功能平台供应基本打算能力,以支持各种 AI 场景与模型。
此外对付常规的图像、影像识别,若引入英特尔® 至强® 可扩展处理器,并利用 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
本文系作者个人观点,不代表本站立场,转载请注明出处!