在大数据时代,数据科学和机器学习技术正迅速发展。为了推动这些技术的融合,开源了BigDL,这是一个为Apache Spark设计的分布式深度学习库。自2016年12月发布以来,BigDL旨在联合深度学习社区和大数据社区,共同推动技术进步。本文将概述BigDL 0.1.0版本(以及即将发布的0.1.1版本)的最新增强功能。
Python是大数据和数据科学领域最广泛使用的语言之一。从0.1.0版本开始,BigDL提供了对Python API的全面支持(基于Python 2.7),允许用户将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是一个用于检查和理解深度学习程序运行和图表的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标签下的损失和吞吐量曲线。还可以在DISTRIBUTIONS和HISTOGRAMS标签下使用TensorBoard可视化权重、偏差、梯度权重和梯度偏差。
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))