最新VoteNet环境配置记录

前言

由于votenet代码最近一次commit的时间是2020年,使用github中建议的pytorchv1.1会出现CUDA兼容性问题(新的显卡需要高版本的CUDA,但高版本的CUDA已经不再支持低版本的pytorch),使用较高版本的pytorch>= v1.4又会产生代码兼容性问题(由于pytorch更换API),最终思路是使用高版本pytorch以兼容高版本CUDA,通过修改代码来兼容高版本pytorch

对齐颗粒度

以下信息无需完全一致,列出来仅供参考,关于查看这些信息的命令可以看我另一篇博客,深度学习服务器版本查看指令集合(显卡,Ubuntu,CUDA,gcc,conda,torch)

  • 显卡型号 NVIDIA GeForce RTX 2080 Ti
  • Ubuntu版本 20.04
  • CUDA版本 10.2
  • gcc版本 7.5.0
  • pytorch版本 1.7.0

另一台服务器相关配置的版本

  • 显卡型号 NVIDIA GeForce RTX 3090
  • Ubuntu版本 20.04
  • CUDA版本 11.3
  • gcc版本 9.4.0
  • pytorch版本 1.10.0

一、安装Miniconda

miniconda比anaconda更加轻量化,主要是用于虚拟环境管理。下面这篇博客对安装教程讲得非常清楚,我就不再赘述
手把手教你如何在Ubuntu下安装Miniconda

二、安装CUDA Toolkit(重点!)

具体安装教程网上很多,这里只强调需要注意的地方:根据显卡选择CUDA
安装CUDA可以参考这篇博客linux上多个CUDA切换使用(小白教程)

1. 查看显卡算力

使用开头提到的查看显卡型号命令,然后在显卡算力表中查找对应的算力,2080Ti对应的算力是7.5

2. 确定支持的CUDA版本

查看CUDA版本和显卡算力对应表(需要科学上网),可以看到算力7.5的显卡支持的CUDA版本最低是10.0(当初就是不知道根据显卡选CUDA,傻傻的和VoteNet github中提到的CUDA版本保持一致,导致在另一台3090(算力8.6)上装了CUDA 10.0,运行代码时各种报错,折腾了很久)

如果服务器已经被师兄们开发过,可以查看已经安装的CUDA版本并直接使用

ls /usr/local		# 查看已安装的CUDA版本

在这里插入图片描述
这个目录是CUDA的默认安装路径。可以看到这台服务器上已经安装了三个版本的cuda,多版本CUDA共存是允许的,查看cuda文件链接的文件就可以知道当前使用CUDA的版本,通过改变软链接就可以实现CUDA的切换,具体操作可以看这篇博客
linux上多个CUDA切换使用(小白教程)

ls -il /usr/local/cuda		# 查看cuda文件链接的文件

在这里插入图片描述

三、创建虚拟环境并安装pytorch

1. conda添加清华镜像源

pytorch也使用conda安装

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes

2. 创建虚拟环境并激活

我这里python版本选择3.7

conda create -n votenet python=3.7		# 创建环境
conda activate votenet					# 激活环境

3. 安装pytorch(重点!)

这又是一个容易踩坑的地方
根据CUDA选择pytorch
pytorch以往版本中选择和CUDA对应的版本,可以Ctrl+F输入CUDA版本号搜索,我选择的是1.7.0(使用1.4,1.5或更高版本应该是没问题的,只是需要简单修改代码)
在这里插入图片描述
下载的时候需要复制这条命令并将-c pytorch去掉,它指定了从官网路径下载,不会通过镜像源下载,但网上好多博客会说不可以去掉,去掉的话通过镜像源会下载到cpu版本的pytorch,如果想了解细节可以看下面这篇博客
conda 清华源安装 PyTorch CUDA 版本
原因我确实不清楚,但有个结论是:执行命令后,在安装之前会列出依赖清单,如果清单中pytorch标注的不是CPU版且CUDA版本和你的一致,这样就可以下载;否则,换个pytorch版本尝试
在这里插入图片描述
下载完后使用开头介绍的命令检查pytorch版本其对应的CUDA版本还有GPU是否可用

四、下载并修改VoteNet代码

切换到项目路径后使用git下载(如果网络不好或者服务器端修改代码不方便,可以先下载到本地并修改代码,然后使用Xftpscp上传到服务器)

git clone https://github.com/facebookresearch/votenet.git

代码修改主要参考这个issue
Unable to compile pointnet2 #108(需要科学上网)

1. 修改pointet2/setup.py代码

pointet2/setup.py使用以下代码替换

# Copyright (c) Facebook, Inc. and its affiliates.
# 
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

from setuptools import setup
from torch.utils.cpp_extension import BuildExtension, CUDAExtension
import glob
import os

_ext_src_root = "_ext_src"
_ext_sources = glob.glob("{}/src/*.cpp".format(_ext_src_root)) + glob.glob(
    "{}/src/*.cu".format(_ext_src_root)
)
_ext_headers = glob.glob("{}/include/*".format(_ext_src_root))

headers = "-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), '_ext_src', 'include')

setup(
    name='pointnet2',
    ext_modules=[
        CUDAExtension(
            name='pointnet2._ext',
            sources=_ext_sources,
            extra_compile_args={
                "cxx": ["-O2", headers],
                "nvcc": ["-O2", headers]
            },
        )
    ],
    cmdclass={
        'build_ext': BuildExtension
    }
)

2. 修改pointet2/_ext_src/目录下的代码

将以下文件中的AT_CHECK使用TORCH_CHECK替换(由于pytorch更换API)

pointnet2/_ext_src/include/utils.h
pointnet2/_ext_src/src/ball_query.cpp 
pointnet2/_ext_src/src/group_points.cpp 
pointnet2/_ext_src/src/interpolate.cpp 
pointnet2/_ext_src/src/sampling.cpp

五、编译pointnet2并安装依赖

编译pointnet2(中间出现warning不需要管,不出现error就行)
编译这步出问题的也特别多

cd pointnet2
python setup.py install

之后依赖安装的时候需要注意的是先安装'networkx>=2.2,<2.3',在安装'trimesh>=2.35.39,<2.35.40'。先安装trimesh的话,会自动安装networkx==2.6,之后可视化SUNRGBD数据集时会报错

pip install plyfile -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install network==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install trimesh==2.35.39 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

六、运行程序

运行单次前向传播代码(正好可以检查pointnet2是否编译成功),运行成功截图如下

CUDA_VISIBLE_DEVICES=0 python models/votenet.py

在这里插入图片描述

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值