Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Ai based on gpu

Points to be aware of when setting up the GPU and points to be aware of when verifying performance are summarized based on the reference link (https://hiwony.tistory.com/3).

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Ai based on gpu

  1. 1. AI Based On GPU Produced by Tae Young Lee
  2. 2. 딥러닝에서 GPU가 필요한 이유 행렬과 같은 연산을 할때 CPU는 각각의 행렬 elements들을 순차적으로 계산. 그런데, 행렬이 연산되는 방식을 보면 굳이 순차적으로 할 필요없이 각각의 elements들을 병렬적으로 계산할 수 있다 단순히 3D 그래픽 처리를 위해 고안된 그래픽카드가 오늘날 tensor 계산을 기본으로 하는 딥러닝 연산에 최적으로 적용된 것. (딥러닝 구조가 대부분 numpy 패키지로 구성되어 있다.) https://89douner.tistory.com/m/157
  3. 3. 내장그래픽 vs 외장그래픽 내장그래픽은 보통 CPU 내부에 있는 그래픽카드를 의미하고, 외장그래픽은 CPU 외부에 있는 그래픽카드. (CPU 내부에 있나, 외부에 있나 그 차이!) 사실 내장그래픽만으로도 배틀그라운드 같은 게임도 충분히 돌아가지만 좀 더 생동감 넘치는 게임을 하기위해서는 더 높은 사양의 그래픽 카드를 필요로 한다. 그렇기 때문에 대부분 외장그래픽을 구매해서 모니터와 연결하여 사용 딥러닝 모델을 학습 시키기 위해서 내장 그래픽이 아닌 외장그래픽을 사용 하게 되는걸까? https://89douner.tistory.com/m/157
  4. 4. 내장그래픽 CPU의 내장그래픽이 동작하려면 CPU와 마찬가지로 메모리에서 데이터를 읽어옴. CPU는 메인메모리 전부를 자신의 공간처럼쓰지만 내장그래픽은 함부로 그렇게 할수가 없음. 그렇기 때문에 내장그래픽이 메인메모리의 일부를 자신의 전용메모리로 사용할건지, 공유해서 사용할할건지 사전에 결정해야 한다. "내PC->오른쪽 마우스 클릭 -> 속성" 으로 접속하시면 가끔 실제 메모리보다 적은 양의 메인메모리가 사용가능하다고 나오는데 이는 메인메모리의 일부(0.11=8.00-7.89)가 내장그래픽의 전용메모리로 잡혀있기 때문이에요. https://89douner.tistory.com/m/157
  5. 5. 아래 사진의 컴퓨터 같은경우는 전용메모리로 잡아둔 게 없다. 그렇다면 메인메모리의 일부를 공유하고 있을 때 확인 방법 은? "작업 관리자 -> GPU(내장그래픽) -> 성능 탭" 을 보시면 메인메모리의 절반인 2G를 공유메모리로 사용 https://89douner.tistory.com/m/157
  6. 6. 그런데 생각해 보면 딥러닝 모델이 보통 많은 용량을 차지하는데 이 모델을 학습시킬때 메인메모리에 올리고 내장그래픽이 사용한다고 하면 CPU가 과부하 걸리지 않을까요? 또한 내장그래픽카드의 연산능력 은 당연히 CPU크기가 커지지 않는한 비약적으로 좋아지진 않는다 . 차라리 외부에 장치를 두어서 그래픽 또는 병렬계산을 해주는 장치를 따로 두는게 좋지 않을까? 그 장치에는 더 큰 용량의 전용메모리 를 주면 CPU가 부담을 덜 수 있지 않을까? 위와같은 질문을 통해 오늘날 GPU라고 인식하고 있는 외장그래픽이 등장하게됩니다! https://89douner.tistory.com/m/157
  7. 7. 외장그래픽 앞선 질문들에 대한 해답으로 외장그래픽이라는 개념이 등장. 우리가 흔히 보는 GPU는 외장그래픽을 의미합니다. 외장그래픽이 하는일은 병렬계산과 같은 일을 CPU가 던져주면 해당 내용을 자신들의 전용메모리인 VRAM에 저장시킵니다. 그리고 GPU에서 VRAM에 접근해 작업을 처리하게 됩니다. 쉽게 말해 외장그래픽에서 CPU역할을 GPU가, RAM역할을 VRAM이 한다고 보시면 된다. https://89douner.tistory.com/m/157
  8. 8. 외장그래픽카드도 공유메모리를 이용할 수 있지만 전용메모리(Directed GPU memory usage)크기가 내장그래픽보다 큰 것 을 볼 수 있다 https://89douner.tistory.com/m/157
  9. 9. 외장그래픽에 자체메모리를 두는 또 다른 이유는 고속연산을 하기 위해서이다. 일반 메인메모리는 기본적으로 많은 양의 process를 올려서 CPU가 언제든지 접근할 수 있게 준비해주는게 필요하고, GPU는 특정 계산을 고속으로 처리해주어야 하기 때문에 메인메모리보다는 작지만 외장그래픽 내부에 자체 메모리를 두어 메모리 접근에 대한 물리적 거리를 단축시켜주게 됩니다. 이렇게 자체메모리를 두기 때문에 딥러닝 같은 모델을 GPU에 올려놓고 학습데이터들을 GPU에 batch size만큼 올려주게 됩니다. 그런데 GPU의 메모리가 적다면 무거운 딥러닝 모델을 올리지 못한다. 딥러닝 모델을 올린다고 하더라도 잔여 메모리양(= 기존 VRAM - 딥러닝 모델 용량)이 많지 않기 때문에 training dataset의 batch size를 크게 잡아서 학습을 진행시키면 "CUDA allocation error (GPU 메모리양이 부족하다는 뜻)" 메시지를 출력한다. (batch size가 딥러닝 일반화 성능에 크게 영향을 미친다는 논문도 발표된거 보면 GPU의 메모리가 얼마나 중요한지 알아야 한다?) https://89douner.tistory.com/m/157
  10. 10. 문제는 GPU와 CPU간의 병목현상 딥러닝을 위해서는 CPU보단 GPU가 더 중요한것 같은데, 그렇다면 아래와 같은 질문에 대해선 어떻게 생각하시나요? "Q.CPU는 저사양으로 사용해서 돈을 절약하고, GPU만 고사양으로 사서 컴퓨터를 맞추면 되나요?" 결론부터 말씀드리자면 "A.GPU 성능과 CPU의 성능차이가 많이 나면 서로간에 통신을 할때 병목현상이 생기기 때문에, 어느정도 서로 스펙을 맞춰줘야 한다" 그럼 이제부터 GPU와 CPU간의 병목현상이 왜 생기는지 알아보도록할게요! https://89douner.tistory.com/m/157
  11. 11. GPU와 CPU간 병목현상 아래 그림처럼 GPU가 일을 하기 위해서는 CPU로부터 작업을 할당받아야 한다. 외장그래픽(여기서부터는 GPU라고 할게요)에는 자신의 자체 메모리(ex:VRAM)이 있다. GPU또한 CPU와 비슷한 역할을 하기 때문에 어떤 작업을 하기 위해서는 메모리에 접근해야 한다. 그래서 CPU가 DMA를 통해 GPU가 작업할 일을 GPU의 메모리(VRAM; 아래그림에서는 Device memory)에 올려두게 된다. https://89douner.tistory.com/m/157
  12. 12. GPU가 느려지는 원인 1) 병목현상의 원인1 - CPU와 GPU간의 성능차이 2) 병목현상의 원인2 - PCI Bus (Peripheral Component Interconnect Bus) = PCIe(express), (feat.NVLink) 3) GPU 내부에서 발생하는 병목현상 https://89douner.tistory.com/m/157
  13. 13. 1) 병목현상의 원인1 - CPU와 GPU간의 성능차이 GPU는 CPU에게서 작업을 할당받는다? 만약 작업이 마무리되면 어떻게 될까? 물론 다시 CPU에게 자신의 작업이 완료됐다는 사실을 알리고 CPU는 이에 따른 작업을 수행하게 된다. https://89douner.tistory.com/m/157
  14. 14. 그런데 만약 CPU는 성능이 낮아 다른 업무들도 빠르게 처리하기 버거운데, 성능좋은 GPU는 자신의 작업을 빠르게 마무리하게 계속해서 CPU에게 주면 어떻게 될까? 결국 CPU는 할일이 쌓여만 가는데 우선순위 때문에 GPU관련된 task를 수행하지 못하고 있을 수 있다. 사람입장에서는 CPU가 GPU의 일을 빨리 처리해주지 못하다보니 "GPU의 성능이 좋지않군" 이렇게 판단하게되고 GPU는 굉장히 억울한 입장에 놓일 수 있다. 이렇게 CPU가 성능이 떨어져 GPU의 성능을 뒷받침 하지 못하는 경우를 CPU와 GPU간의 병목현상이라고 부른답니다. https://89douner.tistory.com/m/157
  15. 15. Bottleneck Calculator 굉장히 낮은 성능의 CPU와 높은 성능의 GPU를 컴퓨터에 세팅한다고 하면 얼마나 큰 병목(bottleneck)이 생길까? https://pc-builds.com/calculator/ https://89douner.tistory.com/m/157
  16. 16. 2) 병목현상의 원인2 - PCI Bus 앞에서 언급한 CPU와 GPU간의 병목현상의 또 다른 원인이 되는것이 PCI Bus이다.. PCI Bus는 RAM과 VARM 사이의 데이터 전송 통로이다. 기본적으로 PCIe bus의 성능이 좋지 않으면 VRAM에 전달해주는 데이터속도가 빠를 수 없다. https://89douner.tistory.com/m/157
  17. 17. 만약 Multi-GPU(ex; GPU1, GPU2)를 사용 할 경우 GPU1과 GPU2가 서로 통신하려면 어떻게 해야할까요? 그냥 서로 통신하면 될 것 같은데, PCIe로 구성된 구조에서는 GPU1에서 PCI bus를 거쳐 다시 GPU2로 전송 되게 됩니다. 이렇게 되면 GPU1, GPU2가 서로 직접적으로 통신하는것 보다 더 많은 시간이 소요될 수 있다 (PCIe를 한 번 거친다는건 물리적 거리가 멀어진다 는 뜻이다) https://89douner.tistory.com/m/157
  18. 18. 이러한 문제를 해결하기 위해 NVLink를 지원해주는 GPU가 등장 했다. NVLink는 쉽게 말해 GPU간의 통신을 빠르게 해주기 위해 GPU들을 연결해주는 장치 라고 생각하시면 된다. https://89douner.tistory.com/m/157
  19. 19. PCIe 3.0 레인의 전송속도는 8GT/s 인 반면에, NVLink는 20Gbit/s (PCIe 3.0 대비 2.5배) 전송속도를 자랑하며, GPU1&GPU2 인접한 GPU간의 전송은 40Gbit/s 라고 합니다 (GT/s = Gbit/s 라고 간주하셔도 됩니다) https://89douner.tistory.com/m/157
  20. 20. 3) GPU 내부에서 발생하는 병목현상 GPU는 VRAM으로부터 데이터를 받아 연산을 수행하게 된다. 많은 양의 데이터가 VRAM에서 GPU로 이동할때 시간이 걸린다? 만약 GPU 할당받은 작업을 굉장히 빨리 끝낸다면 어떻게 될까? VRAM에서 GPU로 데이터를 이동시키고 있는 도중에 GPU가 이미 작업을 끝낸다고 하면 GPU 입장에서는 "나 일다 끝났는데 왜 빨리 다음일을 안주는거야.. 이러면 내가 놀게되잖아.."라고 하소연하며 VRAM이 작업물을 빨리 넘겨주지 않는다고 생각할거에요. 이러한 문제를 해결하기 위해서는 VARM에서 GPU 넘기는 대역폭이 커야한다. 대역폭이 크면 데이터를 빠르게 전송할 수 있게 되고, GPU가 작업을 마무리함과 동시에 새로운 데이터를 줄 수 있게 된다. https://89douner.tistory.com/m/157
  21. 21. GPGPU CPU는 다양한 시스템 자원(ex; I/O device)를 제어해야 하고 복잡한 명령들을 처리해야 하기 때문에 연산을 위한 장치 이외에도 다른 구성요소들이 준재해요 하지만 GPU는 본래 그래픽처리를 위해 고안된 장치였기 때문에 단순한 연산들을 병렬로 고속처리가 가능하게 되었다. ( CPU처럼 제어기능이 필요없기 때문에 복잡한 구조를 버리고 연산(ALU)에 특화시킨 장치로 활용되기 시작하였다. 그렇기 때문에 GPU는 단독으로 시스템자원을 활용할 수 없어 CPU의 제어를 받아야 한다.) https://89douner.tistory.com/m/157
  22. 22. 예를들어, 다차원 행렬과 같이 병렬적으로 연산처리가 가능한 과학계산에서도 유용하게 쓰일 수 있다는 사실을 발견하게 되었다. 이렇게 단순히 그래픽처리만 하는 GPU와 달리 병렬로 연산기능까지 수행하게 되면서 GPU를 GPGPU(General Purpose GPU)라고 부르기 시작했답니다. “그래픽처리+과학연산" 개념을 묶어서 GPGPU라고 부르긴 하지만 다시 GPU라고 부르고 있어요. https://89douner.tistory.com/m/157
  23. 23. CUDA (Compute Unified Device Architecture) (GP)GPU의 등장으로 병렬계산을 뒷받침해줄 소프트웨어가 필요했다. 과거 GPU를 그래픽용도로만 사용했을때는 OpenCL, DirectX라는 병렬 소프트웨어가 있었는데 이를 구사하기 위해서는 독특한 언어(HLSL, GLSL 등)을 배워야했으며 그래픽스 목적으로 만들었기 때문에 공부할 부분이 많았다. (GP)GPU 개념이 등장하면서는 C/C++언어로 병렬계산에 필요한 기능들을 제공해주는 소프트웨어가 만들어졌다. 대표적인 소프트웨어가 NVIDIA의 CUDA이다. 그래서 딥러닝을 하시거나 머신러닝을 하게 되면 먼저 tensorflow, pytorch등의 프레임워크를 설치할 때 CUDA를 먼저 설치해야 한다. https://89douner.tistory.com/m/157
  24. 24. CUDA 동작 방식 1) 병렬처리할 데이터들을 main memory에서 GPU memory로 이동시킨다. 2) CPU는 GPU에게 GPU memory에 있는 데이터를 연산하라고 명령한다. 3) GPU는 CPU가 명령한 연산처리를 병렬로 수행한다. 4) GPU가 작업을 다 마치면 다시 GPU memory에 결과물을 저장하고, 다시 main memory로 해당 결과물을 업로드한다. 그리고 CPU가 main memory에 접근해 해당 결과물을 이용하여 작업을 마무리한다. https://89douner.tistory.com/m/157
  25. 25. CUDA는 기본적으로 CPU와 GPU코드를 조합해서 코딩합니다. CUDA는 NVCC(Nvidia CUDA Compiler)라는 NVIDIA독점 컴파일러를 통해 CPU에서 수행되는 코드(.c(C)/.Cpp(C++))와 GPU에서 수행되는 코드(.cu)가 분리되어 컴파일된다. 그리고 Linker에 의해 하나의 실행파일(binary file)이 되어 CPU에서는 Serial Code로, GPU에서는 Parallel code로 순차실행이 된다. (이런 과정 때문에 CPU,GPU간의 병목현상이 일어난다.) https://89douner.tistory.com/m/157
  26. 26. cuDNN 하드웨어 가속이란 컴퓨팅 일부 기능을 CPU에서 구동하는 소프트웨어 방식보다 더 빠르게 수행할 수 있는 하드웨어의 사용을 말한다. 예를 들면, GPU의 블리팅 가속 기능이 있다. 이는 컴퓨터의 일부 기능을 GPU에서 수행하는 형태이다. GPU가속장치는 그래픽 처리 장치, 부동 소수점 장치 등이 있고, 이들로 인해 빠른 연산을 가능하게 한다. (GP)GPU는 복잡한 연산을 하기 위한 방향으로 발전되고 있고, 그 대표적인 예가 딥러닝 연산이다. 그래서 나온 라이브러리가 cuDNN((NVIDIA) CUDA Deep Neural Network)이다. https://89douner.tistory.com/m/157
  27. 27. 엔비디아 A100 GPU 지원 Tensorflow-2.3.0 PyTorch-1.7 CUDA 11 https://hiwony.tistory.com/3
  28. 28. https://github.com/NVIDIA/nvidia-docker
  29. 29. https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/arch-overview.html

×