运行含Streamlit与TensorFlow的Docker容器报错无法加载libcuda.so.1如何解决
问题原因
你遇到的报错是默认版本的TensorFlow启动时会优先检测GPU环境、加载CUDA相关依赖库导致的,你的Docker容器无GPU运行环境,因此触发了CUDA相关的错误日志。从最后几条日志可以判断,TensorFlow已经成功回退到CPU模式正常运行,应用本身功能不受影响,仅存在冗余报错日志。
解决方案
- 方法1:调整TensorFlow日志级别屏蔽冗余报错
无需修改代码的情况下,运行容器时传入日志级别环境变量即可:
也可以在Streamlit应用代码最开头、导入TensorFlow之前添加如下配置:docker run -p 8501:8501 -e TF_CPP_MIN_LOG_LEVEL=2 streamlit-app:latestimport os # 2表示屏蔽所有INFO、WARNING级别的日志,仅保留ERROR os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' - 方法2:代码层面强制禁用GPU检测
导入TensorFlow后添加配置,明确告知TensorFlow不使用GPU设备:import tensorflow as tf tf.config.set_visible_devices([], 'GPU') - 方法3:构建镜像时使用CPU专属版本TensorFlow
如果你的Dockerfile基于带GPU的TensorFlow镜像构建,替换为CPU版本的基础镜像即可,例如将基础镜像从tensorflow/tensorflow:latest修改为tensorflow/tensorflow:latest-cpu,也可以在安装依赖时指定安装CPU版本的TensorFlow包,从根源上移除CUDA相关依赖的加载逻辑。
内容的提问来源于stack exchange,提问作者Ulkurz
相关产品推荐
相关产品推荐

