본문 바로가기
Working on

NVIDIA NVTAGS ( Topology-Aware GPU Selection ) 메뉴얼 읽기 - 1

by Warehaus 2021. 4. 21.

GTC 2021을 둘러보다가 추후 유용한 기술이 될 것으로 보여서 NVIDIA 문서를 읽으면서 정리해본다.

 

모든 내용의 출처는 developer.nvidia.com 이다.

 

 

NVTAGS

 

NVIDIA Topology-Aware GPU Selection (NVTAGS) is a toolset for high-performance computing (HPC) applications that enables faster solve times with high GPU communication-to-application run-time ratios. NVTAGS intelligently and automatically assigns GPUs to message passing interface (MPI) processes, thereby reducing overall GPU-to-GPU communication time.

 

NVTAGS 는 HPC 어플리케이션을 수행할 때 GPU 통신을 빠르게 수행하여 처리속도를 높여주는 기술이다. 지능적이고, 자동으로 MPI process에 GPU를 할당 해 주고, 이를 통해서GPU 간 통신속도를 줄여준다.


 사실 GPU관련한 업무를 직접적으로 하지는 않지만, 주변에서 Support를 한다거나, 필요한 기술들을 알아야 할 때가 있다.  아직까지는 경험하고 있는 대부분의 사용자는 GPU를 사용할 때 Card단위로 전용으로 사용한다( Processing mode를 EXCLUSIVE_PROCESS mode 로 설정 ). 사용자가 이렇게 쓰는 이유는.. 여러 이유가 있을 것으로 생각되는데, 가장 큰 이유는 여러개의 SW를 수행하며 메모리를 공유하는 환경을 만들었을때, 예상하지 못한 결과나 수행시간을 경험했기 때문이라고 생각한다.

 

하지만, 요새 Deeplearning framework에서 지원하는 기능이나 모델 학습의 성능향상 사례를 보았을 때, 다중 GPU를 사용하는 경우도 많이 늘어나고 있는게 보이는데, NVTAGS는 이런 환경에서의 Performance향상에 꽤나 유용하게 쓰일 것으로 보인다. 


Introduction

Message Passing Interface(MPI)를 사용하는 HPC applcation을 가속화 하는 GPU processing units 은 GPU 간 통신에 상당한 시간을 소비한다.

 

이러한 시간 소비는 사용자로 하여금 보유한 하드웨어 자원을 최대한으로 사용하지 못하게 방해하곤 한다.

 

GPU 간 통신을 효율적으로 수행하기 위해서, GPU를 MPI 프로세스에 할당하는 시점에 대한 결정을 필요로 하는데, GPU를 할당하는 것은 아래와 같은 인자에 영향을 받게 된다.

 

- System GPU topology

- Application GPU profiling

 

NVTAGS는 MPI 를 사용하는 HPC application 성능을 극대화 하기 위한 도구이며, 하드웨어의 CPU 와 NIC affinity setting을 효율적으로 수행하지 못하는 Application에 효과적일 수 있다.

 

 

NVTAGS 는 다음과 같은 프로세스들을 자동화 한다:

 

  • PMPI 기반 profiler를 이용하여 GPU 통신을 수집하는 Application
  • nvidia-smi 를 활용하여 GPU 통신 topology 수집
  • GPU 통신의 혼잡을 최소화 하여 수행하기 위한 최적의 방안을 탐색하는 기능. 이는 다중 GPU 시스템 상에서 수행하는 HPC 어플리케이션의 전체적인 GPU 간 통신시간을 줄여준다.
  • 프로세스가 CPU core/socket 과 인터페이스를 affinity에 맞게 사용하기 위해 CPU와 NIC의 affinity를 설정

NVTAGS가 효율적인 GPU 할당 방법을 찾고 적용하기 위해 따르는 두 단계의 과정이 있다.

 

  1. NVTAGS Tune

    이 단계에서 NVTAGS는 아래 동작을 수행한다 :

    1. Application의 GPU 간 통신을 어떻게 수행할 것인지를 분석하기 위한 Application과 System 정보를 수집한다.
    2. Target system상에서의 대상 Application에 더 알맞은 GPU 할당 방법을 찾고 추천하기 위해서 Profiling information을 반영한다.
    3. NVTAGS 캐시에 profiling과 mapping 결과를 저장한다.
    4. NVTAGS는 기본 캐시 directory path를 변경을 허용한다. ( 참고 : Changing the NVTAGS Cache Path )
  2. NVTAGS Run

    이 단계에서는, NVTAGS는 system affinity를 탐색하고, tuning 단계와 사용자 application 수행 명령에 권장되는 GPU 할당을 적용한다. Application에 GPU들이 어떻게 설정되느냐에 따라서 NVTAGS는 적절한 CPU와 NIC affinity를 할당한다.

  3. 참고사항: NVTAGS Tune과 Run 단계 모두 경량화 된 작업이며, 대부분의 MPI application에서 무시해도 될 정도의 작은 오버헤드를 지니고 있다.

 

 

NVTAGS가 효과적으로 적용되는 시스템

 

NVTAGS는 Application의 GPU 통신 패턴 과 시스템에서 수행되는 Application의 효과적인 GPU 할당을 위한 시스템의 GPU topology에 영향을 미친다.

 

비대칭적인 시스템 Topology를 가진 시스템의 경우,  NVTAGS를 사용하는 것이 상당히 효과적일 것이다.

 

이러한 시스템은 대부분의 DGX-1과 서로다른 GPU 통신 채널을 사용하는 PCIe server들과 같은 GPU cluster 에 해당한다.

 

모든 GPU 짝이 동일한 communication link를 가진 대칭 시스템 topology를 가진 시스템의 경우, 별도로 조작 된 GPU 할당이 그닥 효과적이지 않을 것이다. 그 이유는, GPU를 바꿔가는 것들이 프로세스에게 GPU 짝을 더 강한 Communication link로 연결짓지 못하기 때문이다. 

 

이러한 시스템 사례들로는 NVIDIA DGX-2 그리고 DGX A100 같은 시스템일 것이다. 

 

대칭적인 Topology를 가진 시스템들은 NVTAGS에서 제공하는 custom GPU 할당이 주는 이득이 많지 않은데 그 이유는 이러한 시스템에서의 모든 GPU 할당은 거의 똑같이 최적의 상황이기 때문이다.

 

이렇게 최적화 된 시스템일지라도, NVTAGS는 NIC나 GPU affinity 설정을 효율화 하는데 여전히 효과가 있을 것이라 사려된다.


장비가 있으면 한번 써보고 싶긴한데 Getting Start 부분을 하자니 실습을 할 수가 없다.. 게다가 A100의 경우 딱히 효과도 없다니.. 앞으로 어찌될 지 모르겠다. A100같은 제품이 나오는 상황에서 향후 P100이나 V100같은 GPU를 섞어서 GPU communication을 논하는 날이 올지..

 

보통 Datacenter에서는 GPU를 섞어서 사용하지는 않는다. 문제도 많고.. 사실 그렇게 투자를 하지도 않는 것 같다.

 

소규모로 GPU를 사용하는 환경이라고 하면 NVTAGS가 효과적일까?

 

이런 기술들을 사용하는 시간과 노력도 사실은 비용일텐데, communication 개선 효과가 극적이지 않는이상 실적용이 조금은 꺼려지는게 사실이다.

 

사실 NVTAGS의 적용장비도 아직 파악이 안되어 있다. 확인되는대로 업데이트 해 봐야겠다.


Reference : developer.nvidia.com/nvidia-nvtags