Study/ROS

ROS noetic 환경을 위한 CUDA, cuDNN, tensorflow 설치

soohwan_justin 2020. 12. 4. 12:22

ROS Melodic버전까지는 공식적으로 파이썬2만을 지원하기 때문에 파이썬3를 사용하는 최근 딥러닝코드들은 사용할 수 없습니다. 따라서 이를 해결하기 위해 가상환경을 만들어서  파이썬3를 인터프리터로 설정하는 방법을 사용하던데... 며칠동안 삽질을 했지만 결국 가상환경에서의 python3코드를 돌리는 것은 실패했습니다. 자꾸 모듈 import가 안되네요...

 

그래서 결국 그냥 파이썬 3환경을 지원하는 최신 버전인 noetic으로 환경을 바꾸었습니다. 우분투 20.04가 나온지 몇 달이 지났으니 지금쯤이면 noetic 패키지도 많이 있겠지... 하고 찾아봤더니 제가 필요한 패키지들은 대부분 지원을 하는 것 같아서 결국 환경을 엎었습니다.

 

 


 

 

1. 우분투 20.04를 설치하고 나서,  우리가 필요로 하는 CUDA를 설치하기 위해 기존에 있는 엔비디아 드라이버 및 CUDA를 다 삭제해야합니다. 우분투 20.04는 설치 시 엔비디아 드라이버와 CUDA가 기본적으로 설치되어있습니다.

 

$ sudo rm /etc/apt/sources.list.d/cuda*
$ sudo apt remove --autoremove nvidia-cuda-toolkit
$ sudo apt remove --autoremove nvidia-*

 

$ sudo apt-get purge nvidia*
$ sudo apt-get autoremove
$ sudo apt-get autoclean

 

$ sudo rm -rf /usr/local/cuda*

 

 

2. CUDA 10.1을 설치합니다.

 

$ sudo apt install nvidia-cuda-toolkit

 

 

3. 설치된 CUDA의 버전을 확인합니다.

 

$ nvcc -V

 

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

 

 

4. CUDA가 설치된 위치를 확인하고, 엔비디아 드라이버를 다시 다운받습니다. 

 

$ whereis cuda

 

cuda: /usr/lib/cuda  /usr/include/cuda.h

 

 

 

5. 아래 링크에서 CUDA 10.1용 cuDNN 7.6.5를 다운받습니다.

 

developer.nvidia.com/rdp/cudnn-archive

 

cuDNN Archive

NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks.

developer.nvidia.com

 

6. 다운을 받고, 압축을 풀어줍니다.

 

$ tar -xvzf cudnn-10.1-linux-x64-v7.6.5.32.tgz

 

 

7. 압축을 풀고 나서, 그 파일들을 CUDA가 설치된 위치로 복사합니다.

 

$ sudo cp cuda/include/cudnn.h /usr/lib/cuda/include/

$ sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/

 

 

8. cuDNN의 권한을 설정해줍니다.

 

$ sudo chmod a+r /usr/lib/cuda/include/cudnn.h

$ sudo chmod a+r /usr/lib/cuda/lib64/libcudnn*

 

 

9. 환경변수를 설정해줍니다.

 

\$ echo 'export LD_LIBRARY_PATH=/usr/lib/cuda/lib64:\$LD_LIBRARY_PATH' >> ~/.bashrc

\$ echo 'export LD_LIBRARY_PATH=/usr/lib/cuda/include:\$LD_LIBRARY_PATH' >> ~/.bashrc

$ source ~/.bashrc

 

 

10. 다음부터는 conda 가상환경에서 진행합니다.  pycharm으로 conda 가상환경을 만들어서 해봤는데 이 또한 자꾸 모듈 임포트가 안돼서 그냥 conda로 직접 만들고, 주피터 노트북으로 실행했습니다.

 

conda 가상환경을 만든 후, 다음 명령으로 tensorflow와 주피터 노트북을 설치합니다.

 

$ pip install --ignore-installed --upgrade tensorflow-gpu

$ pip install jupyter

 

 

10. jupyer notebook을 실행하고, tensorflow가 gpu를 인식하는지 확인해봅니다

import tensorflow as tf
tf.config.list_physical_devices("GPU")

출력 결과가 아래처럼 나와야합니다.

 

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

 

 

11. tensorflow는 다 되었으니, 이제 가상환경에서 ROS를 실행하기 위한 패키지들을 설치합니다.

 

$ pip install rospkg catkin_pkg

$ sudo pip3 install netifaces

 

설치 후, jupyter notebook에서 rospy같은 ROS라이브러리들을 임포트 해보세요. 문제가 없으면 다음으로 넘어갑니다.

 

 

12. openCV를 설치합니다.

 

$ conda install -c conda-forge/label/cf202003 py-opencv

 

 

13. 간단한 예제를 실행해봅니다.

#!/usr/bin/env python
 
from cv_bridge import CvBridge, CvBridgeError
import rospy
import cv2
from sensor_msgs.msg import Image


class LoadImage(object):
    def __init__(self):
        self.image_sub = rospy.Subscriber("/camera/color/image_raw", Image, self.camera_callback)
        self.bridge_object = CvBridge()
 
    def camera_callback(self, data):
        try:
            cv_image = self.bridge_object.imgmsg_to_cv2(data, desired_encoding="bgr8")
        except CvBridgeError as e:
            print(e)
        
        cv2.imshow('p3dx_new', cv_image)
        cv2.waitKey(1)
        
def main():
    load_image_object = LoadImage()
    rospy.init_node('load_image_node', anonymous=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down")
    cv2.destroyAllWindows()
 
if __name__ == '__main__':
    main()

 

 

 

 

 

참고 사이트

 

medium.com/@stephengregory_69986/installing-cuda-10-1-on-ubuntu-20-04-e562a5e724a0

 

seonghyuk.tistory.com/58

 

 

'Study > ROS' 카테고리의 다른 글

Fuse Sensor Data to Improve Localization (1. Merging sensor data)  (0) 2021.01.12
ROS noetic YOLO V3  (0) 2020.12.29