지식이 늘었다/데이터, 통계, 딥러닝

파이토치 - Device Agnostic Code, 기기 불가지론적 코드

PurpleGuy101 2025. 2. 17. 10:39

0.

 

freecodecamp.org의 파이토치 튜토리얼 4:03:02

(PyTorch for Deep Learning & Machine Learning – Full Course

,https://www.youtube.com/watch?v=V_xro1bcAuA&t=8920s)

 

# Setup device agnostic code (기기에 대한 불가지론적 코드 = 기기의존적이지 않도록 만드는 코드) 
device = "cuda" if torch.cuda.is_available() else "cpu"
device

 

 

CUDA semantics

https://pytorch.org/docs/stable/notes/cuda.html

 

 

 

1.

 

제대로된 모델학습을 하려면 GPU나 NPU가 필요해지고..

CPU만 있는 기기, CPU+GPU만 있는 기기에 따라서

또 분기점이 생긴다.

 

그렇기 때문에 코드상에서

Device Agnostic Code를 작성하여

특정 기기에만 의존하지 않고 유연하게 코드가 작동하도록 만드는 것이 중요할 것이다.

 

2.

 

(잡담1)

마이크로프로세서를 처음 배울 때에도 

왜 사람들이 uint32_t나 uint64_t와 같은 커스텀 데이터타입으로 int를 쓰지? 했는데

그 이유는 생각보다 int와 long이 OS에 따라 표준없는 방식을 사용했기 때문이다.

 

386시절의 MS-DOS에서는 int가 2byte = 16bit였고

지금의 int는 거의 4byte = 32bit로 통일이 되었으나

 

아직까지도

윈도우의 long 데이터타입은 4byte = 32bit인데

리눅스의 long 데이터타입은 8byte = 64bit인 것을 알 수 있다.

 

이러한 기기의존적인 요소가 생기면

코드를 유지보수하는 과정에 큰 하자가 생긴다.

 

3.

 

(잡담2)

또 딥러닝 환경에서는 재현성(Reproducibility)의 개념도 매우 중요해진다.

 

똑같은 데이터를 가지고

특정 초기값과 학습을 통한 가중치의 조절과 계산했는데,

 

어느 환경에서는 성공적으로 loss가 줄어들며 학습이되고,

어느 환경에서는 loss가 날뛰며 학습이 안되어

비결정적indeterministic인 결과를 보이게 되면..

 

해당 모델을 검증하는 것에 큰 어려움이 있을 것이다.

 

(https://pytorch.org/docs/stable/notes/randomness.html)

 

 

4.

 

여하튼 그런의미에서 기기에 의존하지 않는 

Device Agnostic Code를 작성하는 것은 중요하다.

특정기기에 종속되는 코드를 다른 기기에서 재작성하는 것은 

리소스낭비이다.

 

그렇기 때문에 처음부터

"네가 어떤 기기를 사용할지는 모르겠지만" = "불가지론적인" = Agnostic한

코드를 작성하는 것이 중요하다.

 

(https://pytorch.org/docs/stable/notes/cuda.html)

 

device = "cuda" if torch.cuda.is_available() else "cpu"
device

 

 

5.

역시 애매한 데이터보다는 

공신력있는 원본데이터를 보는게 좋다.

아래의 공식사이트를 통해 직접 읽어보는 습관을 기르자.

https://pytorch.org/docs/stable/notes/cuda.html#best-practices

 

기타)

(https://stackoverflow.com/questions/52613383/a-better-way-to-make-pytorch-code-agnostic-to-running-on-a-cpu-or-gpu)