PySpark 3.3.2如何正确关联OpenBLAS加速ML训练并消除警告?
解决PySpark 3.3.2中OpenBLAS加载警告与ML训练加速问题
这些BLAS加载警告源于Spark依赖的netlib库无法找到本地优化的BLAS实现,虽然你已安装libopenblas-dev,但需通过正确配置JVM参数和环境变量让Spark识别到库文件,以下是具体步骤:
1. 确认OpenBLAS库路径
在Ubuntu系统中,OpenBLAS的共享库文件通常位于/usr/lib/x86_64-linux-gnu/,可通过以下命令确认:
find /usr -name "libopenblas*.so"
通常会输出类似/usr/lib/x86_64-linux-gnu/libopenblas.so.0的路径,后续配置使用该目录即可。
2. 配置Spark JVM参数
方式一:临时启动PySpark时指定参数
直接在命令行启动PySpark时添加配置:
pyspark \ --conf spark.driver.extraJavaOptions="-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu" \ --conf spark.executor.extraJavaOptions="-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu"
方式二:永久配置(修改spark-defaults.conf)
编辑$SPARK_HOME/conf/spark-defaults.conf(若文件不存在则复制spark-defaults.conf.template重命名),添加以下内容:
spark.driver.extraJavaOptions -Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu spark.executor.extraJavaOptions -Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu
方式三:在SparkSession代码中配置
如果通过代码构建SparkSession,直接添加config参数:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("PySpark OpenBLAS Example") \ .config("spark.driver.extraJavaOptions", "-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu") \ .config("spark.executor.extraJavaOptions", "-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.NativeSystemBLAS -Djava.library.path=/usr/lib/x86_64-linux-gnu") \ .getOrCreate()
3. 验证配置有效性
- 运行你的测试代码,检查控制台是否再出现BLAS加载警告;
- 可以通过以下代码打印当前配置,确认参数已生效:
print("Driver JVM Options:", spark.sparkContext.getConf().get("spark.driver.extraJavaOptions")) - 对比配置前后的ML训练时间,确认模型训练速度是否提升。
4. 额外注意事项
- 若使用Spark集群,需确保所有节点都安装了
libopenblas-dev,且库路径一致; - 若使用conda环境,需确保系统OpenBLAS库优先级高于conda自带版本,可在启动PySpark前设置环境变量:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH - PySpark 3.3.2默认包含netlib相关依赖jar包,无需额外下载添加。
内容的提问来源于stack exchange,提问作者lubom
相关产品推荐
相关产品推荐

