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 주소를 사용하여 데이터를 전달하고, 이게 제대로 갔는지, 순서대로 갔는지, 제대로 받았다고 확인이 되는지에 관한 것
브로드캐스트 (broadcast)는 무엇일까?
- 브로드캐스트는 특정 호스트로 정보를 전송하는 것이 아니라, 네트워크 전체에 정보를 전송할 때 사용하는 IP 어드레스
- 아래 두 장비를 예로 들어보면, $ifconfig 명령어를 통해 계산 장비에 셋업된 아이피를 확인해 보자.
- 아래 그림과 같이, enp-s31f6 아이피는 이더넷으로 통신을 하는 걸 확인할 수 있다.
(lo는 루프백 아이피, virbr0는 가상 이더넷 아이피, 즉 이 아이피는 노드 간 통신을 위한 아이피가 아니다.)
반면, 계산장비 예시 2의 상태를 확인해보면, ib0에 인피니밴드로 셋업되있는걸 확인할 수 있다.
주의사항: 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 통신을 할 수 있었던 것
개인적으로 이 정도 정리해 놓으니 대규모 컴퓨팅 클러스터에서 병렬 프로그램/코드를 사용할 때에 수월함을 느꼈었습니다. 다른 분들에게도 도움이 되길 바랍니다.
참고자료
-
[2017] 조혜영 - 고성능 컴퓨팅을 위한 인터커넥션 네트워크 기술 동향
728x90
반응형
'Linux' 카테고리의 다른 글
[ Linux - MPI ] MPI 병렬 계산 멈춤 문제 해결하기 (feat. 아무런 에러 메시지 없이 진행이 안될 때) (2) | 2023.10.22 |
---|---|
[Linux - Error] ssh exchange identification: read: Connection reset by peer - SSH 접속이 안될 때 (0) | 2022.03.15 |
[Linux - How to] 리눅스 커맨드 명령어, 프로그램의 디폴트 버전 (기본 경로)를 변경하고 싶을 때 (0) | 2022.03.14 |
[Linux - How to] 리눅스 시스템 종료 / 재부팅 명령어 (0) | 2022.03.13 |
[Linux - Tip] 리눅스 압축 명령어 tar 속도 향상 (0) | 2022.03.01 |