65.9K
CodeProject 正在变化。 阅读更多。
Home

通过 Intel® 端到端 AI 优化套件加速人工智能

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2023年5月10日

CPOL

7分钟阅读

viewsIcon

6083

通过 Intel 优化的软件普及人工智能

人工智能(AI)几乎彻底改变了从医疗保健、零售、制造业等各个行业。然而,当今大多数 AI 解决方案都价格昂贵,并且仅限于少数数据科学家。这是由多种因素造成的。首先,现代端到端 AI 管道非常复杂。它们需要多个阶段,如数据处理、特征工程、模型开发、模型部署和维护。这些阶段的迭代性质使得该过程非常耗时。其次,开发 AI 解决方案通常需要深厚的专业知识。这为新手和公民数据科学家设置了入门门槛。第三,人们倾向于开发更大、更深的模型来获得更好的准确性。这些“过度参数化”的模型会导致显著的计算需求,这会阻碍在资源受限环境中的部署。

我们开发了 Intel® 端到端 AI 优化套件,使端到端 AI 管道更快、更简单、更易于访问,从而将 AI 的访问范围扩大到任何地方的每个人。它是一个用于端到端 AI 优化的可组合工具包,可在普通硬件上高效地交付高性能、轻量级的模型。该工具包基于一系列 Intel 优化的框架构建,例如 Intel® Extension for PyTorch* (IPEX)、Intel® Extension for TensorFlow* (ITEX) 和 Intel® AI Analytics Toolkit (AI Kit)。它还集成了 SigOpt 用于超参数优化。Intel 端到端 AI 优化套件还提供独特的数据准备、模型优化和模型构建组件和功能。

它提高了端到端 AI 管道的横向扩展和纵向扩展效率,使得复杂深度学习 (DL) 模型能够实现“隔夜训练”。它交付更轻量的 DL 模型,具有更高的推理吞吐量和更低资源需求。它还简化了端到端 AI。它通过“点击即运行”工作流和 SigOpt AutoML 自动化管道,抽象了数据处理和特征工程的复杂 API,简化了分布式训练,并且可以轻松集成到现有或第三方机器学习 (ML) 解决方案或平台中。它将复杂的、计算密集型的深度学习模型带入普通硬件,通过智能民主化顾问 (SDA) 生成的参数化模型交付内置的优化模型,以及通过神经架构搜索 (NAS) 技术构建的领域特定紧凑型神经网络。所有这些都使得 AI 对公民数据科学家来说更加易于访问。

架构

来自各个领域的流行模型(例如,RecSys、CV、NLP、ASR 和 RL)是 Intel 端到端 AI 优化套件的输入(**图 1**)。这些标准模型非常庞大,训练缓慢,并且难以调整和优化。根据模型类型,Intel 端到端 AI 优化套件将使用模型顾问或神经网络构造器来优化模型。预期的输出是经过优化的模型,它们在具有相同或最小准确性损失的情况下,仅需要标准模型的十分之一的 FLOPS(每秒浮点运算次数)和训练时间。

图 1. Intel® 端到端 AI 优化套件的架构和工作流程

RecDP

RecDP 是一个基于 PySpark* 的并行数据处理和特征工程库,并且可以扩展到其他数据处理工具,如 Modin*。其主要特点和功能如下: 

  • 一个表格数据集处理工具包
  • 抽象 API 以隐藏 Spark* 编程的复杂性
  • 通过自适应查询计划和策略优化性能
  • 支持常见的特征工程函数,如目标编码和计数编码
  • 易于集成到第三方解决方案中

RecDP 使用“惰性执行”来提高性能。它融合运算符并利用数据统计信息的收集来避免不必要的、多次遍历数据集,这对于处理大型数据集至关重要。 RecDP 还可以利用 Optimized Analytics Package for Spark* platform 提供的原生列式 SQL 引擎功能来提高性能。

智能民主化顾问 (SDA)

SDA 是一个用户引导工具,用于促进自动化。它通过参数化模型提供内置智能,并利用 SigOpt 进行超参数优化 (HPO) 和内置优化模型(例如,RecSys、CV、NLP、ASR 和 RL)。它还将手动模型调整和优化转换为辅助 AutoML 和 AutoHPO。

神经网络构造器

神经网络构造器基于神经架构搜索技术。使用预定义的超网络,它直接为给定域构建神经网络结构。其主要特点和功能如下: 

  • 多模型支持,例如来自 CV、NLP 和 ASR 领域的模型
  • 使用统一的、基于 Transformer 的超网络
  • 硬件感知 NAS 使用 FLOPS 和延迟等指标作为阈值来确定模型架构和模型大小
  • 无训练 NAS 使用零成本代理指标而非训练准确性来评估候选模型。它考虑了多个网络的特征,例如可训练性、表达力、多样性和显着性。
  • 利用模型适配器将模型部署到用户的生产环境中。模型适配器是一种基于迁移学习的组件,提供微调、知识蒸馏和领域适应功能。

示例

以下是该工具包在 DL 推荐模型 (DLRM) 上的工作示例,包括环境设置、数据处理、内置模型顾问(带有补丁代码)以及启动整个优化过程的单行命令。

步骤 1:环境设置

Intel 端到端 AI 优化套件构建在 AI Kit 之上,因此运行管道所需的软件已经可用

# DockerFile
FROM docker.io/intel/oneapi-aikit
ENV http_proxy=http://proxy-prc.intel.com:912
ENV https_proxy=http://proxy-prc.intel.com:912

# SigOpt
RUN python -m pip install sigopt==7.5.0 --ignore-installed

# PyTorch conda
RUN conda activate pytorch
RUN python -m pip install prefetch_generator tensorboardX onnx tqdm lark-parser

# Intel Extension for PyTorch
RUN python -m pip install intel_extension_for_pytorch==1.10.0 -f https://software.intel.com/ipex-whl-stable psutil
RUN mkdir -p /home/vmagent/app
WORKDIR /home/vmagent/app

步骤 2:使用 RecDP 进行并行数据处理

下一步是使用 RecDP 进行简化数据处理。在此示例中,将 `Categorify()` 和 `FillNA()` 两个运算符链接在一起,并使用 Spark 惰性执行来减少不必要的数据遍历

from pyspark.sql import *
from pyspark import *
from pyspark.sql.types import *
from pyrecdp.data_processor import *
from pyrecdp.encoder import *
from pyrecdp.utils import *
import numpy as np

path_prefix = "file://"
current_path = "/home/vmagent/app/dataset/demo/processed/"
csv_file = "/home/vmagent/app/dataset/demo/criteo_mini.txt"

# 1. Start spark and initialize data processor
t0 = timer()
spark = SparkSession.builder.master('local[*]') \
                            .config('spark.driver.memory','100G') \
                            .appName("DLRM").getOrCreate()
schema = StructType([StructField(f'_i{i}', IntegerType()) for i in range(0, 14)] )
df = spark.read.option('sep', '\t').option("mode", "DROPMALFORMED") \
               .schema(schema).csv(path_prefix + csv_file)
proc = DataProcessor(spark, path_prefix, current_path=current_path, spark_mode='local')

# 2. Process data with RecDP
CAT_COLS = list(range(14, 40))
to_categorify_cols = ['_c%d' % i for i in CAT_COLS]
op_categorify = Categorify(to_categorify_cols)
op_fillna_for_categorified = FillNA(to_categorify_cols, 0)
proc.append_ops([op_categorify, op_fillna_for_categorified])
df = proc.transform(df, name='dlrm')
t1 = timer()
print(f"Total process time is {(t1 - t0)} secs")

步骤 3:使用智能民主化顾问进行 AutoML

SDA 将手动优化转换为辅助 AutoML。它为内置模型提供预定义参数,这大大缩短了 AutoML 的时间

model_info = dict()

# Config for model
model_info["score_metrics"] = [("accuracy", "maximize"), ("training_time", "minimize")]
model_info["execute_cmd_base"] = "python launch.py"
model_info["result_file_name"] = "best_auc.txt"

# Config for SigOpt
model_info["experiment_name"] = "dlrm"
model_info["sigopt_config"] = [
    {'name':'learning_rate','bounds':{'min':5,'max':50},'type':'int'},
    {'name':'lamb_lr','bounds':{'min':5,'max':50},'type':'int'},
    {'name':'warmup_steps','bounds':{'min':2000,'max':4500},'type':'int'},
    {'name':'decay_start_steps','bounds':{'min':4501,'max':9000},'type':'int'},
    {'name':'num_decay_steps','bounds':{'min':5000,'max':15000},'type':'int'},
    {'name':'sparse_feature_size','grid': [128,64,16],'type':'int'},
    {'name':'mlp_top_size','bounds':{'min':0,'max':7},'type':'int'},
    {'name':'mlp_bot_size','bounds':{'min':0,'max':3},'type':'int'}]
model_info["observation_budget"] = 1

除了某些可配置参数外,还有一些情况需要代码级别的优化。对于所有内置模式,该套件都提供了带有补丁代码的优化模型。这里有一个示例,使用 IPEX 和 BF16 以及优化器来提高多个 CPU 节点上的模型收敛性

# Framework optimization. Use IPEX & BF16

# Embedding Optimization
-       m_curr = (m[i] if self.max_emb_dim > 0 else m)
-       EE = nn.EmbeddingBag(n, m_curr, mode="sum", sparse=True)
-       W = np.random.uniform(
-           low=-np.sqrt(1 / n), high=np.sqrt(1 / n), size=(n, m_curr)
-       ).astype(np.float32)
        # democratized, use two dimension, sparse and dense
+       W = np.random.uniform(
+           low=-np.sqrt(1 / n), high=np.sqrt(1 / n), size=(n, m)
+       ).astype(np.float32)

# Optimizer Optimization
- optimizer = torch.optim.SGD(dlrm.parameters(), lr=args.learning_rate) …)

步骤 4:端到端模型优化

最后,我们只需几行代码即可启动端到端模型优化

import sys
from e2eAIOK import SDA
sda = SDA(model ="dlrm", settings=setting)
sda.launch()

Intel 端到端 AI 优化套件为流行模型提供了更多“点击即运行”的方案,包括

性能

测试是在四节点集群上进行的(**表 1**)。每个节点配备两个 Intel® Xeon® Platinum 6240 处理器和 384GB 内存。节点通过 25GB 以太网连接。使用一个 1TB HDD SSD 作为数据驱动器。

配置

详细说明

测试日期

12/2021

平台

S2600WFT

CPU

Intel® Xeon® Gold 6240

节点数量

4

每个节点 CPU

18 核/插槽,2 插槽,2 线程/核

内存

DDR4 双通道 384G,12 插槽 / 32GB / 2666

存储

1x 400GB Intel® SSD (SSDSC2BA400G3) 操作系统驱动器

1TB HDD 用于数据存储

网络

1x Intel® X722,1x Intel XXV710

微代码

0x500002C

BIOS 版本

SE5C620.86B.0X.02.0094.102720191711

操作系统/Hypervisor/软件

Fedora* 29

5.3.11-100.fc29.x86_64

表 1. 系统配置

我们在三个流行的 RecSys 模型上比较了标准模型和优化模型的性能(**表 2**)。这三个工作负载都实现了显著的 ETL、训练和推理加速(**图 2**)。

工作负载

DLRM

WnD

DIEN

框架

PyTorch*

TensorFlow*

TensorFlow

oneMKL, oneCCL

oneMKL, oneCCL

oneMKL, oneCCL

数据集(大小,形状)

Criteo

outbrain

categoryFiles

精度(FP32、INT8.、BF16)

BF16

-

-

KMP AFFINITY

granularity=fine,compact,1,0

granularity=fine,compact,1,0

granularity=fine,compact,1,0

NUMACTL

Socket 绑定

Socket 绑定

Socket 绑定

OMP_NUM_THREADS

20

16

4

表 2. 测试配置

图 2. 使用 Intel® 端到端 AI 优化套件的 RecSYS 加速。基线配置:一个节点,配备两个 Intel® Xeon® Gold 6240 处理器(18 核),超线程开启,睿频开启,384 GB(12 插槽/32GB/2666 MHz)内存,BIOS SE5C620.86B.0X.02.0094.102720191711(微代码:0x500002C),Fedora 29,5.3.11-100.fc29.x86_64,PyTorch*,TensorFlow*,Spark*。优化配置:相同的硬件和软件配置,但使用了四个节点以及 Intel 优化的 PyTorch 和 TensorFlow、Horovod*,并修改了 DLRM、WnD 和 DIEN 工作负载。

行动号召

Intel 端到端 AI 优化套件是一个可组合的工具包,可在普通硬件上交付高性能、轻量级的模型,这有助于实现 AI 的民主化。它利用了多项关键优化: 

  • 使用 RecDP 进行并行数据处理
  • Intel 优化的训练框架
  • 更轻量的模型,层数更少,在分布式内存并行计算机上通信开销更小
  • 优化器调优(DLRM),以更大的批量大小更快地收敛
  • 特征工程(嵌入表和编码)优化

它在一系列流行模型上都取得了良好的结果。如果您想在自己的项目中使用它,请访问 https://github.com/intel/e2eAIOK/ 进行尝试。

© . All rights reserved.