BigDL:为大数据用户和数据科学家带来触手可及的深度学习
本文概述了 BigDL 0.1.0 版本(以及即将发布的 0.1.1 版本)中可用的最新增强功能
大数据和分析在当今智能互联的世界中发挥着核心作用,并不断推动大数据、分析和机器学习/深度学习的融合。我们开源了 BigDL,这是一个用于 Apache Spark* 的分布式深度学习库,于 2016 年 12 月发布,其目的正是为了联合深度学习社区和大数据社区。本文的其余部分概述了 BigDL 0.1.0 版本(以及即将发布的 0.1.1 版本)中可用的最新增强功能。
- Python* 支持
Python* 是大数据和数据科学界使用最广泛的语言之一,BigDL 提供了 对 Python API 的全面支持(使用 Python 2.7),基于 PySpark,自 0.1.0 版本起;这允许用户将 BigDL 中的深度学习模型与现有的 Python 库(例如,NumPy 和 Pandas)结合使用,这些库会自动以分布式方式运行,以处理跨 Hadoop*/Spark 集群的大量数据。例如,我们可以使用 BigDL Python API 创建 LeNet-5 模型,这是一个经典的卷积神经网络
def build_model(class_num): model = Sequential() model.add(Reshape([1, 28, 28])) model.add(SpatialConvolution(1, 6, 5, 5).set_name('conv1')) model.add(Tanh()) model.add(SpatialMaxPooling(2, 2, 2, 2).set_name('pool1')) model.add(Tanh()) model.add(SpatialConvolution(6, 12, 5, 5).set_name('conv2')) model.add(SpatialMaxPooling(2, 2, 2, 2).set_name('pool2')) model.add(Reshape([12 * 4 * 4])) model.add(Linear(12 * 4 * 4, 100).set_name('fc1')) model.add(Tanh()) model.add(Linear(100, class_num).set_name('score')) model.add(LogSoftMax()) return model
此外,我们继续改进 BigDL 中的 Python 支持;即将发布的 BigDL 0.1.1 版本将添加 Python 3.5支持,以及支持用户自动 跨 YARN* 集群部署其自定义 Python 依赖项。
- 笔记本集成
通过 BigDL 中对 Python API 的全面支持,数据科学家和分析师现在可以使用强大的笔记本(例如 Jupyter Notebook)以分布式方式跨集群探索他们的数据,结合 Python 库、Spark SQL / DataFrames 和 MLlib、BigDL 中的深度学习模型以及交互式可视化工具。例如,BigDL 0.1.0 中包含的 Jupyter Notebook 教程演示了我们如何评估文本分类模型的预测结果(使用准确度和 混淆矩阵),如下所示
predictions = trained_model.predict(val_rdd).collect() def map_predict_label(l): return np.array(l).argmax() def map_groundtruth_label(l): return l[0] - 1 y_pred = np.array([ map_predict_label(s) for s in predictions]) y_true = np.array([map_groundtruth_label(s.label) for s in val_rdd.collect()]) acc = accuracy_score(y_true, y_pred) print "The prediction accuracy is %.2f%%"%(acc*100) cm = confusion_matrix(y_true, y_pred) cm.shape df_cm = pd.DataFrame(cm) plt.figure(figsize = (10,8)) sn.heatmap(df_cm, annot=True,fmt='d');
- TensorBoard* 支持
TensorBoard* 是一套 Web 应用程序,用于检查和理解深度学习程序的运行和图表,BigDL 0.1.0 提供了 使用 TensorBoard 的可视化支持(以及笔记本中内嵌的绘图库,例如 Matplotlib*)。首先,可以配置 BigDL 程序以生成训练和/或验证的摘要信息,如下所示(使用 Python API)
optimizer = Optimizer(...) ... log_dir = 'mylogdir' app_name = 'myapp' train_summary = TrainSummary(log_dir=log_dir, app_name=app_name) val_summary = ValidationSummary(log_dir=log_dir, app_name=app_name) optimizer.set_train_summary(train_summary) optimizer.set_val_summary(val_summary) ... trainedModel = optimizer.optimize()
在我们开始运行 BigDL 程序后,训练和验证摘要分别保存到 和 ;之后,我们可以使用 TensorBoard 可视化 BigDL 程序的行为,包括 SCALARS 选项卡下的 Loss 和 Throughput 曲线(如下图所示)。
我们还可以使用 TensorBoard 在 DISTRIBUTIONS 和 HISTOGRAMS 选项卡下可视化权重、偏置、梯度权重 和 梯度偏置(如下图所示)。
- 更好的 RNN 支持
循环神经网络 (RNN) 是用于分析语音、文本、时间序列、传感器数据等的强大模型。BigDL 0.1.0 版本提供了对 RNN 的全面支持,包括不同变体的 长短期记忆,例如门控循环单元 (GRU)、带窥视孔的 LSTM 以及 循环神经网络中的 dropout。例如,我们可以使用 Python API 创建一个简单的 LSTM 模型,如下所示
model = Sequential() model.add(Recurrent() .add(LSTM(embedding_dim, 128))) model.add(Select(2, -1)) model.add(Linear(128, 100)) model.add(Linear(100, class_num))
近年来,我们在深度学习方面取得了重大进展;虽然深度学习社区继续推动技术发展,但 BigDL 帮助使这些突破更容易、更方便地供数据科学家和数据工程师(他们不一定是深度学习技术的专家)使用。我们继续致力于 BigDL 0.1 版本之后的增强功能(例如,支持 读取/写入 TensorFlow 模型、用于 3D 的卷积神经网络 (CNN) 实现图像、递归网络等),以便大数据用户可以继续使用熟悉的工具和基础设施来构建他们的深度学习驱动的分析应用程序。