[Book] 파이썬 딥러닝 파이토치 PART 1 : Pytorch 기초
본문 바로가기
AI/ML&DL

[Book] 파이썬 딥러닝 파이토치 PART 1 : Pytorch 기초

2022. 8. 15.

1. 가상환경 (Virtual Environment)

1-1. 가상환경이 필요한 이유

 pip (Python package manager)로 설치한 package는 전역으로(globally) 설치되는데(pip로 request 모듈을 설치하면 모든 Python script에서 해당 모듈을 사용할 수 있게 됨), 서로 다른 version의 package를 사용해야하는 프로젝트를 진행할 때 문제가 발생할 수 있다.

 딥러닝 프레임워크로 예시를 들자면, 한 프로젝트는 TensorFlow 1.0 버전 방식의 코드로 작업하고, 다른 프로젝트는 TensorFlow 2.0 버전으로 작업하고 있다면, 하나의 버전만 사용할 수 있을 때 난감할 수 있다. 이를 위해 도입된 것이 가상환경 (Virtual Environment)이다. 

 

1-2. 가상환경이란?

 가상환경이란 '독립된 작업 공간'으로, 서로 다른 공간에 영향을 미치지 않으며 각 작업 공간에 다른 종류와 버전의 패키지를 설치해 사용할 수 있다.

 

1-3. 가상환경 실습

 1) Python - Windows / Linux

  명령 프롬프트 창(cmd)에서 실행

# pip를 통해 virtualenv 설치
pip install virtualenv

# virtualenv를 이용해 가상환경 생성 (가상환경은 진행하는 프로젝트 이름으로 설정)
virtualenv [example]

# 가상환경 생성할 때 Python version을 다르게 생성 가능
virtualenv [example] --python=3.6

# call를 통해 생성한 가상환경 실행 (Windows)
call [example]/scripts/activate

# source를 통해 생성한 가상환경 실행 (Linux)
source [example]/bin/activate

# 실행 중인 가상환경 종료
deactivate

 

 2) Anaconda - Windows / Linux

  Anaconda 설치한 후, Anaconda Prompt 창에서 실행

# conda를 이용해 가상환경 생성
conda create [example]

# conda를 이용해 가상환경 생성할 때, 필요한 package 함께 설치 가능
conda create [example] pandas torch # Pandas, Torch 모듈 설치와 함께 가상환경 생성

# 가상환경 생성할 때, Python version 지정 가능
conda create [example] python=3.6

# activate를 이용해 생성한 가상환경 활성화 (Windows)
activate [example]

# source activate를 이용해 생성한 가상환경 활성화 (Linux)
source activate [example]

# 가상환경 종료 (Windows)
deactivate

# 가상환경 종료 (Linux)
source deactivate

 

1-4. Docker

A comparison of how containers and virtual machines are organized

 가상환경은 각 module별로 각기 다른 version을 사용해야 할 때 유용했는데, Docker(도커)는 이를 더 확장해 각 programming의 version 및 개발 환경 자체를 독립적인 공간으로 활용해 관리할 수 있게 도와준다. Container 기반의 오픈 소스 가상화 플랫폼으로, 각 Container 내 프로그램, 데이터베이스 서버 등 다양하게 구성할 수 있고, 각 Container를 독립적으로 활용할 수 있다.

2. CPU vs GPU

 2-1. parameter 수

  딥러닝의 경우, 각 layer의 node가  증가할수록, 각 layer의 수가 깊어질수록 (Wide & Deep) parameter 수가 급격히 증가한다. 예를 들어, VGG(Visual Geometry Group; CNN 구조에 깊이를 증가시킨 형태) 계열 model의 parameter 수는 매우 많다. parameter 수가 많을수록 model의 성능이 향상될 것이라 생각하지만, 오히려 overfitting 문제로 실전에서는 Task를 잘 수행하지 못할 수 있다. (overfitting solution으로 parameter 수 줄이기가 있을 만큼 parameter 수가 많다고 항상 좋은 것이 아니다.)

 따라서 해결하고자 하는 Task를 수행하고자 '적절한' 수의 parameter를 사용하고, 실전에서도 좋은 성능을 보이기 위해는 Regularization(일반화, 정규화, 규제)가 정말 중요하다. Regularization 방법으로는 대표적으로 weight decay, dropout, batch normalization 등이 있다. 

 

 2-2. CPU vs GPU

 많은 수의 parameter를 이용해 model를 설계할 때는 GPU가 CPU보다 훨씬 빨리 계산해 GPU가 많이 이용되고 있다. CPU는 GPU에 비해 고차원의 일을 수행할 수 있지만, 많은 수의 parameter를 계산하기에는 속도가 많이 느리다.  반면, GPU는 병렬적으로 빠르게 계산하여 각 parameter별 gradient를 계산한 결괏값을 얻고, backpropagation을 통해 parameter를 update하는 과정에 유용하다. 

 

2-3. CUDA / CuDNN

1) CUDA

 CUDA는 GPU에서 병렬 처리를 수행하는 알고리즘을 각종 프로그래밍 언어에 사용할 수 있도록 도와주는 GPGPU(General-Purpose computing on Graphics Processing Units) 기술이다. GPU의 본 목적인 graphics processing(그래서 CPU와 달리 병렬로 빠른 속도로 처리 가능)만 하는 것이 아니라 병렬 연산 기능을 수행하면서 General-Purpose GPU(GPU 상의 범용 계산), 즉 graphics processing + parallel computing, 범용적으로 활용된다는 의미로 GPGPU라고 부르기도 한다. 

 Python에서 GPU를 인식할 수 있도록 하기 위해,  TensorFlow, Pytorch와 같은 deeplearning framework를 사용하기 위해 CUDA를 설치해야 한다. 

 

2) cuDNN

cuDNN (nvidia CUDA Deep Neural Network Library)는 deep learning model를 위한 GPU 가속화 라이브러리의 기초 요소 (convolution, pooling, activation 등)와 같은 일반적 루틴을 빠르게 이행할 수 있도록 도와주는 library이다. 더불어 Neural Network를 빠르게 최적화하거나 검증/배포시키거나 TensorFlow, Pytorch와 같은 deep learning framework를 가속화해준다. 

Reference

https://docs.docker.com/get-started/overview/

 

Docker overview

 

docs.docker.com

https://89douner.tistory.com/158

 

3.GPGPU와 CUDA (feat.cuDNN)

안녕하세요~ 이번글은 GPGPU라는 개념과 CUDA를 소개하면 GPU구조를 가볍게 살펴볼거에요. CPU는 다양한 시스템 자원(ex; I/O device)를 제어해야하고 복잡한 명령들을 처리해야하기 때문에 연산을 위한

89douner.tistory.com

https://blogs.nvidia.co.kr/2018/01/16/cuda-toolkit/

 

CUDA 툴킷 다운로드하고, GPU를 자유자재로 활용해보자! - NVIDIA Blog Korea

우리가 언어를 매개로 의사소통을 하듯이 기계와 커뮤니케이션을 하기 위해서는 프로그래밍 언어가 필요합니다. 개발자들이 프로그래밍 언어로 컴퓨터에 지시를 내리면, 지시문을 명령어로 번

blogs.nvidia.co.kr

https://tutorials.pytorch.kr/beginner/basics/intro.html

 

파이토치(PyTorch) 기본 익히기

파이토치(PyTorch) 기본 익히기|| 빠른 시작|| 텐서(Tensor)|| Dataset과 Dataloader|| 변형(Transform)|| 신경망 모델 구성하기|| Autograd|| 최적화(Optimization)|| 모델 저장하고 불러오기 Authors: Suraj Subramanian, Seth Jua

tutorials.pytorch.kr

 

댓글