728x90
반응형

 

배경

     슈퍼컴, HPC나 워크스테이션을 사용해서 대규모 시뮬레이션을 수행 할 때에는 보통 클러스터의 여러 노드를 잡고 해석을 수행합니다. 이때 노드-노드 간 통신이 필요하게 되는데, 주로 mpi나 openmp 와 같은 병렬 통신 라이브러리를 사용합니다

     이에 관련된 핵심 개념을 러프하게 정리했습니다. 여러 장비나 컴퓨터에서 병렬 컴퓨팅 프로그램/코드를 사용할 때 자주나오는 개념들과, MPI를 좀 더 잘 활용하기 위해서 필요한 개념들을 정리했습니다. 단, 개인 차원에서 필요한 수준까지만 습득하고 이해한 것을 적당히 정리한 것이므로 오류가 있을 수 있음을 주의해 주세요.

 

 

예를 들면...

  • 어떤 계산 코드를 컴파일하고 멀티 노드 계산을 수행할 때, 발생할 수 있는 문제가 존재하는데...
  • 돌고 돌아 mpirun 명령어에 --mca btl_tcp_if_exclude virbro, lo 와 같은 옵션을 추가하면 해결할 수 있다는 것을 알았다.
  • 물론 해결이 되었으니 오케이라고 넘어갈 수 있겠지만...
  • 명령어에 나오는 btl도 모르겠고 tcp도 모르겠고 해서 최소한 계산장비 활용에 필요한 정도의 개념은 알고 있자 한 것

 

 

이더넷(Ethernet) 이란 무엇일까?

  • 컴퓨터들 간의 근거리 통신망을 구성하기 위한 단말과 네트워크 장치의 프로토콜 (약속, 규칙)
  • 내 MAC address와 통신하고자 하는 상태의 MAC address를 지정하여 통신
  • 예를 들어, 여러 노드들로 구성된 서브넷(Subnet)에서 복잡한 통신을 할 때에, 동시에 신호를 받게되면 혼선이 발생할 수가 있음
  • 이런 혼선을 막기위해 이더넷에서는 CSMA/CD가 스케줄러 역할을 해서, 혼선을 막고 여러 노드들이 차례로 통신을 수행하게 함
  • 하지만, 이 과정에서 (스위치 허브에서) 레이턴시(지연)가 발생

 

 

여기서 인피니밴드가 등장하는데...

  • 이더넷과 동일한 역할을 하는, 동충 케이블로 구성된 고속 IO 인커넥터
  • 특징은, 이더넷 대비
    • 높은 처리량
    • 짧은 레이턴시 (바로 위에서 이더넷은 스위칭 과정에서 레이턴시가 크다고 했었죠.)
    • 흐름제어 (이더넷에서 존재하는 스케줄링, 통신선의 빈 공간을 효율적으로 배분하는 효율 극대화)
    • 원격 메모리 접근

 

 

이더넷도 알겠고, 인피니밴드도 좋은거 알겟는데...
여기저기서 보이는 TCP/IP는 무엇일까??

  • TCP는 Transmission Control Protocol의 약어
  • TCP는 IP를 베이스로 해서 위에서 설명했던 흐름제어를 해주는 프로토콜이라고 생각하자.
  • 아래 그림에서, 만일 IP만 있다면 정보를 보낸 순서는 정보를 받을 때 그 순서가 틀어질 수 있다. 즉 IP는 순서 상관없이 보내기만 하는 역할
  • TCP는 흐름제어를 통해 전달이 잘 되었는지 확인하고, 보냈던 순서대로 받게 해주는 역할
  • 따라서, TCP/IP는 IP와 TCP를 합쳐 부르는 것
  • 한마디로, TCP/IP 송신자가 수신자에게 IP 주소를 사용하여 데이터를 전달하고, 이게 제대로 갔는지, 순서대로 갔는지, 제대로 받았다고 확인이 되는지에 관한 것​

 

컴퓨터 통신 구조 (이더넷, 아이피, TCP, 인터넷)

 

 

브로드캐스트 (broadcast)는 무엇일까?

  • 브로드캐스트는 특정 호스트로 정보를 전송하는 것이 아니라, 네트워크 전체에 정보를 전송할 때 사용하는 IP 어드레스
  • 아래 두 장비를 예로 들어보면, $ifconfig 명령어를 통해 계산 장비에 셋업된 아이피를 확인해 보자.
  • 아래 그림과 같이, enp-s31f6 아이피는 이더넷으로 통신을 하는 걸 확인할 수 있다.
    (lo는 루프백 아이피, virbr0는 가상 이더넷 아이피, 즉 이 아이피는 노드 간 통신을 위한 아이피가 아니다.)

 

멀티 노드 계산장비 구성 예시 1 (일반 이더넷 사용)

 

 

반면, 계산장비 예시 2의 상태를 확인해보면, ib0에 인피니밴드로 셋업되있는걸 확인할 수 있다.

 

멀티 노드 계산장비 구성 예시 2 (인피니밴드 셋업)

​​

 

주의사항: MPI 라이브러리가 여러 아이피 중 적절하지 못한 아이피를 사용할 따가 존재

  • 통신 관련 기본 개념을 잡은 동기이기도 한데, MPI 라이브러리들이 (e.g. mpi, openmp) 좀 알아서 인피니밴드 아이피를 사용해서 통신을 해주면 좋을텐데...
  • 적절하지 못한 아이피 (lo 아이피나 virbr0 아이피)로 통신을 시도하는 경우가 있음
  • 당연히, lo나 virbr0는 노드간 통신을 위해 셋업된 아이피들이 아니니 통신에 문제가 발생함
  • 이런 경우에는 mpi 도구 세팅이나, 해석 솔버나, 환경 설정 모두 아무런 문제가 없음에도 멀티 노드 계산이 안되고 정지된 상태처럼 보임
  • 확인해보면 노드간 통신이 안 되었기 때문 (분명 한 노드에서는 발신을 했는데 다른 한 쪽은 받지 못한 상태가 계속되다보니, 노드들이 서로 정보를 기다리고 있는 상태)
  • 해결 방안은 적절한 아이피를 지정해주거나, 불필요한 아이피를 제외시켜 주는 것
  • 해결에 관한 세부사항은 아래 글을 참고
2023.10.22 - [Linux] - [ Linux - MPI ] MPI 병렬 계산 멈춤 문제 해결하기 (feat. 아무런 에러 메시지 없이 진행이 안될 때)

 

 

아이피를 지정하는 명령어에 btl 이라는게 나오던데... 잠깐 살펴보면,

  • Open MPI 매뉴얼에서 말하는 바에 따르면 다음과 같다.
  • btl (아마도 Byte Transfer Layer): MPI point-to-point Byte Transfer Layer, used for MPI point-to-point messages on some types of networks
  • 간단히 말하면 결국 btl은 MPI 통신을 위한 레이어

 

 

그럼 레이어(Layer)는 무엇일까?

  • 앞서 설명한 TCP/IP도 마찬가지지만, 통신 프로토콜은 효율적으로 흐름제어를 하기위해서...
  • 프로토콜 내 수행하는 역할에 따라 계층을 구분해 놓은 것 같다.
  • 이렇게 구분된 레이어를 통해서 효율적으로 MPI 통신을 할 수 있었던 것

 

통신 프로토콜의 레이어 구성

 

 

개인적으로 이 정도 정리해 놓으니 대규모 컴퓨팅 클러스터에서 병렬 프로그램/코드를 사용할 때에 수월함을 느꼈었습니다. 다른 분들에게도 도움이 되길 바랍니다.

 

 

참고자료

728x90
반응형

+ Recent posts