헤드리스 HPC 환경의 함정

함정
개요
Rescale에서 HPC를 실행하거나 해당 문제에 대한 기존 HPC 환경에서 솔버를 헤드리스 환경에서 실행할 수 있어야 합니다. 이것이 실제로 의미하는 바는 ISV가 솔버를 다음과 같은 환경에서 실행할 수 있음을 확인했다는 것입니다. 일괄 간단한(또는 그렇게 간단하지 않은)을 사용하는 모드 명령 줄 지침. 이를 통해 소프트웨어 사용자는 헤드리스 HPC 환경에 작업을 제출할 수 있습니다. 전통적으로 이 환경은 스케줄러 뒤에 있는 서버 세트입니다. 엔지니어나 과학자는 스케줄러에 제출할 명령줄 지침 스크립트를 작성합니다. Rescale에서도 마찬가지입니다. 사용자는 Rescale 플랫폼에서 작업을 실행하기 위해 일련의 명령줄 지침을 입력합니다.
예를 들어 OpenFOAM을 살펴보겠습니다. OpenFOAM 사용자는 일반적으로 Allrun 스크립트를 작성하고 단순히 스크립트를 호출하여 Rescale에서 이를 호출합니다.

./올런

이는 쉬우며 Rescale에서 사용 가능한 다른 솔버(LS-Dyna, CONVERGE, 스타-CCM+, NX Nastran, XFlow 등이 있습니다. Rescale의 모든 솔버는 간단한 명령줄 명령을 사용하여 인스턴스화됩니다.
 헤드리스 환경
명령줄 명령을 사용하여 솔버를 실행할 수 있다고 해서 솔버가 일괄적으로 실행된다는 의미는 아닙니다. 예를 들어 배치 모드에서 솔버를 실행하도록 명시적으로 지정하지 않고 Star-CCM+를 실행하려고 하면 프로그램이 그래픽 사용자 인터페이스(GUI)를 시작하고 디스플레이 장치를 찾아서 즉시 종료됩니다. 따라서 Star-CCM+는 다음과 같은 명령줄 명령을 사용하여 호출해야 합니다.

starccm+ -power -np 4 -배치 배치.java 

이것은 충분히 간단합니다. 동일한 프로그램을 사용하여 배치 솔버와 GUI를 모두 실행한다는 말이 있습니다. 불행하게도 이러한 유형의 구현은 불완전할 수 있습니다.
 ISV가 솔버 기능을 데스크톱 환경에서 HPC(배치) 환경으로 마이그레이션하기로 결정한 경우 일반적으로 단일 시스템 이상에서 솔버를 실행할 수 있는 기능을 구현했기 때문에 이렇게 합니다. 단일 시스템에서만 실행할 수 있는 솔버는 HPC 환경에서 실행될 때 이점이 적습니다. 초기 반복에서 ISV는 배치 솔버 내부에 원래 데스크톱 구현의 일부 잠재적인 아티팩트를 남길 수 있습니다. 이러한 솔버는 명령줄에서 실행할 수 있지만 여전히 디스플레이에 대한 액세스가 필요할 수 있습니다. Rescale에서 우리는 여전히 이러한 "거의 헤드리스" 솔버를 실행할 수 있기를 원하기 때문에 가상 프레임 버퍼라는 도구를 사용합니다.
 X 가상 프레임 버퍼
X 가상 프레임 버퍼(Xvfb)는 메모리에 가상 디스플레이를 렌더링하므로 실제로 헤드리스가 아닌 응용 프로그램은 이를 사용하여 그래픽 요소를 렌더링할 수 있습니다. Rescale에서는 가상 프레임 버퍼를 시작하고 실행하는 데 성능 저하가 있기 때문에 최후의 수단으로 가상 프레임 버퍼를 사용합니다. Xvfb를 사용하려면 이러한 솔버 프로그램 주위에 래퍼를 구현해야 합니다. 가장 간단한 형태로 다음과 같이 구현할 수 있습니다.

#!/bin/bash # /usr/local/bin/solver _d=1 Xvfb :${_d} > /tmp/xvfb-${_d}.log 2>&1 & _xvfb_pid=$에 위치한 래퍼 스크립트! 내보내기 DISPLAY=:${_d} /path/to/real/solver $@ kill ${_xvfb_pid}

이것은 매우 간단해 보입니다. 번호가 매겨진 디스플레이에서 가상 프레임 버퍼를 시작하고, 가상 프레임 버퍼와 연결된 디스플레이를 사용하도록 환경에 지시하고, 솔버를 실행하고, 마지막에 정리합니다.
벌레 캔
Rescale의 매우 강력한 기능 중 하나는 매개변수 스윕/실험 계획(DOE) 기능입니다. 우리는 DOE를 여러 번 병렬로 실행할 수 있습니다. 이는 또한 동일한 서버에서 DOE를 여러 번 실행할 수 있음을 의미합니다. 동일한 노드에서 위 스크립트를 두 번 실행한다고 가정해 보겠습니다. 이제 스크립트의 각 인스턴스화는 동일한 디스플레이에서 프레임 버퍼를 시작하려고 시도합니다. 이로 인해 모든 종류의 문제가 발생할 수 있습니다. 경쟁 조건, 프로세스 손상 등. 이로 인해 발생할 수 있는 낮은 수준의 문제에 관계없이 가장 큰 높은 수준의 문제는 가상 프레임 버퍼 문제로 인해 솔버가 중단되는 경우입니다. 현재로서는 100번의 실행으로 DOE를 시작한 사용자는 하루가 끝날 때 그렇게 하고 밤새 작업을 실행하게 할 수 있습니다. 다음날 아침 해당 사용자는 Xvfb 문제로 인해 밤새 한 실행이 중단되었음을 알게 될 수 있습니다. 그는 아마도 몇 시간 안에 99개의 달리기가 끝나는 것을 볼 수 있지만, 한 번의 매달린 달리기로 인해 그의 클러스터는 밤새도록 유지되었습니다. 이런 상황은 우리가 무슨 수를 써서라도 피하고 싶은 상황입니다.
가상 프레임 버퍼를 구현하려면 래퍼 스크립트에 모든 종류의 견고성 조항을 작성해야 합니다. 단일 디스플레이에서 단일 Xvfb만 시작하고 모든 솔버 인스턴스화에 해당 디스플레이를 사용하기로 결정할 수 있습니다. Xvfb가 실행 중인지 확인하고 그렇지 않은 경우 프레임 버퍼 시작 단계를 건너뛸 수 있습니다.

if [ -z "$(ps aux | grep Xvfb | grep :${_d})" ]; 그런 다음 Xvfb :${_d}; fi

이는 프레임 버퍼를 언제 종료할 수 있는지 전혀 알 수 없어 항상 버퍼를 남겨두어야 하는 부작용이 있습니다. 이는 솔버의 요구 사항에 따라 괜찮을 수도 있습니다. 문제가 있으면 각 솔버 프로세스에 대한 표시 번호를 증가시키고 각 솔버가 완료될 때 각 프레임 버퍼를 정리해야 합니다. 
또한 솔버가 중단되었는지 여부를 명시적으로 확인할 수도 있습니다. 백그라운드에서 솔버를 실행하고 포그라운드 폴링 루프를 사용하여 프로그램 상태에 대한 pid를 조사할 수 있습니다. 솔버 인스턴스화 주위에 재시도 루프를 작성하여 처음 실패할 경우 솔버를 다시 시작할 수 있습니다. 솔버를 호출하는 동안 프레임 버퍼가 계속 초기화되는 경우가 이에 해당할 수 있습니다.
무효 라이센스 사례
우리가 지원하는 CFD 솔버 중 하나에는 프레임 버퍼가 필요합니다. 고객이 유효한 라이센스 주소를 지정하지 않고 간단한 작업을 시작했습니다. 이틀 후 그는 자신의 직업이 여전히 운영되고 있는지 궁금해했습니다. 솔버는 인스턴스화되고 몇 초 내에 중단되었으며 2일 동안 유휴 상태로 있었던 것으로 나타났습니다. 문제를 디버깅하는 동안 우리는 가상 프레임 버퍼를 검사하기로 결정했습니다. 다음을 사용하여 스크린샷을 찍었습니다.

xwd -root -silent -display :${_d} | xwdtopnm | pnmtojpeg > ss.jpg

결과 스크린샷에는 사용자에게 유효한 라이센스 위치를 입력하라는 창이 표시되었습니다. 이는 분명히 배치 솔버의 데스크탑 구현에서 발생하는 아티팩트였습니다. 진정한 헤드리스 배치 프로그램은 사용자에게 보내는 메시지와 함께 종료되었을 것입니다. 이후 우리는 이 문제를 해결했으며 이 도구를 사용할 때 앞서 설명한 대로 견고성 조항을 적용하는 등 더욱 주의를 기울였습니다.
가상 프레임 버퍼의 후처리 유틸리티
Xvfb의 매우 유용한 유틸리티는 이를 사용하여 헤드리스 환경에서 후처리 그래픽을 렌더링할 수 있다는 것입니다. 이제 ParaView 또는 LS-PrePost와 같은 도구를 호출하여 일반적으로 화면에 렌더링되는 장면의 동영상과 이미지를 생성할 수 있습니다.
다음은 Xvfb, OpenFOAM 및 ParaView를 사용하여 장면 이미지를 생성하는 예입니다. https://www.rescale.com/resources/software/openfoam/openfoam-motorbike-post/
다음은 Xvfb, LS-Dyna 및 LS-PrePost를 사용하여 충돌 시뮬레이션 동영상을 생성하는 예입니다. https://www.rescale.com/resources/software/ls-dyna/ls-dyna-post-processing/
일부 사용자는 원시 데이터 세트를 다운로드할 필요 없이 데이터를 시각적으로 표현함으로써 이 기능을 활용했습니다.
배운
Xvfb를 처음 사용한 이후로 우리는 Xvfb의 사용이 때때로 불리하고 예상치 못한 부작용을 가져온다는 것을 알게 되었습니다. 이후 우리는 최악의 부작용인 작업 중단을 방지하기 위해 Xvfb의 모든 사용을 가능한 한 강력하게 만들기 위해 노력했습니다. 또한 전통적인 헤드리스 HPC 환경에서 실행되지 않는 솔버를 실행할 수 있으므로 Xvfb를 사용하여 많은 이점을 얻었습니다. 또한 특정 후처리 도구를 사용하여 이미지와 동영상을 배치 모드로 렌더링할 수 있습니다. 우리는 솔버의 데스크탑 구현만 갖고 있는 ISV가 헤드리스 HPC 환경에서 실행되는 솔버를 만들 것을 권장합니다. 하지만 그렇게 할 때 디스플레이 없이 솔버를 실제로 실행한다는 것이 무엇을 의미하는지 명심해야 합니다.

저자

  • Mulyanto Poort
물얀토 푸어트

    부사장 HPC Mulyanto는 Rescale에서 애플리케이션 엔지니어링을 담당하고 있습니다. Rescale에 합류하기 전에 Mulyanto는 Mid-Michigan Research, LLC에서 소프트웨어 개발 및 기계 엔지니어로 7년간 근무하며 주요 엔진 제조 및 자동차 공급업체를 위한 전문 연구 컨설팅을 수행했습니다. Mulyanto는 이전에 미시간 주립대학교에서 연구 전문가로 근무하며 맞춤형 데이터 및 이미지 분석 도구 개발에 주력했습니다. Mulyanto는 미시간 주립대학교에서 기계공학 학사 및 석사 학위를 취득했습니다.

비슷한 게시물