이 글은 필자가 헷갈리는 부분들이 있어 필자가 이해한 내용을 정리한 글입니다. 참고자료는 링크, 블로그, 블로그, 링크 입니다.
Server: 클라이언트에게네트워크를 통해정보나 서비스를 제공하는컴퓨터 시스템 (위키피디아 출처)
내 경우, 내 컴퓨터 (local machine) / 랩실의 서버 머신 (server)에 내 컴퓨터로 접속 (client) --이는 ip주소를 통해 네트워크로 접속. 서버에는 여러가지 포트번호가 있어 포트 번호로 접속하게 된다.
서버 내에서 여러가지 환경을 구현하기 위해 크게 두가지 방법을 사용한다.
Hypervisor (Virtual Machine): Virtualize hardware
Docker: Virtualize operating system
Docker container를 통해서 여러가지 OS를 구현할 수 있고 docker hub를 통해서 docker image를 pull해, 이 image를 통해서 해당 OS를 만든다.
CPU(Computer Programming Unit, 중앙 처리 장치): 컴퓨터 및 운영 체제에 필요한 명령을 처리하는 중앙 장치. 여러 개의 프로세싱 코어를 갖추고 있다. 순차적인 프로그램을 실행할 때 좋은 성능을 발휘하지만 대용량 처리에는 약하다.
RAM(Random Access Memory): 프로그램이 실행되는 동안 필요한 정보를 저장하는 주기억 장치
NPU(Neural Processing Unit): 수년간 GPU를 이용해 딥러닝 연산을 해온 상황에서 딥러닝에 보다 최적화된 단위 계산 유형들을 HW 블럭을 꾸며서 최적화되고, 정형화되면서 아예 딥러닝 계산 전용 칩셋인 NPU가 생성되었다.
Google의 TPU(Tensor Processing Unit)
GPU(Graphics Programming Unit, 그래픽 처리 장치): GPU는 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치이다. 계산 능력이 강화되어 일반적인 산술 연산 처리에도 쉽게 이용되도록 개선되며 다양한 데이터 병렬 응용들을 위한 가장 이상적인 보조 프로세서로 입지를 굳히고 있다.
GPU Memory인 VRAM(Volatile Random Access Memory)
CPU보다 더 작고 전문화된 코어로 구성된 프로세서 이다. 여러개의 코어가 동시에 작동되므로(Parallel programming) 여러 코어로 나누어 처리할 수 있는 작업의 경우 GPU가 엄청난 성능 이점을 제공한다. GPU의 수많은 core들에 thread를 돌리면 데이터를 CPU보다 훨씬 빨리 처리할 수 있게 된다. (예를 들자면 n x n 의 matrix가 있다고 하면 이 matrix의 합을 구할 때는 보통 컴퓨터로는 O(n^2)이라는 시간이 소요된다. 하지만, n x n core를 가진 GPU로 병렬 프로그래밍을 하게 된다면 이 연산이 O(1) 시간만에 끝나게 된다.)
Nvidia의 CUDA(Compute Unified Device Architecture): CUDA는 Nvidia가 만든 병렬 컴퓨팅 플랫폼 및 API 모델이다. C언어를 이용하여 GPU의 계산을 스케줄링할 수 있도록(병렬 계산 알고리즘 구현) 제공하는 NVIDIA의 일종의 SDK(Software development kit)이다.
Nvidia의 cuDNN(CUDA Deep Neural Network library): 기본적인 딥러닝 primitive들을 편리하게 구현하도록