주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마칠 때는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Roving Edge Infrastructure에서 Open MPI 사용
소개
Oracle Roving Edge Infrastructure는 네트워크 에지 또는 외부 연결이 제한적이거나 없는 위치에 배포하기에 적합한 견고한 클라우드 컴퓨팅 및 스토리지 플랫폼입니다. 규모가 크고 복잡하고 까다로운 워크로드가 네트워크 에지로 이동함에 따라 에지 인프라에 문제가 발생할 수 있습니다.
Open MPI는 HPC(고성능 컴퓨팅)에서 병렬 응용 프로그램을 개발하는 데 사용되는 MPI(메시지 전달 인터페이스) 표준의 구현입니다. 개방형 MPI를 사용하면 비교적 작은 인프라에 고성능 컴퓨팅 및 고도의 병렬 워크로드를 배포한 다음 더 큰 집계 리소스 세트로 작동할 수 있습니다. 이 접근 방식은 CPU 및 GPU와 같은 기타 컴퓨트 리소스에 워크로드를 배포하는 데 사용할 수 있습니다. 이를 통해 예측 모델링 또는 기타 AI/ML(인공 지능/머신 러닝) 작업과 같은 네트워크 에지에서 더 크고 계산 집약적인 작업을 배포할 수 있습니다.
Open MPI를 사용하면 Oracle Roving Edge Infrastructure 노드 전반에 리소스를 활용하여 병렬 워크로드를 배포할 수 있습니다. Netfilter는 Oracle Roving Edge Infrastructure 노드에서 호스팅되는 클러스터링 소프트웨어를 사용하여 VM 인스턴스에 필요한 DNAT(대상 네트워크 주소 변환) 및 SNAT(소스 네트워크 주소 변환)를 제공합니다. 이 자습서에서는 주요 숫자 계산기를 실행하는 Oracle Roving Edge Infrastructure에서 Netfilter를 사용하여 Open MPI를 구현하여 병렬 리소스를 사용할 때 향상된 성능을 보여줍니다.
배경 정보
Open MPI는 단일 Oracle Roving Edge Infrastructure 노드 내 또는 여러 Oracle Roving Edge Infrastructure 노드 간에 여러 VM(가상 머신) 인스턴스에서 실행할 수 있습니다. 단일 Oracle Roving Edge Infrastructure 노드에서 실행되는 것은 원활하며 어떠한 문제도 발생하지 않습니다. 여러 Oracle Roving Edge Infrastructure 노드에서 실행할 때는 Oracle Roving Edge Infrastructure VM 인스턴스의 네트워킹과 Open MPI가 가능한 문제를 방지하기 위해 트래픽의 경로를 지정하는 방법을 이해하는 것이 중요합니다.
Oracle Roving Edge Infrastructure 가상 머신 인스턴스의 네트워킹
Oracle Roving Edge Infrastructure에서 실행되는 가상 머신 인스턴스는 전용 IP 주소를 사용하여 동일한 노드에 호스트된 동일한 서브넷에 있는 다른 VM 인스턴스와 통신합니다. Oracle Roving Edge Infrastructure에 호스트된 VM 인스턴스에 공용 IP 주소를 지정하면 인스턴스가 호스트된 Oracle Roving Edge Infrastructure 노드 외부에서 실행되는 다른 서브넷 및 리소스와 통신할 수 있습니다.
주: 공용 IP 주소는 공용 IP 주소 풀에서 VM 인스턴스 VNIC에 지정됩니다. 주소는 공용 IP라고 하지만 실제로는 Oracle Roving Edge Infrastructure 노드가 RJ-45 포트를 통해 연결된 동일한 로컬 네트워크의 IP 주소입니다. 이러한 주소는 인터넷에서 연결할 수 있는 IPv4 주소일 수도 있고, 로컬 네트워크의 개인 서브넷에 있는 주소일 수도 있습니다. 이러한 주소는 VM 인스턴스가 호스트되는 노드 외부의 리소스에 연결할 수 있으므로 외부 IP 주소라고도 합니다.
Oracle Roving Edge Infrastructure 노드 내에서 실행되는 VM 인스턴스가 노드 외부의 리소스에 액세스하려고 시도할 때 트래픽이 노드 내에서 라우팅되는 외부 IP 주소를 통과하여 외부 네트워크 연결로 이동하는 경우를 이해하는 것이 중요합니다.
-
VM이 사용 중인 전용 IP 주소는 호스팅 Oracle Roving Edge Infrastructure 노드에서 공용 IP 주소 풀에서 지정된 공용(외부) IP 주소로 변환됩니다.
-
네트워크 트래픽은 호스팅 Oracle Roving Edge Infrastructure 노드의 VM 인스턴스에서 외부 네트워크로 전송되는데, 이는 사실상 NAT(Network Address Translation) 1:1입니다.
-
VM 인스턴스에 공용(외부) IP 주소가 있지만 VM 인스턴스 자체에는 해당 IP 주소가 표시되지 않습니다.
-
반면, 지정된 공용(외부) IP 주소를 사용하는 VM 인스턴스에 대한 외부 트래픽은 공용(외부) IP 주소를 대상 VM 인스턴스의 연관된 전용 IP 주소로 변환하는 호스팅 Oracle Roving Edge Infrastructure 노드로 이동합니다.
Oracle Roving Edge Infrastructure 노드의 예제 VM 인스턴스가 다음 이미지에 표시됩니다. 지정된 공용 및 전용 IP 주소를 확인하십시오.
여러 Oracle Roving Edge Infrastructure 노드에서 개방형 MPI 실행에 대한 당면 과제
VM 인스턴스 전용 IP 주소를 사용하면 여러 Oracle Roving Edge Infrastructure 노드에 구현될 때 Open MPI와 같은 클러스터링 소프트웨어에 문제가 있습니다. 각 노드는 개인-공용 IP 주소 매핑 및 다른 노드에서 호스트된 VM 인스턴스에 대한 매핑 변환을 인식하지 못합니다. 매핑은 공유되지 않으므로 개인 IP 주소를 사용하는 패킷의 경로가 잘못 지정되거나 손실됩니다.
-
클러스터링 소프트웨어는 대개 VM 인스턴스 인터페이스 및 IP 주소를 검사하고 소프트웨어 클러스터의 다른 노드에 정보를 등록합니다.
-
VM 인스턴스는 전용 IP 주소만 인식하며 지정된 공용 IP 주소를 공유할 수 있는 방법이 없습니다.
-
다른 클러스터 멤버를 호스팅하는 원격 Oracle Roving Edge Infrastructure 노드에도 호스트되지 않은 VM 인스턴스 전용 IP 주소를 해당 공용 IP 주소로 변환할 수 있는 방법이 없습니다.
-
서로 다른 Oracle Roving Edge Infrastructure 노드에 호스트된 VM 인스턴스를 해당 공용 IP 주소를 통해 핸드셰이크하는 경우 해당 구성 교환에는 전용 IP 주소만 포함될 수 있습니다.
- 이러한 VM 인스턴스가 Oracle Roving Edge Infrastructure 노드에서 전용 IP 주소를 통해 통신하려고 하면 트래픽이 외부 네트워크로 푸시되며 외부 네트워크에서 트래픽이 잘못 삭제되거나 경로 지정될 수 있습니다.
Open MPI를 사용하여 이 문제가 어떻게 나타날 수 있는지에 대한 예:
VM 인스턴스에서 실행 중인 열린 MPI는 다른 VM 인스턴스 멤버에 연결하는 데 사용할 최상의 네트워크 경로를 결정하려고 시도합니다. 소프트웨어는 로컬 인터페이스 및 IP 주소를 검사하여 클러스터의 다른 노드에 등록할 수 있습니다.
-
죄송합니다. 연결에 필요한 네트워크 주소 변환이 소스 노드나 대상 노드에 인식되지 않습니다.
-
vm-node-1
의 전용 IP가10.0.100.2
(공용 IP가10.123.123.9
임)이고vm-node-2
의 전용 IP가10.0.200.12
(공용 IP가10.123.123.99
임)인 경우 처음에는 공용 IP(10.123.123.x
)를 통해 핸드셰이크할vm-node-1
및vm-node-2
를 가져올 수 있습니다.-
검색 및 교환하는 구성에는
10.0.x.x
IP(전용 IP 주소)가 포함됩니다. -
따라서
vm-node-1
가 로컬이 아닌 대상인 통신에vm-node-2
의 개인 IP(10.0.200.12
)를 사용하려고 시도하면 트래픽이 외부 네트워크로 푸시됩니다. -
외부 네트워크는
10.0.200.12
로 수행할 작업을 알 수 없거나 다른 Oracle Roving Edge Infrastructure 노드에서 호스트되는 의도된 대상 VM 인스턴스가 아닌 다른 곳으로 경로 지정될 수 있습니다. 이렇게 Open MPI 통신 패킷이 손실됩니다. -
10.0.200.12
는 Oracle Roving Edge Infrastructure 노드에 호스트된 가상 인스턴스 IP에서 전용이며, 외부 네트워크는 전용 IP 주소를 VM 인스턴스에 다시 매핑하는 방법을 알지 못합니다. -
외부 네트워크는 대상 Oracle Roving Edge Infrastructure 노드로 전송되는
10.123.123.99
(vm-node-2
의 공용 IP)에 대해서만 인식합니다. 그러면 주소가 변환되고 트래픽이 올바른 VM 인스턴스로 전송됩니다.
-
Oracle Roving Edge Infrastructure 전반에서 개방형 MPI 구현
Oracle Roving Edge Infrastructure 내부 네트워크의 공유되지 않는 특성을 해결하기 위해 Linux VM 인스턴스의 Netfilter 소프트웨어는 다른 Oracle Roving Edge Infrastructure 노드에서 호스팅되는 VM의 소스 및 대상 네트워크 패킷을 재작성하는 데 사용됩니다.
디자인 고려사항
이 자습서에서는 세 개의 Oracle Roving Edge Infrastructure Roving Edge Devices(RED) 노드가 Open MPI 클러스터를 만드는 데 사용됩니다. 모든 RED는 공유 외부 네트워크에 연결됩니다. 각 노드는 VM 인스턴스에 할당하기 위해 고유의 외부 IP 풀로 구성되었습니다.
-
RED의 외부 네트워크는 여전히 RFC1918의 개인 네트워크입니다.
-
각 RED는 VCN으로 구성됩니다. 이 사용 사례에서 VCN은
10.0.0.0/16
의 CIDR을 사용하고 있습니다. -
각 RED는 사용할 서브넷에 대해 다른 CIDR을 사용합니다. 다른 서브넷 CIDR을 사용하면 설정이 간소화되고 서로 다른 RED의 VM 간에 IP 충돌이 발생하지 않습니다.
VCN 및 서브넷 CIDR 테이블
RED 이름 | VCN CIDR | 서브넷 CIDR |
---|---|---|
RED1 | 10.0.0.0/16 | 10.0.1.0/24 |
RED2 | 10.0.0.0/16 | 10.0.2.0/24 |
RED3 | 10.0.0.0/16 | 10.0.3.0/24 |
이 예는 다음 이미지, 서로 다른 두 RED의 두 네트워킹 구성에 나와 있습니다.
대상
Oracle Roving Edge Infrastructure 관리자, 개발자 및 사용자.
목표
-
Oracle Roving Edge Infrastructure에서 Open MPI를 구현합니다.
-
여러 Oracle Roving Edge Infrastructure 노드에 Open MPI를 사용할 때 주의 사항을 이해합니다.
-
Open MPI를 사용하여 여러 Oracle Roving Edge Infrastructure 노드에 걸쳐 병렬 처리를 시연합니다.
필요 조건
-
하나 이상의 Oracle Roving Edge Infrastructure 노드 webUI에 대한 액세스입니다. 이 자습서의 예에서는 세 개의 Oracle Roving Edge Infrastructure 장치(RED)를 사용합니다.
-
Oracle Roving Edge Infrastructure에서 인스턴스를 생성하고 실행할 수 있는 사용자 권한입니다. 자세한 내용은 Roving Edge Infrastructure용 컴퓨트 권한을 참조하십시오.
-
각 Oracle Roving Edge Infrastructure 노드에 VCN(가상 클라우드 네트워크)을 설정합니다. 자세한 내용은 Roving Edge Infrastructure 기기에 대한 VCN 생성을 참조하십시오.
-
공용 IP 주소를 사용하여 각 Oracle Roving Edge Infrastructure 노드에서 서브넷을 설정합니다. 자세한 내용은 Roving Edge Infrastructure Device에 대한 서브넷 생성을 참조하십시오.
-
커스터마이징 컴퓨트 이미지를 Oracle Roving Edge Infrastructure로 가져오는 방법을 알아봅니다. 자세한 내용은 OCI 컴퓨팅에서 커스터마이징 이미지 관리 및 버킷에서 Roving Edge Infrastructure 장치로 커스터마이징 이미지 임포트를 참조하십시오.
-
Oracle Roving Edge Infrastructure 노드에서 실행 중인 인스턴스를 설정하고 SSH를 통해 해당 노드에 액세스합니다. Creating an Instance for a Roving Edge Infrastructure Device를 참조하십시오.
-
SSH를 통한 인스턴스 연결, IP 테이블, 서비스, 파일 편집, 셸 스크립트 실행, 디렉토리 변경, 소프트웨어 설치, 패키지 저장소 작업 및 프록시 서버 사용에 대한 Oracle Linux의 기본적인 이해
작업 1: 가상 머신 인스턴스 만들기
각 RED의 각 서브넷에 VM 인스턴스를 생성합니다.
IP 주소 지정 예:
RED 이름 | VM 이름 | 가상 머신 O/S | VM 전용 IP | VM 공용 IP |
---|---|---|---|---|
RED1 | redvm1 | Ubuntu 22.04 | 10.0.1.2/24 | 10.123.123.32 |
RED2 | redvm2 | Ubuntu 22.04 | 10.0.2.2/24 | 10.123.123.67 |
RED3 | redvm3 | Ubuntu 22.04 | 10.0.3.2/24 | 10.123.123.101 |
주: 이 작업의 VM 인스턴스는 OCI Ubuntu
22.04
LTS를 사용하여 OCI(Oracle Cloud Infrastructure)에서 익스포트된 이미지를 사용하여 생성됩니다. 적합한 Open MPI 패키지가 포함된 모든 Linux 배포판(예: Oracle Linux 8 또는 9, Fedora 등)을 사용할 수 있습니다.
-
각 RED에서 컴퓨트, 인스턴스로 이동하고 인스턴스 생성을 누릅니다.
-
컴퓨트 인스턴스 생성에서 이름을 입력하고 임포트된 사용자정의 이미지, 구성, 네트워킹 구성, SSH 키를 선택한 다음 생성을 누릅니다.
작업 2: 각 VM 인스턴스에 열린 MPI 패키지 설치
모든 VM 인스턴스가 생성되면 프로비전 중 제공된 키를 사용하여 SSH를 통해 각 VM 인스턴스에 로그인합니다. 다음 명령은 Ubuntu 22.04
에 적합합니다. 다른 Linux 배포판을 사용하는 경우 이러한 지침을 적용하거나 추가 패키지 저장소를 포함해야 할 수 있습니다.
-
다음 명령을 실행하여 시스템을 업데이트하고 재부트합니다.
sudo apt update && sudo apt upgrade -y
완료하는 데 약간의 시간이 걸릴 수 있습니다. 완료되면 인스턴스를 재부팅합니다.
sudo shutdown -r now
-
인스턴스에 로그인하여 Open MPI 패키지를 설치합니다.
참고:
-
이것은 꽤 많은 의존성을 극복 할 것입니다.
-
libopenmpi-dev
패키지는 나중에 테스트할 샘플 프로그램을 컴파일하는 경우에만 필요합니다. Open MPI 기능을 프로그램으로 컴파일하지 않으려는 경우 이 패키지가 필요하지 않습니다.
sudo apt install openmpi-bin libopenmpi-dev -y
-
작업 3: DNAT(대상 네트워크 주소 변환) 및 SNAT(소스 네트워크 주소 변환) 설정
-
실행된 각 VM 인스턴스의 세부정보를 보고 무작위로 지정된 전용 공용 IP 주소를 기록해 둡니다. 컴퓨트, 인스턴스로 이동하고 인스턴스 이름을 눌러 세부정보를 봅니다.
-
SNAT를 만듭니다.
-
테이블의 각 VM에 대한 SNAT 규칙을 매핑하는 경우 다음과 같이 표시되어야 합니다.
SNAT RED1에서 제공 RED2에서 제공 RED3에서 제공 redvm1
에서N/A 입력 src 10.123.123.67 SNAT to src 10.0.2.2
입력 src 10.123.123.101 SNAT to src 10.0.3.2
redvm2
에서입력 src 10.123.123.32 SNAT to src 10.0.1.2
N/A 입력 src 10.123.123.101 SNAT to src 10.0.3.2
redvm3
에서입력 src 10.123.123.32 SNAT to src 10.0.1.2
입력 src 10.123.123.67 SNAT to src 10.0.2.2
N/A -
각 VM에 대해
iptables
명령을 사용합니다.-
redvm1
에서.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2 sudo netfilter-persistent save
-
redvm2
에서.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2 sudo netfilter-persistent save
-
redvm3
에서.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2 sudo netfilter-persistent save
주: RED가 공용 IP에 사용하는 서브넷에서 액세스를 허용하는 첫번째 규칙(
sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT
)이 추가됩니다. 이 규칙 또는 이와 유사한 규칙이 없으면 RED에서 RED로의 인바운드 트래픽이 수신 RED에 의해 삭제될 수 있습니다. 이러한 VM에서 새 규칙은sudo netfilter-persistent save
로 유지되지만, 이 명령은 다른 Linux 배포판을 사용하는 경우 다른 명령일 수 있습니다. -
-
-
DNAT를 만듭니다.
-
마찬가지로 테이블의 각 VM에 대해 DNAT 규칙을 매핑하는 경우 다음과 같이 표시되어야 합니다.
DNAT RED1로 이동 RED2로 이동 RED3로 이동 redvm1
에서N/A 출력 dst 10.0.2.2 DNAT to dst 10.123.123.67
출력 dst 10.0.3.2 DNAT to dst 10.123.123.101
redvm2
에서출력 dst 10.0.1.2 DNAT to dst 10.123.123.32
N/A 출력 dst 10.0.3.2 DNAT to dst 10.123.123.101
redvm3
에서출력 dst 10.0.1.2 DNAT to dst 10.123.123.32
출력 dst 10.0.2.2 DNAT to dst 10.123.123.67
N/A -
각 VM에 대해
iptables
명령을 사용합니다.-
redvm1
에서.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101 sudo netfilter-persistent save
-
redvm2
에서.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101 sudo netfilter-persistent save
-
redvm3
에서.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67 sudo netfilter-persistent save
주: VM 인스턴스에서 새 규칙은
sudo netfilter-persistent save
로 유지됩니다. -
-
작업 4: 미결 MPI 설정
Open MPI는 SSH를 사용하여 클러스터 멤버 간에 통신하므로 작업을 실행하기 전에 처리해야 할 몇 가지 사항이 있습니다.
-
Open MPI는 각 VM의 전용 IP 주소를 사용하고, 각 VM 인스턴스에 대해
/etc/hosts
항목을 만들고, 모든 Open MPI VM 인스턴스에 대해 해당 전용 IP 주소를 사용합니다.예를 들어,
redvm1
에서/etc/hosts
항목 위의 구성을 사용하면 다음 항목이 포함됩니다.127.0.0.1 localhost 127.0.1.1 redvm1 redvm1 10.0.2.2 redvm2 10.0.3.2 redvm3
redvm2
에서/etc/hosts
에는 다음 항목이 포함됩니다.127.0.0.1 localhost 127.0.1.1 redvm2 redvm2 10.0.1.2 redvm1 10.0.3.2 redvm3
redvm3
에서/etc/hosts
에는 다음 항목이 포함됩니다.127.0.0.1 localhost 127.0.1.1 redvm3 redvm3 10.0.1.2 redvm1 10.0.2.2 redvm2
-
또한 Open MPI용 각 VM 간에 SSH 등가가 존재하는지 확인해야 합니다.
주: 여기서는 이러한 VM이 Ubuntu 사용자에 대한 기존 SSH 키를 포함하지 않는 새 VM이라고 가정합니다. SSH 키가 이미 생성된 이전 VM을 사용하는 경우 이 지침을 적용해야 합니다. 이 지침은 기존 키를 겹쳐쓰고 VM에서 사용자를 잠글 수 있습니다.
-
redvm1
에서 새 공용 또는 전용 키 쌍을 생성합니다(키가 아직 생성되지 않은 경우).ssh-keygen -b 4096 -t rsa
와 유사한ssh-keygen
명령을 사용합니다(기본값을 수락하고 새 키에 대한 비밀번호를 설정하지 않음). 그러면~/.ssh/id_rsa
및~/.ssh/id_rsa.pub
가 생성됩니다. -
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
를 실행하거나 텍스트 편집기를 통해 수동으로 복사하여authorized_keys
파일에 새 공개 키를 추가합니다. -
id_rsa
및id_rsa.pub
를 모두redvm2
및redvm3
에 있는ubuntu
사용자의~/.ssh
디렉토리에 복사합니다.id_rsa.pub
을authorized_keys
에 추가하고redvm2
및redvm3
에서cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
를 실행합니다. -
이 작업이 완료되면 각 VM에서 VM 자체를 비롯한 다른 모든 VM에 연결하여 연결이 작동하고 SSH가 다른 호스트를 신뢰하는지 확인합니다.
-
redvm1
의 SSH 접속입니다.ubuntu@redvm1:~$ ssh redvm1 date The authenticity of host 'redvm1 (127.0.1.1)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm1' (ED25519) to the list of known hosts. Fri Apr 5 04:28:57 UTC 2024 ubuntu@redvm1:~$ ubuntu@redvm1:~$ ssh redvm2 date The authenticity of host 'redvm2 (10.0.2.2)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm2' (ED25519) to the list of known hosts. Wed Jan 31 04:29:11 UTC 2024 ubuntu@redvm1:~$ ubuntu@redvm1:~$ ssh redvm3 date The authenticity of host 'redvm3 (10.0.3.2)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm3' (ED25519) to the list of known hosts. Wed Jan 31 04:29:19 UTC 2024
-
-
Repeat above steps for
redvm2
connecting toredvm2
,redvm1
andredvm3
andredvm3
connecting toredvm3
,redvm1
andredvm2
.
-
-
각 클러스터 멤버에 대한 공통 저장소 위치를 만듭니다.
주: Open MPI를 사용하는 모든 VM 인스턴스에는 공유 스토리지 위치가 있습니다. NFS, GlusterFS, OCFS2 또는 기타 여러 공유 파일 시스템 솔루션의 형식을 사용할 수 있습니다. 이는 작업 로드에 공통 작업 디렉토리나 데이터 집합이 필요한 경우에 특히 중요합니다.
이 예에서는 공유 파일 시스템이 필요하지 않으며 테스트 이진에 대한 공통 이름을 가진 위치만 필요합니다. 각 VM에서 공통 이름 위치
/mpitest
를 만듭니다.sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
공유 파일 시스템을 사용하는 경우 공유 파일 시스템은 모든 VM 인스턴스에서 이 위치에 마운트됩니다.
-
mpirun
와 함께 사용할hostfile
를 생성합니다. 자세한 내용은 hostfile 옵션을 사용하여 mpirun하는 방법을 참조하십시오.-
테스트를 위해 두 개의
hostfiles
를 생성합니다.redvm1
에서 위에 생성된 공통 이름 위치/mpitest
을 사용하여 다음 콘텐츠가 포함된/mpitest/mpihosts.txt
파일을 생성합니다.redvm1 redvm2 redvm3
-
다음 내용으로
/mpitest/mpihosts_slots.txt
파일을 생성합니다.redvm1 slots=1 redvm2 slots=1 redvm3 slots=1
-
참고: 이 자습서에서는 테스트가
redvm1
에서만 실행되므로 이 파일을redvm2
및redvm3
에 복사할 필요가 없습니다. 다른 VM의 작업도 실행하려면 이러한 파일을 다른 VM 인스턴스에 복사하거나 NFS와 같은 적절한 공유 파일 시스템을 사용해야 합니다.
작업 5: VM 인스턴스 테스트
-
분산 명령에 대한 간단한 테스트입니다.
-
간단한 테스트는 모든 클러스터 멤버에서
hostname
와 같은 명령을 호출하는 것입니다. 다음은slots=1
(mpihosts_slots.txt
) 파일이 있는 3개 노드에서 실행 중인 예상 출력입니다.slots
지시어는mpirun
가 프로세스 수를 결정하는 대신 이 노드에 할당할 수 있는 프로세스 수를mpirun
에 알립니다.주: CPU 이외의 제한된 리소스(예: GPU)를 사용하는 경우 프로세스를 다른 리소스 수로 제한하려는 경우
slots
를 지정해야 할 수 있습니다. 그렇지 않으면 다른 리소스를 할당할 수 없어 프로세스가 실패할 수 있습니다.ubuntu@redvm1:~$ cd /mpitest ubuntu@redvm1:/mpitest$ cat mpihosts_slots.txt redvm1 slots=1 redvm2 slots=1 redvm3 slots=1 ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts_slots.txt hostname redvm1 redvm2 redvm3
-
slots
(mpihosts.txt
) 파일을 지정하지 않고 동일한 테스트를 실행하면mpirun
에서 사용 가능한 CPU를 확인하고 각 노드에서 CPU 수hostname
명령을 실행합니다. 이 3개의 VM에는 16개의 CPU가 있으므로 3 x 16개의 응답(호스트 이름당 16개)을 얻어야 합니다.ubuntu@redvm1:/mpitest$ cat mpihosts.txt redvm1 redvm2 redvm3 ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt hostname | sort | uniq -c 16 redvm1 16 redvm2 16 redvm3
-
-
Open MPI 테스트 바이너리를 만듭니다.
Open MPI를 사용하는 프로그램에 대한 적절한 테스트를 위해 John Burkardt의 주요 숫자 계산기 예제를 사용합니다.
redvm1
에서 다운로드하여 컴파일해야 합니다. 자세한 내용은 John Burkardt의 프라임 번호 계산기를 참조하십시오.ubuntu@redvm1:~$ cd /mpitest ubuntu@redvm1:/mpitest$ curl https://people.sc.fsu.edu/~jburkardt/c_src/prime_mpi/prime_mpi.c -o prime_mpi.c % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4699 100 4699 0 0 2990 0 0:00:01 0:00:01 --:--:-- 2991 ubuntu@redvm1:/mpitest$ mpicc prime_mpi.c -o prime_mpi ubuntu@redvm1:/mpitest$ ls -l prime_mpi -rwxrwxr-x 1 ubuntu ubuntu 16736 Apr 5 05:38 prime_mpi
공유 파일 시스템이 테스트용으로 설정되지 않았으므로
prime_mpi
이진을redvm1
에 있는 위치와 동일한 위치에 있는redvm2
및redvm3
로 복사해야 합니다. 다음 명령을 실행합니다.ubuntu@redvm1:/mpitest$ scp prime_mpi redvm2:/mpitest prime_mpi 100% 16KB 27.4MB/s 00:00 ubuntu@redvm1:/mpitest$ scp prime_mpi redvm3:/mpitest prime_mpi 100% 16KB 28.3MB/s 00:00
-
비교할 기준 요소의 경우 Open MPI binary를 독립형으로 실행합니다. 기준 또는 비교를 위해 미결 MPI 없이
prime_mpi
를 실행합니다.ubuntu@redvm1:/mpitest$ ./prime_mpi 31 January 2024 06:08:17 AM PRIME_MPI C/MPI version An MPI example program to count the number of primes. The number of processes is 1 N Pi Time 1 0 0.000003 2 1 0.000000 4 2 0.000000 8 4 0.000000 16 6 0.000000 32 11 0.000001 64 18 0.000002 128 31 0.000022 256 54 0.000019 512 97 0.000066 1024 172 0.000231 2048 309 0.000810 4096 564 0.002846 8192 1028 0.010093 16384 1900 0.037234 32768 3512 0.137078 65536 6542 0.515210 131072 12251 1.932970 262144 23000 7.243419 PRIME_MPI - Master process: Normal end of execution. 31 January 2024 06:08:27 AM
주: 프로세스 수는 1이며 완료하는 데 약 10초가 걸립니다.
-
Open MPI를 사용하는 분산 실행입니다.
mpihosts.txt
파일을 사용하여 3개의 VM 인스턴스에서 사용 가능한 모든 CPU에서 Open MPI로prime_mpi
를 실행합니다.ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt ./prime_mpi 31 January 2024 06:09:02 AM PRIME_MPI C/MPI version An MPI example program to count the number of primes. The number of processes is 48 N Pi Time 1 0 0.020740 2 1 0.000428 4 2 0.000331 8 4 0.000392 16 6 0.000269 32 11 0.000295 64 18 0.000374 128 31 0.000390 256 54 0.000380 512 97 0.000331 1024 172 0.000351 2048 309 0.000385 4096 564 0.000740 8192 1028 0.001931 16384 1900 0.006316 32768 3512 0.021577 65536 6542 0.078834 131072 12251 0.273368 262144 23000 0.808825 PRIME_MPI - Master process: Normal end of execution. 31 January 2024 06:09:03 AM
48개의 프로세스가 사용되며 실행하는 데 약 1초가 걸립니다.
mpihosts_slots.txt
파일을 사용하여 동일한 예제를 실행하여 Open MPI를 탐색합니다.prime_mpi
독립형 실행에 비해 성능이 향상되어야 하지만 모든 노드에서 전체 보완이 아닌 각 노드에서 프로세서 1개(총 3개)만 사용됩니다. 각 VM 인스턴스의 슬롯 수를 변경하여 작업 분배를 제어할 수 있습니다.
관련 링크
확인
- Authors - Melinda Centeno(Senior Principal Product Manager)의 James George(Master Principal Cloud Architect)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Use Open MPI on Oracle Roving Edge Infrastructure
F96273-01
April 2024