** 본 강의의 software stack 은 NVIDIA GPU 기준으로 설명된다. 왜냐하면 엔비디아는 software stack(gpu 를 원할하게 사용할 수 있는 환경 구축)이 잘되어있기 때문이다.
deep learning 라이브러리와 hardware 사이의 software stack 이 잘되어있는 것이 중요하다.
General Deep Learning software stack
아래에 있는 모든 hierarchy 를 software stack 이라고 부른다.
위에서 High-level api 부터 아주 간단하게 보면,
Keras 는 (파이토치에는 해당되지 않지만) Tensorflow 딥러닝 라이브러리보다는 상위레벨이다.
Distributed DL 프레임워크는 Horovod 가 있다. (멀티 gpu 이상의, 멀티 노드에서의) 분산학습을 쉽게 하기 위한 프레임워크이다.
Acceleration 라이브러리는 직접 하드웨어에서 실행할 수 있는 GPU instruction 들이 저장되어있다. 이 instruction 들을 API, Program language 로 구현한다.
그리고 맨 마지막에 하드웨어가 있다.
** FPGA : 하드웨어를 프로그래밍할 수 있는 칩. 하드웨어 언어로 프로그래밍해서 원하는 cpu 나 gpu 를 만들 수 있다.
pytorch source structure
파이토치 라이브러리는 크게 4가지 디렉토리가 존재한다.
- torch/ : front-end 담당, nn.Linear 등이 사용자와 인터페이싱하고있는 모듈이 저장되어있다. 파이썬으로 이루어져 있기 때문에 (인터프리터와 컴파일러로 이루어져있어서) 느리다.
- torch/csrc/ : 파이썬과 c 를 이어주는 binding 이 구현되있다. c로 구현되어 있다.
- api/ : cpp(씨쁠쁠) API
- autograd/
- jit/ : TorchScript
- aten/src/ATen/ : A Tensor 라이브러리의 약자. 텐서에 수행하는 operation 들(conv, matmul, etc) 이 구현되어 있다.
- native/ : implemenatation → 어떤 하드웨어를 사용하냐에 따라 어떤 코드를 사용할지 결정된다.
- /TH, THC : legacy 코드.
- c10/ : TensorImpl 등
ATen (A Tensor library)
Pytorch default Runtime Execution
aten 은 tensor mathematical operation library 로,
파이썬은 느리기 때문에 사용자가 사용하기 쉽도록하는 프론트엔드의 역할만 할 뿐 실제 계산 라이브러리는 (c, cpp, cuda) 등 다른 언어로 이루어져 있다.
사용자가 사용하는 하드웨어가 무엇이냐에 따라 Aten 이 어떤 코드를 돌리는지 결정한다.
예를 들면, gpu→cuda를 사용 등.
#include <ATen/ATen.h>
at::Tensor a = at::ones({2, 2}, at::kInt);
at::Tensor b = at::randn({2, 2});
auto c = a + b.to(at::kInt);
위는 aten 코드의 간단한 예시이다.
Anatomy if an Operator Call
예시 1 : torch.add()
![](https://blog.kakaocdn.net/dn/dXyzpS/btsJHoW0oPh/c2xlrNe01IvtYaulUfVIR1/img.png)
torch.add 함수는 위 그림과 같은 단계를 거쳐 실행된다.
Python argument parsing 으로 python→cpp 로 넘긴다.
Variable Type 에서 float point 인지 integer 인지 데이터형을 정한다.
Type 에서 device type 과 layout(data가 메모리에 어떻게 mapping 되어있는지) 을 결정한다.
이후 Naitive function 안에 연결되어있는 kernel(operator 를 구현하는 단위)을 실행한다.
예시2: conv
torch 의 Conv2d 를 실행시키면 F.conv2d() 가 실행된다. (F=torch.functional, 파이썬의 프론트엔드같은 개념)
→ F에서 aten 을 호출한다.
→ aTen 에서 naitive 폴더의 Convolution.cpp 에 구현된 conv 를 실행한다.
pytorchATen/native/ : Aten github 에서 다음 디렉토리로 들어가면 cpp 로 구현된 convolution 등 다양한 함수들이 있다.
aten src위 코드에서 어떤 device 에 따라 계산 라이브러리를 사용할 것인지가 결정된다.
'머신러닝 이모저모' 카테고리의 다른 글
[이화여대 강의] 2. Deep Learning Software Stack 1 (3) (3) | 2024.09.21 |
---|---|
[이화여대 강의] 2. Deep Learning Software Stack 1 (2) (0) | 2024.09.20 |
[이화여대 강의] Orientation (0) | 2024.09.20 |
Precision 개념 (0) | 2024.02.18 |
VScode 에서 tmux 사용하기 (0) | 2024.01.03 |