未设置CUDA_HOME环境变量

问题描述 投票:0回答:2

我有一个使用 pytorch 深度学习和 GPU 的工作环境,当我尝试使用 mmcv.ops.point_sample 时遇到了问题,它返回了:

ModuleNotFoundError: No module named 'mmcv._ext'

我已经读到,你实际上应该使用 mmcv-full 来解决它,但是当我尝试安装它时,我遇到了另一个错误:

pip install mmcv-full

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

这似乎很合乎逻辑,因为我从未在我的 ubuntu 机器上安装过 cuda(我不是管理员),但它仍然在我自己构建的模型上运行良好的深度学习训练,我猜这个包只需要最少的代码运行 cuda 张量运算。

所以我的主要问题是通过 pytorch 包使用时 cuda 安装在哪里,我可以使用与 cuda_home 环境变量相同的路径吗?

此外,如果有人知道一些很好的资源,可以通过 pytorch/tensorflow 深入了解 cuda 的内部结构,我想看一下(我一直在阅读 cudatoolkit 文档,这很酷,但这似乎更针对 c++ cuda 开发人员,而不是内部在 python 和库之间工作)

python pytorch
2个回答
1
投票

您可以使用以下命令检查它并检查路径:

  1. which nvidia-smi
  2. which nvcc
  3. cat /usr/local/cuda/version.txt

0
投票

TL;DR 运行

python -c "import torch; print(torch.cuda._is_compiled())"
。如果返回
False
,那么你必须创建一个新的conda环境,从官网从头开始安装Torch,然后尝试安装flash-attn。


事实证明

CUDA_HOME
根本不是指环境变量!相反,它引用了 Torch 代码中的常量!

我的堆栈跟踪有以下内容:

        File "C:\Users\myname\miniconda3\envs\librarian\Lib\site-packages\torch\utils\cpp_extension.py", line 2416, in _join_cuda_home
          raise OSError('CUDA_HOME environment variable is not set. '
      OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

我进入

cpp_extension.py
文件并找到以下行。

CUDA_HOME = _find_cuda_home() if torch.cuda._is_compiled() else None

哇。那很有意思。所以它检查的第一件事是

torch.cuda._is_compiled()
。我想我应该检查一下。所以我然后运行了以下命令

python -c "import torch; print(torch.cuda._is_compiled())"

果然输出是

False

我完全擦除了我的

conda
环境并创建了一个新环境。

conda deactivate
conda env create -n some_environment_name

然后我访问 Pytorch 的网站 https://pytorch.org/get-started/locally/,并运行必要的命令来安装 Pytorch。

Selector from Pytorch's website showing various options such as OS, Package Manager, Language, etc. The end result is a command, conda install pytorch torchvision.....

最后,运行命令后(我选择了

conda install
而不是
pip
),我跑了

pip install flash-attn

然后再次运行命令来检查

python -c "import torch; print(torch.cuda._is_compiled())"

这次又回来了

True

狂野骑行!

© www.soinside.com 2019 - 2024. All rights reserved.