非 root 用户安装 cuda/cudnn 环境后,通过修改 PATH 和 LD_LIBRARY_PATH 变量,可以使 tensorflow 成功识别调用 GPU。但是,运行 jupyterhub notebook 后发现 GPU 调用失败...
- 首先,在 jupyter notebook 环境中运行以下命令,可以查看 tensorflow 识别出的硬件。
import tensorflow as tf
tf.config.list_physical_devices()
- 看到输出结果中并未包含 GPU。但是在 terminal 环境的 Python 中运行相同的命令,看到的结果是包含 GPU 的。
- 刚开始以为是 cuda 没安装正确,重新安装了一下,依然无法识别。接着运行以下命令查看 Python 识别到的系统环境变量,看到其中没有了自定义的 LD_LIBRARY_PATH。
import os
print(os.environ)
- 初步猜测是 Jupyter notebook 运行是忽略了 ~/.zshrc 中的配置。
- 但是,可以看到 PATH 变量显示的是修改过的内容。
因此打算生成 jupyter 的配置文件(命令如下)后,强制指定 LD_LIBRARY_PATH。
jupyterhub notebook --generate-config
- 推测原因出在这里,single -user 的 JupyterHub 会隐藏掉系统的环境变量,只留下 whitelist 中的这几个。
- 因此把 LD_LIBRARY_PATH 加入 .env_keep 列表
c.Spawner.env_keep = ['PATH', 'PYTHONPATH', 'CONDA_ROOT', 'CONDA_DEFAULT_ENV', 'VIRTUAL_ENV', 'LANG', 'LC_ALL', "LD_LIBRARY_PATH"]