مهم
أصبح bigdl-llm الآن ipex-llm ، وسينتقل تطورنا المستقبلي إلى مشروع IPEX-LLM.
Bigdl بسلاسة تقوم بتوسيع نطاق تحليلات البيانات وتطبيقات AI من الكمبيوتر المحمول إلى السحابة ، مع المكتبات التالية:
LLM (DEPRECATED - يرجى استخدام IPEX -LLM بدلاً من ذلك) : مكتبة نموذج اللغة الكبيرة Optimizaed ل CPU Intel و GPU
ORCA: بيانات أنابيب موزعة للبيانات الكبيرة و AI (TF & PYTORCH) على Spark and Ray
نانو: تسارع شفاف لبرامج TensorFlow & Pytorch على وحدة المعالجة المركزية/وحدة معالجة الرسومات Intel
Dllib: "ما يعادل Spark Mllib" للتعلم العميق
Chronos: تحليل السلاسل الزمنية القابلة للتطوير باستخدام Automl
فريزيان: أنظمة التوصية من شوط إلى النهاية
PPML: تأمين البيانات الكبيرة و AI (مع أمان أجهزة SGX/TDX)
لمزيد من المعلومات ، يمكنك قراءة المستندات.
مخطط انسيابي TD ؛
ميزة 1 {{hw secursed big data & ai؟}} ؛
ميزة 1-- no-> deftern2 {{python vs. Scala/java؟}} ؛
ميزة 1-- "نعم"-> arilePPML ([<em> <strong> ppml </strong> </em>]) ؛
ميزة 2-python-> feature3 {{ما نوع التطبيق؟}} ؛
الميزات 2-Scala/Java-> enterdllib ([<em> <strong> dllib </strong> </em>]) ؛
ميزة 3-"نموذج لغة كبير"-> verllm ([<em> <strong> llm </strong> </em>]) ؛
ميزة 3-"البيانات الكبيرة + AI (TF/PYTORCH)"-> Stainorca ([<em> <strong> orca </strong> </em>]) ؛
ميزة 3-تسريع TensorFlow/Pytorch-> efarnano ([<em> <strong> nano </strong> </em>]) ؛
ميزة 3-DL لـ Spark Mllib-> enddlib2 ([<em> <strong> dllib </strong> </em>]) ؛
الميزات 3-إطار تطبيق عالية المستوى-> الميزات 4 {{domain؟}} ؛
الميزات 4-سلسلة زمنية-> referChronos ([<em> <strong> chronos </strong> </em>]) ؛
الميزات 4-نظام التوصية-> refriesian ([<em> <strong> friesian </strong> </em>]) ؛
انقر فوق alnesllm "https://github.com/intel-analytics/ipex-llm"
انقر فوق efarnano "https://github.com/intel-analytics/bigdl-2.x#nano"
انقر فوق إحالة "https://github.com/intel-analytics/bigdl-2.x#orca"
انقر فوق enddlib "https://github.com/intel-analytics/bigdl-2.x#dllib"
انقر فوق enddlib2 "https://github.com/intel-analytics/bigdl-2.x#dllib"
انقر فوق "المرجع" https://github.com/intel-analytics/bigdl-2.x#chronos "
انقر فوق refriesian "https://github.com/intel-analytics/bigdl-2.x#friesian"
انقر فوق earppml "https://github.com/intel-analytics/bigdl-2.x#ppml"
classDef requiretyle1 fill:#5099ce ، stroke:#5099ce ؛
ملء ميزة ClassDef:#FFF ، السكتة الدماغية:#08409C ، عرض السكتة الدماغية: 1px ؛
Class Referllm ، efernano ، Stainorca ، ReferDllib ، ReferDllib2 ، ReferChronos ، Quidfriesian ، arferppml requiretyle1 ؛
فئة الميزات 1 ، الميزات 2 ، الميزات 3 ، الميزات 4 ، الميزة 5 ، الميزة 6 ، الميزة 7 ؛
لتثبيت BigDL ، نوصي باستخدام بيئة كوندا:
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 بتوسيع نطاق برامج TensorFlow أو Pytorch أو Openvino بسلاسة عبر مجموعات كبيرة (وذلك لمعالجة البيانات الكبيرة الموزعة).
يمكنك بناء برامج معالجة البيانات وموزعها من طرف إلى طرف وتوزيعها باستخدام ORCA في 4 خطوات بسيطة:
# 1. Initilize Orca Context (to run your program on K8s, YARN or local laptop)
from bigdl . orca import init_orca_context , OrcaContext
sc = init_orca_context ( cluster_mode = "k8s" , cores = 4 , memory = "10g" , num_nodes = 2 )
# 2. Perform distribtued data processing (supporting Spark DataFrames,
# TensorFlow Dataset, PyTorch DataLoader, Ray Dataset, Pandas, Pillow, etc.)
spark = OrcaContext . get_spark_session ()
df = spark . read . parquet ( file_path )
df = df . withColumn ( 'label' , df . label - 1 )
...
# 3. Build deep learning models using standard framework APIs
# (supporting TensorFlow, PyTorch, Keras, OpenVino, etc.)
from tensorflow import keras
...
model = keras . models . Model ( inputs = [ user , item ], outputs = predictions )
model . compile (...)
# 4. Use Orca Estimator for distributed training/inference
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 QuickStarts ، لمزيد من التفاصيل.
بالإضافة إلى ذلك ، يمكنك أيضًا تشغيل برامج RAY القياسية على Spark Cluster باستخدام Rayonspark في ORCA.
لا يمكنك تشغيل برنامج RAY على Spark Cluster فحسب ، بل يمكنك أيضًا كتابة رمز Ray Inline مع رمز Spark (وذلك لمعالجة RDDs in-memory Spark أو DataFrames) باستخدام Rayonspark في ORCA.
# 1. Initilize Orca Context (to run your program on K8s, YARN or local laptop)
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. Distribtued data processing using Spark
spark = OrcaContext . get_spark_session ()
df = spark . read . parquet ( file_path ). withColumn (...)
# 3. Convert Spark DataFrame to Ray Dataset
from bigdl . orca . data import spark_df_to_ray_dataset
dataset = spark_df_to_ray_dataset ( df )
# 4. Use Ray to operate on Ray Datasets
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 )))انظر دليل مستخدم Rayonspark و QuickStart لمزيد من التفاصيل.
يمكنك تسريع برامج TensorFlow أو Pytorch بشفافية على الكمبيوتر المحمول أو الخادم باستخدام Nano . مع تغيير الحد الأدنى من التعليمات البرمجية ، يطبق NANO تلقائيًا تحسينات وحدة المعالجة المركزية الحديثة (على سبيل المثال ، SIMD ، المعالجة المتعددة ، الدقة المنخفضة ، إلخ) على رمز التوتر القياسي ورمز Pytorch ، مع تسريع ما يصل إلى 10x.
يمكنك تحسين نموذج Pytorch المدربين تلقائيًا للاستدلال أو النشر باستخدام Nano :
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() شيئًا مثل:
-------------------------------- ---------------------- -------------- ----------------------
| method | status | latency(ms) | metric value |
-------------------------------- ---------------------- -------------- ----------------------
| original | successful | 45.145 | 0.975 |
| bf16 | successful | 27.549 | 0.975 |
| static_int8 | successful | 11.339 | 0.975 |
| jit_fp32_ipex | successful | 40.618 | 0.975* |
| jit_fp32_ipex_channels_last | successful | 19.247 | 0.975* |
| jit_bf16_ipex | successful | 10.149 | 0.975 |
| jit_bf16_ipex_channels_last | successful | 9.782 | 0.975 |
| openvino_fp32 | successful | 22.721 | 0.975* |
| openvino_int8 | successful | 5.846 | 0.962 |
| onnxruntime_fp32 | successful | 20.838 | 0.975* |
| onnxruntime_int8_qlinear | successful | 7.123 | 0.981 |
-------------------------------- ---------------------- -------------- ----------------------
* means we assume the metric value of the traced model does not change, so we don't recompute metric value to save time.
Optimization cost 60.8s in total.
model = ResNet18 ()
optimizer = torch . optim . SGD (...)
train_loader = ...
val_loader = ...
from bigdl . nano . pytorch import TorchNano
# Define your training loop inside `TorchNano.train`
class Trainer ( TorchNano ):
def train ( self ):
# call `setup` to prepare for model, optimizer(s) and dataloader(s) for accelerated training
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 )
# replace the loss.backward() with self.backward(loss)
loss = loss_fuc ( output , target )
self . backward ( loss )
optimizer . step ()
# Accelerated training (IPEX, BF16 and Multi-Instance Training)
Trainer ( use_ipex = True , precision = 'bf16' , num_processes = 2 ). train ()انظر دليل مستخدم Nano و tutotial لمزيد من التفاصيل.
مع DLLIB ، يمكنك كتابة تطبيقات التعلم العميق الموزعة كبرامج شرارة قياسية ( Scala أو Python ) ، باستخدام نفس Spark Dataframes و ML Pipely APIs.
يمكنك إنشاء تطبيقات تعليمية عميقة موزعة لـ Spark باستخدام واجهات برمجة تطبيقات Dllib Scala في 3 خطوات بسيطة:
// 1. Call `initNNContext` at the beginning of the code:
import com . intel . analytics . bigdl . dllib . NNContext
val sc = NNContext .initNNContext()
// 2. Define the deep learning model using Keras-style API in DLlib:
import com . intel . analytics . bigdl . dllib . keras . layers . _
import com . intel . analytics . bigdl . dllib . keras . Model
val input = Input [ Float ](inputShape = Shape ( 10 ))
val dense = Dense [ Float ]( 12 ).inputs(input)
val output = Activation [ Float ]( " softmax " ).inputs(dense)
val model = Model (input, output)
// 3. Use `NNEstimator` to train/predict/evaluate the model using Spark DataFrame and ML pipeline APIs
import org . apache . spark . sql . SparkSession
import org . apache . spark . ml . feature . MinMaxScaler
import org . apache . spark . ml . Pipeline
import com . intel . analytics . bigdl . dllib . nnframes . NNEstimator
import com . intel . analytics . bigdl . dllib . nn . CrossEntropyCriterion
import com . intel . analytics . bigdl . dllib . optim . Adam
val spark = SparkSession .builder().getOrCreate()
val trainDF = spark.read.parquet( " train_data " )
val validationDF = spark.read.parquet( " val_data " )
val scaler = new MinMaxScaler ().setInputCol( " in " ).setOutputCol( " value " )
val estimator = NNEstimator (model, CrossEntropyCriterion ())
.setBatchSize( 128 ).setOptimMethod( new Adam ()).setMaxEpoch( 5 )
val pipeline = new Pipeline ().setStages( Array (scaler, estimator))
val pipelineModel = pipeline.fit(trainDF)
val predictions = pipelineModel.transform(validationDF)يمكنك إنشاء تطبيقات تعليمية عميقة موزعة لـ Spark باستخدام واجهات برمجة تطبيقات Dllib Python في 3 خطوات بسيطة:
# 1. Call `init_nncontext` at the beginning of the code:
from bigdl . dllib . nncontext import init_nncontext
sc = init_nncontext ()
# 2. Define the deep learning model using Keras-style API in DLlib:
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. Use `NNEstimator` to train/predict/evaluate the model using Spark DataFrame and ML pipeline APIs
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 وأدلة مستخدم API KERAS لمزيد من التفاصيل.
تجعل مكتبة Chronos من السهل بناء تطبيقات تحليل سلسلة زمنية سريعة ودقيقة وقابلة للتطوير (مع Automl).
يمكنك تدريب متوقع سلسلة زمنية باستخدام Chronos في 3 خطوات بسيطة:
from bigdl . chronos . forecaster import TCNForecaster
from bigdl . chronos . data . repo_dataset import get_public_dataset
# 1. Process time series data using `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. Create a `TCNForecaster` (automatically configured based on train_data)
forecaster = TCNForecaster . from_tsdataset ( train_data )
# 3. Train the forecaster for prediction
forecaster . fit ( train_data )
pred = forecaster . predict ( test_data ) لتطبيق Automl ، استخدم AutoTSEstimator بدلاً من المتنبئين العاديين.
# Create and fit an `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 )انظر دليل مستخدم Chronos والبدء السريع لمزيد من التفاصيل.
تجعل مكتبة Friesian من السهل إنشاء نظام توصية على نطاق واسع من طرف إلى طرف (بما في ذلك تحويل الميزات غير المتصلة بالإنترنت والترانغ ، والميزات القريبة من الخط وتحديث النموذج ، وخط أنابيب التقديم عبر الإنترنت ).
انظر Freisian ReadMe لمزيد من التفاصيل.
يوفر Bigdl PPML بيئة الكتلة الموثوقة المحمية للأجهزة (Intel SGX) لتشغيل البيانات الكبيرة الموزعة وتطبيقات AI (بطريقة آمنة على السحابة الخاصة أو العامة).
انظر دليل مستخدم PPML والبرنامج التعليمي لمزيد من التفاصيل.
إذا وجدت BigDL مفيدًا لمشروعك ، فيمكنك الاستشهاد بأوراقنا على النحو التالي:
@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}
}
@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}
}