파이썬 Python 기반에 Deep Learning(D/L) 활용 시 GPU 및 CUDA 환경 설정에 대한 설명입니다. 환경 설정에 방향은 두 가지 정도로 나뉠 수 있습니다. 개인적인 활용에서는 GPU 환경에 맞춰 CUDA 및 Pytorch 최신 환경으로 구성할 수 있고, 업무 환경 상 Pytorch 특정 버전에 맞춰 환경을 구성해야 될 수도 있겠습니다.

 

환경 설정에서는 GPU 드라이버, CUDA, cuDNN, Pytorch 버전이 호환되어야 정상 활용 가능하므로 개인적인 환경에 따라 다를 수 있겠지만 상황에 따라 재설치 및 Rollback 시간이 상당하므로 가능하면 환경설정에 시간 소모를 줄이고 개발에 집중하는 것이 좋다고 생각합니다.

 

현 블로그에서는 기본적으로 GPU 환경 조건이 충분하다는 상황에서 Pytorch 1.13 기준에서 환경 설정 과정을 설명합니다.

 

1. GPU 환경 확인: cmd 실행 후 ‘nvidia-smi’ 확인, 드라이버 업데이트

CUDA 버전과 드라이버 버전 확인 합니다. cmd 창에 출력되는 CUDA 버전은 지원 가능한 버전이므로 이하 버전들도 적용 가능합니다. 23년 12월 기준 RTX 30 시리즈 드라이버 최신 업데이트 시 CUDA 12.x와 드라이버 5xx.xx 입니다. 아래 주소 확인 후 최신 업데이트 합니다.

 

NVIDIA Driver: docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

 

 

 

2. Pytorch 1.13 기준 CUDA 버전 확인

파이토치 설치 방법은 conda와 pip으로 구분되어 있으며 개인 환경에 맞춰 CUDA 환경 구성 후 설치하면 됩니다. 현 시점에서는 CUDA 버전만 확인합니다. 파이토치 1.13은 CUDA 11.6x와 11.7x와 연동되는 것을 확인 할 수 있습니다.

 

pytorch.org/get-started/previous-versions/

 

 

3. GPU 환경에 따른 Capability

추가로 본인 GPU 환경에 따른 Capability를 확인해야 됩니다. RTX 3050/30603070/3080/3090의 경우 Capability 8.6 이며, 이는 CUDA 11.1 이상에서 활용 가능함을 확인 할 수 있습니다.

 

GPU Capability: en.wikipedia.org/wiki/CUDA

 

 

 

4. CUDA 환경 구축 및 Pytorch 설치

파이토치 1.13 호환성 기준으로 Capability 고려하여 CUDA 11.7.x 설치 후 cuDNN 11.x 설치하면 됩니다. cuDNN의 경우 압축 해제 후 파일들을 CUDA 설치된 폴더에 복사/붙여넣기하여 환경 구성을 완료합니다. 이후 앞에서 확인한 파이토치 1.13을 pip 또는 conda로 최종 설치합니다.

 

CUDA: developer.nvidia.com/cuda-toolkit-archive

cuDNN: developer.nvidia.com/rdp/cudnn-archive

 

 

 

5. 환경 구성 및 동작 확인: nvcc - -version

cmd 창에서 ‘nvcc –V’ 또는 ‘nvcc –version’으로 설치 확인 할 수 있습니다. 아래 코드를 통해 GPU 사용 및 할당 가능한지 확인할 수 있습니다.

 

import torch

print(torch.cuda.is_available()) # True면 활용 가능

 

추가로 실무에서 아래 코드로 디바이스 자동 지정 할 수 있습니다.

device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')

프로그래밍을 할 수 있는 언어는 크게 인터프리터 Interpreter와 컴파일 Complile 언어로 구분할 수 있습니다. 앞에서 설명한 C-언어가 컴파일 언어의 대표 예입니다. 인터프리터 언어에는 요즘 많이 활용 중인 파이썬 Python과 매트랩 Matlab 언어가 있습니다.

 

매트랩 Matlab은 수치 컴퓨팅, 데이터 분석 및 시각화에 활발히 사용 됩니다. 인터프리터 언어 특성상 사용하기 쉽고 다양한 소프트웨어 패키지를 이용하여 물리, 수학, 금융 및 제어 시스템을 포함한 다양한 과학 및 엔지니어링 분야에서 널리 사용됩니다. 그러나 파이썬은 무료에 반해 매트랩은 유료로 사용할 수 있습니다.

 

파이썬 Python의 경우 인공지능 분야 활용 확대로 활용성이 급격히 상승한 언어 중에 하나이며 다양한 응용 분야에서 활용되고 있습니다. 웹 Web 개발, Deep Learning(D/L), 네트웍, 서버, 게임, GUI 등등. 다만 무료 사용은 장점이지만 파이썬 버전에 따른 활용에 주의할 필요도 있습니다.

 

넘피 NumPy, 판다스 Pandas, Matplotlib, scikit-learn 등의 라이브러리는 다양한 데이터 분석에 활용 됩니다. 장고 Django와 플라스크 Flask와 같은 프레임워크는 확장 가능한 웹 응용 프로그램을 쉽게 개발할 수 있으며, 인공지능 Artificial Intelligence 과 자연어 처리  Natural Language Processing  분야에서는 텐서플로우 TensorFlow와 파이토치 PyTorch와 같은 프레임워크를 활용하여 훈련하는데 사용됩니다.

 

SciPy와 SymPy와 같은 라이브러리는 과학적 컴퓨팅, 수학적 문제 해결, 시뮬레이션 수행을 위한 도구들을 제공합니다. Pygame 라이브러리는 간단한 비디오 게임을 작성하기 위한 모듈을 제공합니다.

 

파이썬은 그래픽 사용자 인터페이스(GUI) 개발하는 데 사용될 수 있으며, Tkinter, PyQt 및 Kivy와 같은 라이브러리는 Desktop Application을 쉽게 구축할 수 있습니다.

C 언어는 1970년 초 벨 연구소(Bell Lab.)에서 유닉스 시스템의 운영체제를 만들기 위해 개발된 프로그래밍 언어 입니다. 역사가 오래되기도 했지만 현재까지 폭넓게 사용되는 언어이기도 합니다. C++ C에 확장판으로 객체지향 프로그래밍을 지원하기 위해 개발된 언어이며, C#은 마이크로 소프트사(Microsoft)에서 C++ 언어를 기반으로 닷넷 프레임워크(.NET Framework)의 응용 프로그램 개발을 위한 언어 입니다. 유사한 성격에 JAVA 언어 진영에 대응하기 위한 목적도 있다고 하죠.

 

C 프로그래밍 언어에 역사에서처럼 C 프로그래밍 문법을 잘 알면 C#까지 익히는데 많은 시간이 필요하지 않습니다. 프로그래밍 언어 습득은 전공과도 연관성이 있겠지만 업무와도 사용에 지속성에서 상당한 연관이 있습니다. 외국어를 습득하는 과정처럼 사용하면 사용할수록 느는 게 프로그래밍 언어도 같습니다.

 

 

프로그래밍 기술에서는 C 언어에 문법을 기본적으로 알고 있다는 가정하에 영상처리 기술들을 확인해보고 검증해보는 도구로 마이크로 소프트사의 Visual Studio에 포함된 MFC(Microsoft Foundation Classes)를 사용할 예정이고 간혹 C#에 대한 이야기도 할 예정입니다. 개발 환경 설치나 기본적인 내용들은 많은 블로그에 잘 나와 있으니 프로그래밍 이야기에서는 다양한 프로젝트들을 진행하면서 문제 해결이나 유용하게 사용했던 코드들에 대한 이야기를 해 볼까 합니다.

   프로그래밍은 컴퓨터가 이해할 수 있는 언어로 목적에 따라 동작 할 수 있게 구체화 시켜주는 작업을 의미합니다. 그 작업을 코딩(Coding)이라 부르며 더 나아가 컴퓨터 프로그램, 소프트웨어 또는 알고리즘 등에 구현을 의미하기도 합니다. 대부분에 전자기기에는 목적에 따라 작고 큰 소프트웨어가 담겨져 있습니다. 그 소프트웨어에 포함된 알고리즘들에 따라 특정 동작을 하게 되어 있으며 예를 들어 스마트폰에 각 기능별 아이콘을 터치하면 목적에 맞게 동작하는 것도 소프트웨어 기술이라 하겠습니다. 영상처리 기술들도 컴퓨터 프로그램과 매우 밀접하며 프로그래밍 언어를 통해 하나에 알고리즘으로 구현될 수 있습니다.

   컴퓨터가 알아들을 수 있는 프로그래밍 언어는 어떤 것들이 있을까요? 실제 사용되는 언어들은 수십 종류 이상일 듯 합니다. 아래는 세계적으로 사용되고 있는 프로그래밍 언어 중 가장 빈도수가 높은 것부터 순서대로 표시한 목록입니다.

 

 

 

   한번씩 들어본 언어도 있을 테고 사용을 해봐서 익숙한 언어도 있겠죠. 제 경우는 C/C++/C# MATLAB 언어에 익숙하고 앞으로 프로그래밍 이야기에서는 C 계열 언어를 기준으로 기술해 나 갈 예정입니다. 모든 언어를 잘 다루기는 어려울 수도 있습니다. 다만 자신에게 필요한 언어 중 하나만 정확하게 사용할 수 있다면 다른 언어를 배우고 응용 할때 상당한 도움이 될 수 있습니다.

+ Recent posts