[CCTVWithAI] (2021.06.15) 개발 일지 | 앱 개발 방법 확정, 머신러닝·딥러닝 학습 계획, Anaconda 가상 환경에 Pytorch 설치하기

Hotaek Han·2021년 6월 15일
1

CCTVWithAI

목록 보기
4/25
post-thumbnail

앱 개발 방법 확정

React Native를 기반으로 개발하기로 결정

Cross Flatform으로 개발하는 것은 거의 확정된 상태였고, 그 중에서 어떤 선택을 하느냐가 남아 있었다. 세 가지 선택지가 있었다.

  • Flutter
  • React Native
  • Xamarin

뭐가 좋고 나쁘고 보다는 어떤 결과물을 목표로 하는지에 따라 적합한 환경이 있겠다.

그 외에도 선택하는데 기준이 된 것은 사용자 수가 얼마나 되는지, 향후 우리의 학습 방향과 얼마나 일치하는지 등이 있었다.


Flutter의 경우 애니메이션 등의 효과를 React Native보다 쉽고 빠르게 구현할 수 있고, 웹을 제작할 수도 있다고는 하는데, 우리가 목표하는 어플리케이션이 과연 그러한 기능이 필요한지는 의문이다.

또한, Flutter는 만들어진지 얼마 되지 않아서 React Native에 비해 커뮤니티가 아직 작은 것 같았다. 이것은 우리가 참고할 수 있는 정보가 적다는 뜻일 것이고 우리가 마주할 문제를 해결할 때 어려움이 될 수 있는 부분이었다.

마지막으로 Dart 언어를 공부해야 하는데, 후술하는 React Native의 JavaScript, Xamarin의 C#은 모두 배워보고 싶었고 이후의 활용도도 더 좋다고 생각하는데 Dart의 경우엔 비교적으로 그렇지 않았다.

React Native의 경우 많은 수의 앱이 개발되는 프레임워크이기 때문에 참고할 수 있는 레퍼런스가 가장 많을 것이라고 판단했고, 우리 둘 다 원래 공부해볼 의향이 있었던 JavaScript 기반이었기 때문에 향후 학습 방향과도 일치했다.

또한, codepush를 통해 앱 심사 없이도 빠르게 업데이트 할 수 있다는 장점도 있었다.

한 가지 우려되는 점은 JavaScript와 React에 대한 지식이 (React와 React Native가 다른 것인지 오늘 알았을 정도로) 전무하기 때문에 두 가지를 학습하면서 힘 빼느라 정작 필요한 React Native를 접하기도 전에 지쳐버릴 것이 우려되긴 한다.

Xamarin의 경우 native 급의 사용자 경험과 성능을 구현할 수 있다는 장점이 있었다. 또한 React Native만큼 전 세계적으로 많은 개발자군을 보유하고 있었다. C# 언어 기반이라는 점도 마음에 들었다. 전부터 공부해보고 싶었던 언어이기 때문이다.

많은 장점이 있는데 왜 선택하지 않았느냐고 묻는다면 C#보단 JavaScript를 공부해보고 싶었기 때문이라고 밖에 못하겠다.


언급한 사항 외에도 React Native와 Xamarin 사이의 많은 차이점이 있겠지만 앱 개발에 무지했던 만큼 아직은 와닿지 않아서 고민은 이정도로 하고 결정 내린 길로 우선은 시작해야겠다.


머신러닝·딥러닝 학습 계획

어떻게 (내가) 학습할 것인가와 TensorFlow? Pytorch?

기초적인 이론에 대한 이해도 없어서 바로 프레임워크를 활용해서 모델을 빌드할 수 있을 것 같지가 않았다. (이게 조금 공부한다고 될 일인지도 모르겠다.)

막 배운 선형대수를 활용해서 인공지능 분야를 이해하는데 필요한 선형 회귀 분석, 주성분 분석, 고유값 분해 등에 적용해보고 싶은 욕심도 있다. 그렇다고 인공지능 이론을 처음부터 찬찬히 공부하기엔 프로젝트를 진행하다가 진이 빠질 것 같다.

결론은 이론과 실습을 어느 하나를 포기하지는 못하겠다는 생각이 들었다.
그래서 이론 공부를 조금씩 하면서 실습 강의를 따라가는 방향으로 진행할 것 같다.


이론 공부는 Sung Kim 교수님의 모두를 위한 머신러닝/딥러닝 강의를 따라가며 학습하기로 했다. 이 강의에도 실습하는 부분이 있는데, TensorFlow를 활용하는 방식으로 진행된다.

실습 공부는 boostcourse의 무료 강의인 파이토치로 시작하는 딥러닝 기초를 수강하기로 했다. 기초적인 Machine Learning, CNN (Convolutional Neural Network), DNN (Deep Neural Network) 등에 대한 이론적인 부분과 그에 해당하는 프로젝트를 진행하는 방식으로 구성되어 있다.

강의에서 진행되는 프로젝트를 따라하며 어떤 식으로 우리만의 프로그램을 만들어가야 할 지를 배울 수 있을 것으로 기대한다. 이 강의에서 실습은 Pytorch를 활용한다.


아직 Pytorch가 적합할지, TensorFlow가 적합할지는 잘 모르겠다. 두 강의가 각각 다른 Framework를 사용하기 때문에 둘 다 경험해보며 판단해야겠다.


Pytorch 설치하기

포스팅에 앞서

설치하는데 필요한 작업들이 정말 많았는데, 내가 방황하지 않도록 To-Do 리스트를 제공하여 나침반과 같은 존재가 되어준 작성자님께 정말 감사하다는 말을 적고 싶다. (아래 링크)

PyTorch 설치 및 colab 사용 방법 (여기서 colab은 사용하지 않는다)

앞으로 나열될 과정은 크게 두 가지로 나뉘는데 GPU를 사용하기 위한 세팅과 PyTorch 설치이다. 간단하게 목차로 정리하면 아래와 같다.

GPU 세팅 과정

  • CUDA 설치
  • cuDNN 설치
  • 환경 변수 설정

PyTorch 설치 과정

  • 가상 환경 구축을 위한 Anaconda 설치
  • PyTorch 설치

우선.. 이 작업이 이렇게 오래 걸릴 줄은 전혀 몰랐다.

나는 그저 위에서 언급한 실습 강의에서 별 말 없이 pytorch를 import 해오길래 '아 그냥 cmd에서 pip install pytorch하면 되겠지'하고 검색해봤는데 전혀 그렇지가 않았다.


CUDA, cuDNN이 뭐지?

PyTorch 공식 홈페이지의 Get Started 메뉴를 클릭하고 위의 사진에 써져 있는대로 pip 명령어를 복사하여 cmd에 붙여넣기 했지만 작동하지 않았다.

더 알아보니 많은 양의 연산을 PyTorch는 내부적으로 CUDA와 cuDNN라는 것의 API를 활용하여 빠르게 처리할 수 있다고 한다.

CUDA(Compute Unified Device Architecture)는 연산할 때 GPU를 활용할 수 있도록 Nvidia가 만든 것이고, cuDNN(CUDA Deep Neural Network library)은 CUDA를 이용해 딥러닝 연산을 가속해주는 라이브러리라고 한다. GPU를 활용한 연산 속도는 CPU에 비해 훨씬 빠르다고 한다.....

이 곳에 조금 더 자세한 설명이 있다.


GPU 사용이 가능한 환경인지 확인하기

그렇다면 내 컴퓨터는 CUDA와 cuDNN을 사용할 수 있는 환경일까. 나는 데스크탑 없이 노트북만 사용하고 있기 때문에 설마 하는 생각이 들었다.

조건은 CUDA Compute Capability가 3.5 이상이어야 하는데, MX250을 사용하고 있는 나는 6.1로 다행히도 조건을 충족했다. (생각보다 여유로워서 기분이 이상하지만 어쨌든 된다.)

위의 표는 이 곳에서 확인할 수 있다.


Anaconda로 가상 환경 빌드하기

동시에 진행한 일은 Anaconda를 설치하는 것이었다. Anaconda는 프로젝트를 진행할 수 있는 가상 환경을 제공하여 프로젝트 별로 독립된 환경에서 개발할 수 있도록 해준다.

프로젝트를 진행하다 보면 다양한 라이브러리와 패키지를 사용할텐데 이것들이 버전에 따라 충돌을 일으키는 경우가 발생할 수 있다고 한다. 이러한 상황을 방지하기 위해 Anaconda를 통해 가상 환경을 구축하기로 했다. 아래의 링크에서 도움을 받았다.

[파이썬] Python 설치하기, 아나콘다 설치하기, jupyter notebook 설치
[Anaconda] 가상환경 만들기 + 필요한 이유


CUDA Toolkit 10.2, cuDNN 설치하기

CUDA를 사용하기 위해 CUDA Toolkit Archive에서 CUDA 10.2 version을 선택하고 나의 컴퓨터 환경에 맞게 설치해주었다.

또한, cuDNN을 사용하기 위해 NVIDIA cuDNN에서 cuDNN 파일을 다운로드 받아 CUDA가 설치된 폴더에 압축을 풀고, 환경 변수에 경로를 추가해주었다.

이로써 GPU 세팅이 완료되었다.

PyTorch 설치하기

이제야 다시 PyTorch를 설치를 시도할 수 있게 되었다.

아까는 pip install 을 이용하여 설치하려고 했지만 가상 환경을 빌드했으므로 내가 만든 가상 환경에 PyTorch를 설치하려고 한다.

'Package'에 Conda를 선택하면 아까와 다른 설치 명령어가 'Run this Command'에 출력된다.


Anaconda Prompt를 실행한 후에 미리 빌드한 나의 가상 환경인 'pytorch'에 위 사진의 커맨드을 붙여넣기 해준다.


어떤 package들이 설치될 것인지 알려준 후 진행할 것이냐고 물어본다. package 목록을 자세히 보면 pytorch-1.8.1이 보인다.

[y]를 입력해준다.


우선 설치는 끝났으나 성공적으로 끝났는지 테스트가 필요하다.


torch.cuda.is_available()의 값이 True가 출력되므로 CUDA가 정상적으로 설치되었음을 알 수 있다.

torch.cuda.get_device_name(0)의 값이 내 그래픽 카드 모델명인 'GeForce MX250'으로 정상적으로 출력된다.

torch.__version__이 1.8.1로 정상적으로 출력된다.

Tensor(3, 4).cude()의 값이 참고한 사이트와 다르긴 한데 음... 아.. 조금 찝찝하긴 한데 일단 성공했다.

.cuda()를 입력했을 때 NVIDIA GPU 동작 목록에 python.exe가 뜨면서 GPU를 사용하고 있음을 알 수 있다.

나머지는 조금 쉬었다가 알아봐야겠다.


이상으로 PyTorch 설치를 마친다.



참고 자료

Flutter vs React Native vs Xamarin: Which is the best choice for 2020? (Updated)
Flutter, 왜 선택하지 못했나
자마린(Xamarin) 앱 개발의 장,단점
react native 장단점, 2개월간의 삽질기
[Youtube] 리액트 네이티브 vs 플러터. 당신의 선택은?

2개의 댓글

comment-user-thumbnail
2021년 6월 18일

개발세상에서는 'setting'이 가장 진빠지고 넘나 힘듦ㅠㅠ

1개의 답글