2024년 6월 22일 토요일

GPU 거지 딥러닝 서버 만들기

이 글은 GPU 거지?를 위한 딥러닝 서버 구축 방법을 간략히 알아본다. 
많은 정부 과제, 용역, LLM 열풍 등으로 인해 NVIDIA GPU 서버 수요가 폭증하고 있다. 이에 덩달아, GPU 인플레이션이 심한데, 업체에서 구매하면 A100 x 4 way server 가격만 약 1억이다. 이를 개별 부품을 사서 조립하면, 6~7천만원 수준에서 GPU 서버를 얻을 수 있다. 물론, 업체에서 서비스로 설치해주는 리눅스 OS, NVIDIA 드라이버 등 소프트웨어는 본인이 모두 해결해야 단점은 있다. 

필요성
본인이 취미?로 CNN계열 YOLO 모델을 학습, 개발할 때는 그 당시로는 대용량 8GB GPU를 사용하면 나름 빵빵한 스펙이었다. 

그러나, LLM 기술이 릴리즈되면서, 모든 것이 달라졌다. 예를 들어, 70B 파라메터를 가진 LLM 모델을 학습하거나 튜닝하기 위해서는 700GB 이상의 GPU 메모리가 필요하며, 80GB 용량을 가진 NVIDIA A100이 1,300 ~ 1,500만원이니, 대략 2억 가까이되는 리소스가 필요한 상황이 되어버렸다. 
LLM 모델 튜닝, 학습에서 빈번한 Out of Memory 에러

실제로, 배치 데이터를 GPU에 올리고 학습하기 위해서는 이 용량의 몇 배가 필요할 수 있어, 금액은 더 올라가게 되어 있다(국내에서도 이 정도 인프라를 갖춘 IT업체가 많지 않다. 대부분 Lora와 같은 작은 메모리를 이용한 파인튜닝 정도이거나, 해외 빅테크 업체가 개발된 LLM의 사전 학습된 모델을 사용해 튜닝하는 수준이다).

이런 이유로, 본인이 LLM모델을 직접 개발하고 싶다면, 가성비있게 다중 GPU지원하는 서버를 개발할 필요가 생긴다. 

다중 GPU 서버 구축하기
다중 GPU 구축할 때 주요 고려 사항은 다음과 같다.
  • 메모리(VRAM)
  • 성능(Tensor 코어, 클럭 속도)
  • 슬롯 너비
  • 사용 전력
  • 다중 GPU 지원 마더보드
  • 냉각 처리
  • 넉넉한 케이스 크기
딥러닝 작업을 위해서는 많은 메모리가 필요하다. LLM은 미세 조정하기에도 방대하며, 컴퓨터 비전 작업은 특히 3D 네트워크에서 메모리 집약적일 수 있다. 당연히 찾아야 할 가장 중요한 측면은 GPU VRAM이다. LLM의 경우 최소 24GB 메모리를 권장하고 컴퓨터 비전 작업의 경우 12GB 이하로 내려가지 않는다.

두 번째 기준은 FLOPS(초당 부동 소수점 연산)로 추정할 수 있는 성능이다.
과거의 중요한 숫자는 회로의 CUDA 코어 수였다. 그러나 딥 러닝의 등장으로 NVIDIA는 클럭당 더 많은 FMA(Fused Multiply-Add) 연산을 수행할 수 있는 특수 텐서 코어를 도입했다. 

다른 GPU의 성능을 비교할 때는 각별히 주의해야 하다. 다른 세대/아키텍처의 Tensor 코어는 비교할 수 없다. 예를 들어, A100은 256개의 FP16 FMA 작동/클럭을 수행하는 반면 V100은 64개의 "유일한" 작업을 수행한다. 또한 이전 아키텍처(Turing, Volta)는 32비트 텐서 연산을 지원하지 않는다. 비교를 더 어렵게 만드는 것은 NVIDIA가 백서에서도 항상 FMA를 보고하는 것은 아니며 동일한 아키텍처의 GPU가 다른 FMA를 가질 수 있다는 것이다. 참고로, GPT는 수많은 A100을 사용해 학습되었다.
NVIDIA A100 (80GB. 가격은 12,000 ~ 15,000만원 사이)

멀티 GPU 시스템을 구축할 때는 GPU를 PC 케이스에 물리적으로 맞추는 방법을 계획해야 하다. GPU가 점점 더 커지고 있기 때문에, 특히 게임 시리즈에서는 이것이 더 큰 문제가 되고 있다. 소비자용 마더보드에는 최대 7개의 PCIe 슬롯이 있으며 PC 케이스는 이 설정을 기반으로 제작됩니다. 4090은 제조업체에 따라 4개의 슬롯을 쉽게 차지할 수 있으므로 이것이 문제가 되는 이유를 알 수 있다. 또한 과열을 방지하기 위해 송풍기 스타일이 아니거나 수냉식이 아닌 GPU 사이에 최소 1개의 슬롯을 남겨 두어야 하다. 다음과 같은 옵션이 있다.

수냉식은 최대 2개의 슬롯을 차지하고 비싸다. AIO(All-in-One) 솔루션을 얻지 못하면 맞춤형 수냉식 루프를 구축해야 하다. AIO 라디에이터가 케이스에 맞지 않을 수 있으므로 여러 개의 수냉식 GPU를 장착하려는 경우에도 마찬가지이다. 

최신 GPU는 점점 더 많은 전력을 소비하다. 예를 들어, 4090은 450W가 필요하고 H100은 최대 700W를 얻을 수 있다. GPU가 끌어올 수 있는 최대 전력을 줄이는 데 필요한 것은 다음과 같다.

sudo nvidia-smi -i <GPU_index> -pl <power_limit>

다음 단계는 여러 GPU를 허용하는 마더보드를 선택하는 것이다. 여기서 주요 고려 사항은 PCIe 레인이다. 각 카드에 대해 각각 x8 레인이 있는 최소 PCIe 3.0 슬롯이 필요하다. PCIe 4.0 또는 5.0은 더 드물며 대부분의 딥 러닝 사용 사례에 필요하지 않는다. 간격을 확인하고 GPU가 실제로 원하는 곳으로 이동할 수 있는지 확인하라. 

마더보드는 여러 GPU를 연동하기 위한 Multiple GPU와, SLI 혹은 NVLink 규약을 지원해야 한다. 이 규약은 다중 GPU 간 메모리를 합치고, 공유하며, 이들간 데이터 전송 속도를 최적화한다. 다음은 그 리스트를 보여준다. 

마무리
일반적으로 판매용 GPU서버, 서버랙 순서로 가격이 비싸다. 앞의 고려사항이 복잡하다면, GPU 서버 랙 구입을 감안할 수 있다. 좀 더 비싸지만, 안정적이다. 다음은 이런 부분이 고려된 GPU 서버를 보여준다.

레퍼런스

댓글 없음:

댓글 쓰기