[!重要]
bigdl-llm
已更名为ipex-llm
,我们未来的开发将转移到IPEX-LLM项目。
概述
BigDL能够无缝地将您的数据分析和AI应用从笔记本电脑扩展到云端,包含以下库:
-
LLM
(已弃用 - 请改用IPEX-LLM): 针对英特尔CPU和GPU优化的大型语言模型库 -
Orca: 基于Spark和Ray的分布式大数据和AI(TF & PyTorch)流水线
-
Nano: 在英特尔CPU/GPU上透明加速TensorFlow和PyTorch程序
-
DLlib: 深度学习的"Spark MLlib等价物"
-
Chronos: 使用AutoML进行可扩展的时间序列分析
-
Friesian: 端到端推荐系统
-
PPML: 安全的大数据和AI(使用SGX/TDX硬件安全)
更多信息,您可以阅读文档。
选择合适的BigDL库
flowchart TD;
Feature1{{需要硬件安全的大数据和AI?}};
Feature1-- 否 -->Feature2{{Python还是Scala/Java?}};
Feature1-- "是" -->ReferPPML([<em><strong>PPML</strong></em>]);
Feature2-- Python -->Feature3{{应用类型?}};
Feature2-- Scala/Java -->ReferDLlib([<em><strong>DLlib</strong></em>]);
Feature3-- "大型语言模型" -->ReferLLM([<em><strong>LLM</strong></em>]);
Feature3-- "大数据 + AI (TF/PyTorch)" -->ReferOrca([<em><strong>Orca</strong></em>]);
Feature3-- 加速TensorFlow / PyTorch -->ReferNano([<em><strong>Nano</strong></em>]);
Feature3-- Spark MLlib的深度学习 -->ReferDLlib2([<em><strong>DLlib</strong></em>]);
Feature3-- 高级应用框架 -->Feature4{{领域?}};
Feature4-- 时间序列 -->ReferChronos([<em><strong>Chronos</strong></em>]);
Feature4-- 推荐系统 -->ReferFriesian([<em><strong>Friesian</strong></em>]);
click ReferLLM "https://github.com/intel-analytics/ipex-llm"
click ReferNano "https://github.com/intel-analytics/BigDL-2.x#nano"
click ReferOrca "https://github.com/intel-analytics/BigDL-2.x#orca"
click ReferDLlib "https://github.com/intel-analytics/BigDL-2.x#dllib"
click ReferDLlib2 "https://github.com/intel-analytics/BigDL-2.x#dllib"
click ReferChronos "https://github.com/intel-analytics/BigDL-2.x#chronos"
click ReferFriesian "https://github.com/intel-analytics/BigDL-2.x#friesian"
click ReferPPML "https://github.com/intel-analytics/BigDL-2.x#ppml"
classDef ReferStyle1 fill:#5099ce,stroke:#5099ce;
classDef Feature fill:#FFF,stroke:#08409c,stroke-width:1px;
class ReferLLM,ReferNano,ReferOrca,ReferDLlib,ReferDLlib2,ReferChronos,ReferFriesian,ReferPPML ReferStyle1;
class Feature1,Feature2,Feature3,Feature4,Feature5,Feature6,Feature7 Feature;
安装
-
要安装BigDL,我们建议使用conda环境:
conda create -n my_env conda activate my_env pip install bigdl
要安装最新的每日构建版本,请使用
pip install --pre --upgrade bigdl
;更多详情请参阅Python和Scala用户指南。 -
要安装每个单独的库,比如Chronos,请使用
pip install bigdl-chronos
;更多详情请参阅文档网站。
入门
Orca
-
_Orca_库可以无缝地将您的单节点TensorFlow、PyTorch或OpenVINO程序扩展到大型集群(以处理分布式大数据)。
显示Orca示例
您可以使用_Orca_通过4个简单的步骤构建端到端的分布式数据处理和AI程序:
# 1. 初始化Orca上下文(在K8s、YARN或本地笔记本上运行程序) from bigdl.orca import init_orca_context, OrcaContext sc = init_orca_context(cluster_mode="k8s", cores=4, memory="10g", num_nodes=2) # 2. 执行分布式数据处理(支持Spark DataFrames、 # TensorFlow Dataset、PyTorch DataLoader、Ray Dataset、Pandas、Pillow等) spark = OrcaContext.get_spark_session() df = spark.read.parquet(file_path) df = df.withColumn('label', df.label-1) ... # 3. 使用标准框架API构建深度学习模型 # (支持TensorFlow、PyTorch、Keras、OpenVino等) from tensorflow import keras ... model = keras.models.Model(inputs=[user, item], outputs=predictions) model.compile(...) # 4. 使用Orca Estimator进行分布式训练/推理 from bigdl.orca.learn.tf.estimator import Estimator est = Estimator.from_keras(keras_model=model) est.fit(data=df, feature_cols=['user', 'item'], label_cols=['label'], ...)
更多详情请参阅Orca用户指南,以及TensorFlow和PyTorch快速入门。
-
此外,您还可以使用Orca中的_RayOnSpark_在Spark集群上运行标准Ray程序。
显示RayOnSpark示例
使用Orca中的_RayOnSpark_,您不仅可以在Spark集群上运行Ray程序,还可以将Ray代码与Spark代码内联编写(以处理内存中的Spark RDD或DataFrame)。
# 1. 初始化Orca上下文(在K8s、YARN或本地笔记本上运行程序) from bigdl.orca import init_orca_context, OrcaContext sc = init_orca_context(cluster_mode="yarn", cores=4, memory="10g", num_nodes=2, init_ray_on_spark=True) # 2. 使用Spark进行分布式数据处理 spark = OrcaContext.get_spark_session() df = spark.read.parquet(file_path).withColumn(...) # 3. 将Spark DataFrame转换为Ray Dataset from bigdl.orca.data import spark_df_to_ray_dataset dataset = spark_df_to_ray_dataset(df) # 4. 使用Ray操作Ray Dataset import ray @ray.remote def consume(data) -> int: num_batches = 0 for batch in data.iter_batches(batch_size=10): num_batches += 1 return num_batches print(ray.get(consume.remote(dataset)))
Nano
您可以使用Nano透明地加速笔记本电脑或服务器上的TensorFlow或PyTorch程序。只需最少的代码更改,Nano就能自动将现代CPU优化(如SIMD、多处理、低精度等)应用于标准TensorFlow和PyTorch代码,加速最高可达10倍。
显示Nano推理示例
您可以使用_Nano_自动优化训练好的PyTorch模型以进行推理或部署:
model = ResNet18().load_state_dict(...)
train_dataloader = ...
val_dataloader = ...
def accuracy (pred, target):
...
from bigdl.nano.pytorch import InferenceOptimizer
optimizer = InferenceOptimizer()
optimizer.optimize(model,
training_data=train_dataloader,
validation_data=val_dataloader,
metric=accuracy)
new_model, config = optimizer.get_best_model()
optimizer.summary()
optimizer.summary()
的输出将类似于:
-------------------------------- ---------------------- -------------- ----------------------
| 方法 | 状态 | 延迟(ms) | 指标值 |
-------------------------------- ---------------------- -------------- ----------------------
| 原始 | 成功 | 45.145 | 0.975 |
| bf16 | 成功 | 27.549 | 0.975 |
| static_int8 | 成功 | 11.339 | 0.975 |
| jit_fp32_ipex | 成功 | 40.618 | 0.975* |
| jit_fp32_ipex_channels_last | 成功 | 19.247 | 0.975* |
| jit_bf16_ipex | 成功 | 10.149 | 0.975 |
| jit_bf16_ipex_channels_last | 成功 | 9.782 | 0.975 |
| openvino_fp32 | 成功 | 22.721 | 0.975* |
| openvino_int8 | 成功 | 5.846 | 0.962 |
| onnxruntime_fp32 | 成功 | 20.838 | 0.975* |
| onnxruntime_int8_qlinear | 成功 | 7.123 | 0.981 |
-------------------------------- ---------------------- -------------- ----------------------
* 表示我们假设跟踪模型的指标值不变,因此我们不重新计算指标值以节省时间。
优化总共花费了60.8秒。
显示Nano训练示例
您可以使用Nano轻松加速PyTorch训练(例如IPEX、BF16、多实例训练等):
model = ResNet18()
optimizer = torch.optim.SGD(...)
train_loader = ...
val_loader = ...
from bigdl.nano.pytorch import TorchNano
# 在`TorchNano.train`内定义您的训练循环
class Trainer(TorchNano):
def train(self):
# 调用`setup`为加速训练准备模型、优化器和数据加载器
model, optimizer, (train_loader, val_loader) = self.setup(model, optimizer,
train_loader, val_loader)
for epoch in range(num_epochs):
model.train()
for data, target in train_loader:
optimizer.zero_grad()
output = model(data)
# 用self.backward(loss)替换loss.backward()
loss = loss_fuc(output, target)
self.backward(loss)
optimizer.step()
# 加速训练(IPEX、BF16和多实例训练)
Trainer(use_ipex=True, precision='bf16', num_processes=2).train()
DLlib
使用_DLlib_,您可以将分布式深度学习应用程序编写为标准的(Scala或Python)Spark程序,使用相同的Spark DataFrames和ML Pipeline API。
显示DLlib Scala示例
您可以使用DLlib Scala API通过3个简单的步骤为Spark构建分布式深度学习应用程序:
// 1. 在代码开头调用`initNNContext`:
import com.intel.analytics.bigdl.dllib.NNContext
val sc = NNContext.initNNContext()
// 2. 使用DLlib中的Keras风格API定义深度学习模型:
import com.intel.analytics.bigdl.dllib.keras.layers._
您可以使用*DLlib* Python API通过以下3个简单步骤构建Spark的分布式深度学习应用:
```python
# 1. 在代码开头调用`init_nncontext`:
from bigdl.dllib.nncontext import init_nncontext
sc = init_nncontext()
# 2. 使用DLlib中的Keras风格API定义深度学习模型:
from bigdl.dllib.keras.layers import Input, Dense, Activation
from bigdl.dllib.keras.models import Model
input = Input(shape=(10,))
dense = Dense(12)(input)
output = Activation("softmax")(dense)
model = Model(input, output)
# 3. 使用`NNEstimator`来训练/预测/评估使用Spark DataFrame和ML pipeline API的模型
from pyspark.sql import SparkSession
from pyspark.ml.feature import MinMaxScaler
from pyspark.ml import Pipeline
from bigdl.dllib.nnframes import NNEstimator
from bigdl.dllib.nn.criterion import CrossEntropyCriterion
from bigdl.dllib.optim.optimizer import Adam
spark = SparkSession.builder.getOrCreate()
train_df = spark.read.parquet("train_data")
validation_df = spark.read.parquet("val_data")
scaler = MinMaxScaler().setInputCol("in").setOutputCol("value")
estimator = NNEstimator(model, CrossEntropyCriterion())\
.setBatchSize(128)\
.setOptimMethod(Adam())\
.setMaxEpoch(5)
pipeline = Pipeline(stages=[scaler, estimator])
pipelineModel = pipeline.fit(train_df)
predictions = pipelineModel.transform(validation_df)
有关更多详细信息,请参阅DLlib NNFrames和Keras API用户指南。
Chronos
Chronos库使构建快速、准确和可扩展的时间序列分析应用程序变得容易(具有AutoML功能)。
显示Chronos示例
您可以通过以下3个简单步骤使用_Chronos_训练时间序列预测器:
from bigdl.chronos.forecaster import TCNForecaster
from bigdl.chronos.data.repo_dataset import get_public_dataset
# 1. 使用`TSDataset`处理时间序列数据
tsdata_train, tsdata_val, tsdata_test = get_public_dataset(name='nyc_taxi')
for tsdata in [tsdata_train, tsdata_val, tsdata_test]:
data.roll(lookback=100, horizon=1)
# 2. 创建一个`TCNForecaster`(根据train_data自动配置)
forecaster = TCNForecaster.from_tsdataset(train_data)
# 3. 训练预测器以进行预测
forecaster.fit(train_data)
pred = forecaster.predict(test_data)
要应用AutoML,请使用AutoTSEstimator
代替普通预测器。
# 创建并拟合一个`AutoTSEstimator`
from bigdl.chronos.autots import AutoTSEstimator
autotsest = AutoTSEstimator(model="tcn", future_seq_len=10)
tsppl = autotsest.fit(data=tsdata_train, validation_data=tsdata_val)
pred = tsppl.predict(tsdata_test)
Friesian
Friesian库使构建端到端、大规模推荐系统变得容易(包括离线特征转换和训练、近线特征和模型更新以及在线服务管道)。
有关更多详细信息,请参阅Freisian readme。
PPML
BigDL PPML提供了一个硬件(Intel SGX)保护的可信集群环境,用于在私有或公共云上安全地运行分布式大数据和AI应用程序。
获取支持
引用
如果您发现BigDL对您的项目有用,您可以按以下方式引用我们的论文:
- BigDL 2.0: 从笔记本电脑到分布式集群的AI管道无缝扩展
@INPROCEEDINGS{9880257, title={BigDL 2.0: Seamless Scaling of AI Pipelines from Laptops to Distributed Cluster}, author={Dai, Jason Jinquan and Ding, Ding and Shi, Dongjie and Huang, Shengsheng and Wang, Jiao and Qiu, Xin and Huang, Kai and Song, Guoqiong and Wang, Yang and Gong, Qiyuan and Song, Jiaming and Yu, Shan and Zheng, Le and Chen, Yina and Deng, Junwei and Song, Ge}, booktitle={2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year={2022}, pages={21407-21414}, doi={10.1109/CVPR52688.2022.02076} }
- BigDL: 一个用于大数据的分布式深度学习框架
@INPROCEEDINGS{10.1145/3357223.3362707, title = {BigDL: A Distributed Deep Learning Framework for Big Data}, author = {Dai, Jason Jinquan and Wang, Yiheng and Qiu, Xin and Ding, Ding and Zhang, Yao and Wang, Yanzhang and Jia, Xianyan and Zhang, Cherry Li and Wan, Yan and Li, Zhichao and Wang, Jiao and Huang, Shengsheng and Wu, Zhongyuan and Wang, Yang and Yang, Yuhao and She, Bowen and Shi, Dongjie and Lu, Qi and Huang, Kai and Song, Guoqiong}, booktitle = {Proceedings of the ACM Symposium on Cloud Computing (SoCC)}, year = {2019}, pages = {50–60}, doi = {10.1145/3357223.3362707} }