我有一个使用 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 和库之间工作)
您可以使用以下命令检查它并检查路径:
which nvidia-smi
which nvcc
cat /usr/local/cuda/version.txt
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。
最后,运行命令后(我选择了
conda install
而不是pip
),我跑了
pip install flash-attn
然后再次运行命令来检查
python -c "import torch; print(torch.cuda._is_compiled())"
这次又回来了
True
狂野骑行!