pytorch

[pytorch] pytorch 특징 / pytorch 아키텍처 / pytorch 장점 / pytorch API 종류

독립성이 강한 ISFP 2023. 3. 14. 16:33
728x90
반응형

1. 파이토치 개요

파이토치(pytorch)는 딥러닝 프레임워크로 토치를 페이스북에서 파이썬 버전으로 내놓은 것이다. 토치는 파이썬의 넘파이 라이브러리처럼 과학 연산을 위한 라이브러리로 공개되었지만 이후 발전을 거듭하면서 딥러닝 프레임워크로 발전했다.

 

파이토치를 사용하는 대상 

1. 넘파이를 대체하면서 CPU를 이용한 연산이 필요한 경우

2. 최대한의 유연성과 속도를 제공하는 딥러닝 연구 플랫폼이 필요한 경우

2. 파이토치의 특징 

파이토치란?

"GPU에서 텐서 조작 및 동적 신경망 구축이 가능한 프레임워크"

 

  • GPU : 연산 속도를 빠르게 하는 역할을 한다.
    • 딥러닝에서는 기울기를 계산할 때 미분을 사용하는데, GPU를 사용하면 빠른 계산이 가능하다.
    • 내부적으로 CUDA, cuDNN이라는 API를 통해 GPU를 연산에 사용할 수 있다.
    • 병렬 연산에서 GPU 속도는 CPU의 속도보다 훨씬 빠르므로 딥러닝 학습에서 GPU 사용은 필수이다.
  • 텐서 
    • 텐서는 파이토치의 데이터 형태이다.
    • 텐서는 단일 데이터 형식으로 된 자료들의 다차원 행렬이다.
    • 텐서는 간단한 명령어(.cuda())를 사용해서 GPU로 연산을 수행하게 할 수 있다.
  • 동적 신경망 : 훈련을 반복할 때마다 네트워크 변경이 가능한 신경망.
    •  ex) 학습 중 은닉층 추가 혹은 제거하는 등 모델의 네트워크 조작이 가능하다.
    • 연산 그래프를 정의하는 것과 동시에 값도 초기화되는 "Define by Run" 방식을 사용한다. 따라서 연산 그래프와 연산을 분리해서 생각할 필요가 없기 때문에 코드를 이해하기 쉽다.

3. 파이토치의 장점

  • 단순함(효율적 계산)
    • 파이썬 환경과 쉽게 통합할 수 있다.
    • 디버깅이 직관적이고 간결하다.
  • 성능(낮은 CPU 활용)
    • 모델 훈련을 위한 CPU 사용률이 텐서플로와 비교하여 낮다.
    • 학습 및 추론 속도가 빠르고 다루기 쉽다.
  • 직관적인 인터페이스
    • 텐서플로우처럼 잦은 API 변경이 없어 배우기 쉽다.

4. 파이토치 아키텍처

파이토치의 아키텍처는 크게 세 개의 계층으로 나누어 설명할 수 있다. 파이토치 API, 파이토치 엔진, 연산처리

 

파이토치 아키텍처

 

4.1 파이토치 API 

사용자가 이해하기 쉬운 API를 제공하여 텐서에 대한 처리와 신경망을 구출하고 훈련할 수 있도록 돕는다. 사용자 인터페이스를 제공하지만 실제 계산은 수행하지 않는다. 파이토치 엔진으로 작업을 전달하는 역할만 한다.

 

  • torch : GPU를 지원하는 텐서 패키지
    다차원 텐서를 기반으로 다양한 수학적 연산이 가능하도록 한다. CPU 뿐만 아니라 GPU에서 연산이 가능하므로 빠른 속도로 많은 양의 계산이 가능하다.
  • torch.autograd: 자동 미분 패키지
    Autograd는 텐서플로우와 같은 다른 딥러닝 프레임워크와 가장 차별되는 패키지이다. 일반적으로는 신경망에 변경이 있을 경우(ex.은닉층 노드 수 변경) 신경망 구축을 처음부터 다시 시작해야 한다. 하지만 파이토치는 자동 미분을 사용하여 미분 계산을 효율적으로 처리한다. 즉, 연산 그래프가 즉시 계산되기 때문에 사용자는 다양한 신경망을 적용해 볼 수 있다.
  • torch.nn : 신경망 구축 및 훈련 패키지
    torch.nn을 사용할 경우 신경망을 쉽게 구축하고 사용할 수 있다. 특히 합성곱 신경망, 순환 신경망, 정규화 등이 포함되어 손쉽게 신경망을 구축하고 학습시킬 수 있다.
  • torch.multiprocessing : 파이썬 멀티프로세싱 패키지
    파이토치에서 사용하는 프로세스 전반에 걸쳐 텐서의 메모리 공유가 가능하다. 따라서 서로 다른 프로세스에서 동일한 데이터에 대한 접근 및 사용이 가능하다.
  • torch.utils : DataLoader 및 기타 유틸리티를 제공하는 패키지
    모델에 데이터를 제공하기 위한 torch.utils.data.DataLoader 모듈을 주로 사용한다. 또한, 병목 현상을 디버깅하기 위한 torch.utils.bottleneck 모델 또는 모델의 일부를 검사하기 위한 torch.utils.checkpoint 등의 모듈도 있다.

4.2 파이토치 엔진

파이토치 엔진 라이브러리는 C++로 감싼 다음 python API 형태로 제공되기 때문에 사용자들이 손쉽게 모델을 구축하고 텐서를 사용할 수 있다.

 

Autograd C++ : 가중치, bias를 업데이트하는 과정에서 필요한 미분을 자동으로 계산한다.

Aten C++ : C++ 텐서 라이브러리를 제공한다.

JIT C++ : 계산을 최적화 하기 위한 JLT 컴파일러이다.

 

4.3 연산처리

가장 아래 계층에 속하는 C 또는 CUDA 패키지는 상위의 API에서 할당된 모든 계산을 수행한다. CPU, GPU를 이용하여 효율적인 데이터 구조, 다차원 텐서에 대한 연산을 처리한다. 

 

 

728x90
반응형