윈도우 HPC 클러스터를 위한 MS HPC Pack 설치 및 활용

윈도우 HPC 클러스터를 위한 MS HPC Pack 설치 및 활용

개요

전통적으로 HPC(High Performance Computing, 고성능 컴퓨팅) 분야는 리눅스로 구축되었습니다. 그러나 일부 HPC 애플리케이션은 Windows만 지원하므로, Windows 기반 클러스터가 필요한 경우가 있습니다. Microsoft HPC Pack 은 이러한 요구를 해결하기 위해 제공되는 Windows HPC 클러스터 관리 도구입니다.

이 가이드는 Samsung Cloud Platform 인프라에서 HPC Pack으로 Windows HPC 클러스터를 구축·운영하는 절차를 설명합니다. 2장에서는 HPC Pack을 설치하는 방법을 알아보겠습니다. 3장에서는 작업을 제출하는 방법을 설명하겠습니다. 4장에서는 요약하고 향후 계획을 소개하겠습니다.

HPC Pack 설치

전체 아키텍처 및 용어

HPC Pack Overall Architecture
Overall Architecture

본 가이드에서 하나의 VPC에 두개의 서브넷을 만들 것입니다. 한 개의 서브넷은 퍼블릭 서브넷이고 다른 하나는 프라이빗 서브넷입니다. 퍼블릭 서브넷에서는 사용자가 접근하는 로그인 노드로 사용할 Virtual Server가 위치합니다. 이 로그인 노드에는 사용자가 RDP Client나 SSH Client로 접속 할 수 있습니다. 프라이빗 서브넷에서는 헤드 노드, 계산 노드, 워크스테이션 노드(GPU) 가 위치합니다.

RDP는 Remote Desktop Protocol로 원격으로 다른 컴퓨터에 그래픽 인터페이스로 접속하기 위한 프로토콜입니다. 일반적으로 TCP 포트 3389를 이용합니다. SSH 클라이언트는 원격 서버에 Secure Shell로 접속하기 위한 클라이언트입니다. 일반적으로 TCP 포트 22를 이용합니다. Samsung Cloud Platform에서는 윈도우 서버는 RDP를 이용하여 접속하도록 하고 리눅스 서버는 SSH를 이용하여 접속하도록 하고 있습니다. 본 가이드에서는 윈도우 서버에도 SSH를 설치하여 접속하는 것도 소개하려고 합니다.

HPC Cluster는 헤드노드와 계산 노드, 그리고 워크스테이션 노드로 구성되어있습니다. 헤드 노드는 Virtual Server로 구성했고 계산노드는 Virtual Server 2대와 Bare Metal Server 1대로 구성했습니다. 또 그래픽 작업을 위한 워크스테이션 노드를 GPU Server로 구성했습니다. 이 구성은 HPC Cluster의 목적에 따라 달라질 수 있으며 환경에 맞게 서버 대수를 조절하고 서버 스펙을 정하면 됩니다. 이런 구성으로 한 이유는 Samsung Cloud Platform안에서 Virtual Server, Bare Metal Server, GPU Server가 혼합된 HPC 클러스터 구성이 가능하다는 것을 강조하여 말씀드리고 싶어서 입니다.

본 가이드에서 필요한 서버 목록은 다음 표와 같습니다. Samsung Cloud Platform의 기본 내용은 알고 있다는 전제하에 가이드를 작성하여 VPC, Subnet, Security Group, Virtual Server 생성, Bare Metal Server 생성 기능들을 다루지 않겠습니다.

노드 종류권장 서버 스펙OS용도
로그인 노드s1v1m2Windows 2019HPC Pack Client 설치
헤드 노드s1v4m8 이상Windows 2019HPC Pack Head Node 설치
계산 노드(Virtual Server)h2 계열Windows 2019 StandardHPC Pack Compute Node 설치
계산 노드(Bare Metal Server)h2v96m768_metalWindows 2019 StandardHPC Pack Compute Node 설치
워크스테이션 노드(GPU Server)-Windows 2019 StandardHPC Pack Workstation Node 설치
표. Specifications of the Servers Used in the MS HPC Pack Cluster

HPC Pack의 필수 조건 중 하나는 도메인 서비스인 Active Directory입니다. 모든 노드가 같은 도메인에 속해 있어야 합니다. 아키텍쳐 그림에는 Active Directory를 Virtual Server에 설치했으나 본 가이드에서는 Active Directory에 대한 자세한 내용은 다루지 않고 모든 서버가 하나의 도메인에 속해 있어야 합니다.

헤드 노드 설치

본 가이드에서 사용한 HPC Pack의 버전은 2019 Update 2버전입니다. 업데이트 2버전의 다운로드 주소는 다음과 같습니다.

https://www.microsoft.com/en-us/download/details.aspx?id=105615

다운로드 주소가 바뀌거나 새로운 버전이 출시되었을 경우 검색해서 새로운 주소를 검색해서 다운로드 받길 바랍니다.

MS HPC Pack Head Node Install Step 1
MS HPC Pack Head Node Install Step 1

다운로드 버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 2
MS HPC Pack Head Node Install Step 2

Full버전과 Client X64버전을 다운로드 받습니다. 처음 설치하는 것이기 때문에 패치는 다운로드 받지 않습니다. 이 파일들을 헤드 노드에 옮기고(또는 헤드 노드에서 다운로드 받고) 압축을 풉니다.

HPC Pack에서는 노드간 통신의 보안을 위해 X.509인증서가 필요합니다. 특별히 인증서에 대해 아는 것이 없다면 HPC Pack에서 제공하는 스크립트를 통해서 만들면 됩니다. 스크립트의 파일명은 CreateHpcCertificate.ps1로 HPC Pack의 압축이 풀린 폴더 하위에 setup폴더에 있습니다. PowerShell을 열어 설치파일 폴더 밑 setup폴더로 가서 다음 명령어로 인증서를 만듭니다.

.\CreateHpcCertificate.ps1 -CommonName "HPC Pack Node Communication" -Path "[인증서 파일 경로]\hpccomm.pfx"    -Password (ConvertTo-SecureString "[암호]" -AsPlainText -Force)

여기서 [인증서 파일 경로]는 인증서 파일이 설치될 폴더, [암호]는 인증서에 필요한 암호를 실제로 입력해야 합니다. 이 암호는 HPC Pack에만 사용되는 암호로 OS의 암호와 달라도 상관없습니다.

File C:Users\newone\Downloads\HPCPack2019Update2-Full-v7756\setup\CreateHpcCertificate.ps1 is published by CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US and is not trusted on your system. Only run scripts from trusted publishers. 
  [V] Never run  [D] Do not run  [R] Run once  [A] Always run  [?] Help (default is "D"):

위의 메세지에서 R 엔터를 눌러 설치합니다. 에러 메시지가 없다면 설치가 잘 된 것이고 경로에 보면 hpccomm.pfx 파일을 볼 수 있습니다. 이제 압축이 해제된 폴더에 setup.exe파일을 실행하여 HPC Pack 설치를 진행합시다. 스크립트 실행 시 “Microsoft Corporation이 서명한 스크립트입니다…” 메시지가 뜨면 R(Run once) 를 눌러 실행을 허용합니다. 오류 없이 완료되면 hpccomm.pfx 파일이 지정한 경로에 생성됩니다. 압축을 푼 루트 폴더에서 setup.exe를 실행하여 설치를 시작합니다.

MS HPC Pack Head Node Install Step 3
MS HPC Pack Head Node Install Step 3

New installation or add new features to an existing installation을 클릭합니다.

MS HPC Pack Head Node Install Step 4
MS HPC Pack Head Node Install Step 4

간단한 설치 안내문입니다. Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 5
MS HPC Pack Head Node Install Step 5

라이선스 계약에 관한 동의 여부를 물어봅니다. 읽어보고 Next 버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 6
MS HPC Pack Head Node Install Step 6

헤드 노드를 설치하는 것이므로 가장 위의 Create a new HPC cluster by creating a head node를 선택하고 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 7
MS HPC Pack Head Node Install Step 7

설치 전 필수 조건에 대해 테스트를 자동으로 수행합니다. 만약 하나라도 Passed가 아닌 다른 Status를 보인다면 더 진행하지 않고 원인을 해결하는 것을 제안합니다. 모두 Passed라면 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 8
MS HPC Pack Head Node Install Step 8

이제부터 DB에 대한 설정입니다. 여러 DB를 나눠서 설정할 수 있는데 어차피 원격 DB를 사용하지 않기로 했으므로 모두 헤드노드로 선택하고 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 9
MS HPC Pack Head Node Install Step 9

SQL서버가 설치된게 없으니 새로 설치하겠다는 문구입니다. Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 10
MS HPC Pack Head Node Install Step 10

SQL 서버가 설치되는 장소입니다. 기본 설치 경로 그대로 하고 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 11
MS HPC Pack Head Node Install Step 11

HPC Pack이 설치되는 장소입니다. 기본 설치 경로 그대로 하고 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 12
MS HPC Pack Head Node Install Step 12

인증서를 등록하는 단계입니다. Import버튼을 누릅니다.

MS HPC Pack Head Node Install Step 13
MS HPC Pack Head Node Install Step 13

Import Certicate form a PFX file을 선택 후 Browse로 앞서 만들었던 인증서를 선택합니다. Password에는 앞서 인증서를 만들 때 사용한 암호를 입력합니다. 그 후 Import 버튼을 클릭하여 다음 단계로 진행합니다.

MS HPC Pack Head Node Install Step 14
MS HPC Pack Head Node Install Step 14

인증서를 가져오는데 성공했다면 Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 15
MS HPC Pack Head Node Install Step 15

Azure와 연동기능을 사용할 때 입력하는 단계입니다. 이 가이드에서는 공란으로 합니다. Next버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 16
MS HPC Pack Head Node Install Step 16

이제 설치하는 단계입니다. Install버튼을 눌러 설치합니다. 설치는 10~20분 정도 소요되니 커피 한잔하고 오면 됩니다.

MS HPC Pack Head Node Install Step 17
MS HPC Pack Head Node Install Step 17

완료가 되었고 Finish버튼을 클릭합니다. 이제 윈도우 버튼을 눌러 시작으로 가면 HPC Pack 2019 항목에 HPC Cluster ManagerHPC Job Manager가 설치된 것을 확인할 수 있습니다. HPC Job Manager의 모든 기능은 HPC Cluster Manager에 모두 있으므로 헤드 노드에서는 HPC Cluster Manger를 사용하면 됩니다. 반대로 사용자에게는 HPC Pack의 모든 권한을 주고 싶지 않을 수 있습니다. 이럴 경우에는 HPC Job Manager만 설치하면 됩니다. 이는 다운로드할 때 같이 받은 클라이언트 파일(HpcClient_x64.msi)만 설치하면 됩니다. 로그인 노드를 설명하는 과정에서 다시 설명하겠습니다.

클러스터 설정

헤드 노드에서 클러스터 설정을 완료하기 위해 해야 할 단계가 있습니다. HPC Cluster Manager를 실행시키면 Required deployment tasks를 완료해야 합니다. 첫 번째 Configure your network를 선택합니다.

MS HPC Pack Head Node Install Step 18
MS HPC Pack Head Node Install Step 18

네트워크 토폴로지를 정하는 단계입니다. All nodes only on an enterprise network를 선택합니다.

MS HPC Pack Head Node Install Step 19
MS HPC Pack Head Node Install Step 19

네트워크 아답터를 Ethernet0으로 선택 한 후 Next 버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 20
MS HPC Pack Head Node Install Step 20

방화벽을 설정하는 것인데 Samsung Cloud Platform Console에서 설정하면 되므로 OFF로 설정합니다.

MS HPC Pack Head Node Install Step 21
MS HPC Pack Head Node Install Step 21

네트워크 설정을 확인하고 Configure 버튼을 클릭합니다.

MS HPC Pack Head Node Install Step 22
MS HPC Pack Head Node Install Step 22

Finish버튼을 클릭하면 네트워크 설정이 완료됩니다.

MS HPC Pack Head Node Install Step 23
MS HPC Pack Head Node Install Step 23

두 번째로 Provide installation credentials를 선택하면 위와 같은 화면이 뜹니다. 이 인증은 Active Directory의 도메인에 있는 사용자를 선택합니다.

MS HPC Pack Head Node Install Step 24
MS HPC Pack Head Node Install Step 24

세 번째로 Configure the naming of new node를 선택합니다. 계산 노드를 자동으로 추가할 때 계산노드의 이름 규칙을 정하는 것입니다. 우리는 수동으로 정할 것이라서 크게 상관 없으므로 적당히 지어주면 됩니다.

계산노드 추가

본 가이드에서 계산 노드는 Virtual Server 2대와 Bare Metal Server 1대입니다. 이어지는 계산 노드 작업을 3번 반복하여 진행하면 됩니다. 계산 노드를 추가하기 위해서는 계산 노드에도 HPC Pack을 설치해야 합니다. 헤드 노드에서 설치했던 파일을 계산노드에 옮깁니다. Setup.exe파일로 설치파일을 실행한 후에 라이선스 동의까지는 헤드 노드를 설치하는 것과 동일합니다.

MS HPC Pack Compute Node Install Step 1
MS HPC Pack Compute Node Install Step 1

Select Installation Type 단계부터 달라집니다. Join an existing HPC Cluster by creating a new compute node를 선택하고 Next버튼을 클릭합니다.

MS HPC Pack Compute Node Install Step 2
MS HPC Pack Compute Node Install Step 2

설치 전 필수 조건에 대해 테스트를 자동으로 수행합니다. 만약 하나라도 Passed가 아닌 다른 Status를 보인다면 더 진행하지 않고 원인을 해결하는 것을 제안합니다. 모두 Passed라면 Next버튼을 클릭합니다.

MS HPC Pack Compute Node Install Step 3
MS HPC Pack Compute Node Install Step 3

연결할 헤드 노드를 선택합니다. 같은 Active Directory 도메인에 있다면 헤드 노드의 이름이 보여집니다. 만약 앞서 설치한 헤드 노드가 목록에 보이지 않는다면 잘못된 것이니 더 진행할 수 없습니다.

MS HPC Pack Compute Node Install Step 4
MS HPC Pack Compute Node Install Step 4

설치할 경로를 선택합니다. 기존 경로를 그대로 변경하지 않고 Next버튼을 클릭합니다. 그 후 인증서 화면에서는 헤드 노드와 동일한 인증서 파일로 진행해야 합니다. 즉 계산 노드에서 인증서를 새로 만들지 않고 헤드 노드의 인증서를 계산 노드로 옮긴 후에 진행합니다.

MS HPC Pack Compute Node Install Step 5
MS HPC Pack Compute Node Install Step 5

설치를 합니다. 헤드 노드보다는 시간이 적게 걸릴 것입니다.

MS HPC Pack Compute Node Install Step 6
MS HPC Pack Compute Node Install Step 6

Finish버튼을 눌러 설치를 완료합니다. 계산 노드에서 설치를 하고 클러스터에 등록을 해야 완료가 됩니다. 헤드 노드의 HPC Cluster Manger의 Resource Management로 가면 추가한 계산 노드가 보입니다.

MS HPC Pack Compute Node Install Step 7
MS HPC Pack Compute Node Install Step 7

단 Node Health가 Unapproved입니다. Assign a node Template를 클릭합니다.

MS HPC Pack Compute Node Install Step 8
MS HPC Pack Compute Node Install Step 8

Default ComputeNode Template를 선택합니다. 그러면 잠시 프로비저닝되는 시간이 걸리고 다음과 같이 상태가 변경됩니다.

MS HPC Pack Compute Node Install Step 9
MS HPC Pack Compute Node Install Step 9

Node는 정상이지만 Node state가 여전히 offline입니다. 노드에 마우스 우클릭하고 Bring Online을 클릭합니다. 다음과 같이 Node State가 Online로 바뀌게 됩니다.

MS HPC Pack Compute Node Install Step 10
MS HPC Pack Compute Node Install Step 10

워크스테이션 노드 설정

HPC Pack의 워크스테이션 노드는 다른 스케쥴러에 없는 다소 특이한 기능입니다. 워크스테이션이라고 하면 HPC에서는 일반적으로 전/후처리를 하는 서버를 이야기 합니다. 워크스테이션에서 전처리를 하고 HPC 클러스터에서 해석(Solve)하고 해석이 완료되면 다시 워크스테이션으로 결과를 갖고 와서 후처리를 하는 것이 전통적인 HPC 애플리케이션의 워크플로우입니다. 하지만 최근에는 전/후처리에도 CPU/메모리나 GPU자원을 많이 필요로 하기 때문에 따로 워크스테이션에서 하지 않고 HPC클러스터에서 전/후처리를 하는 경우가 늘어났습니다. 이런 경우에도 자원을 공유해서 사용하는 것이기 때문에 Job 스케쥴러에 의해서 할당을 하게 됩니다. 단 HPC Pack의 워크스테이션 노드는 개념이 다릅니다. 그런 작업이 있을 경우 Job 스케쥴러를 통하지 않고 하는 것을 가정하고 있습니다. HPC Pack의 관리를 받지 않는다면 왜 굳이 등록을 해야되는지 궁금할 것입니다. HPC Pack에서는 워크스테이션 노드에 가용성 정책을 정할 수 있습니다. 예를 들면 일과 시간에는 Job 스케쥴러가 통하지 않도록 하고 일과시간 후에 Job 스케쥴러의 Batch Job이 들어가게 할 수 있습니다. 만약 이런 가용성 정책이 없고 100% 미관리인 서버라면 굳이 HPC Pack 클러스터에 등록할 필요는 없습니다.

워크스테이션 노드를 설치하기 전에 해야될 것이 있습니다. 계산 노드는 Default Template이 있었지만 워크스테이션 노드에는 기본 템플릿이 없어서 만들어줘야 합니다. Configuration→Node Templates→Actions→New 버튼을 클릭합니다.

MS HPC Pack Workstation Node Install Step 1
MS HPC Pack Workstation Node Install Step 1
MS HPC Pack Workstation Node Install Step 2
MS HPC Pack Workstation Node Install Step 2

Workstation node and unmanaged server node template를 선택합니다.

MS HPC Pack Workstation Node Install Step 3
MS HPC Pack Workstation Node Install Step 3

템플릿의 이름을 정하는 것으로 크게 중요하지 않으니 적당히 지어줍니다.

MS HPC Pack Workstation Node Install Step 4
MS HPC Pack Workstation Node Install Step 4

가용성 정책(Avialblity Policy)을 설정하는 단계입니다. Bring nodes online and offline manually를 선택합니다. 상세 설정은 템플릿 완료 후 할 것입니다.

MS HPC Pack Workstation Node Install Step 5
MS HPC Pack Workstation Node Install Step 5

Create 버튼을 누르면 템플릿이 생성됩니다.

MS HPC Pack Workstation Node Install Step 6
MS HPC Pack Workstation Node Install Step 6

다시 노드 템플릿 창에서 방금 만든 템플릿에 Node Template Actions의 Edit버튼을 클릭합니다.

MS HPC Pack Workstation Node Install Step 7
MS HPC Pack Workstation Node Install Step 7

Availablity Policy와 User Activity Dection 탭이 있습니다. Availablity Policy중 Bring nodes oneline and offline manually는 매뉴얼하게 Online/Offline을 정하는 것입니다. 워크스테이션 노드가 아닌 계산 노드에서도 되니 특별한 기능은 아닙니다. Bring nodes online and offline on a weekly basis는 일주일을 기준으로 online시간과 offline시간을 정하는 것입니다. 예를 들어 일과시간에는 online으로 하여 Job 스케쥴러에서 할당된 작업만 가능하게 하고 일과 시간 이후에는 offline이 되어 자유롭게 사용하도록 할 수 있습니다.

MS HPC Pack Workstation Node Install Step 8
MS HPC Pack Workstation Node Install Step 8

User Activity Detection은 워크스테이션의 사용자 활동을 보고 Job의 우선순위를 조정하는 것입니다.

MS HPC Pack Workstation Node Install Step 9
MS HPC Pack Workstation Node Install Step 9

계산노드 추가할 때와 마찬가지로 설치파일을 실행하여 라이선스 동의단계까지는 그대로 하고 설치 타입 단계에서 Join an existing HPC cluster by creating a new workstation node or unmanaged server node를 선택합니다.

이후의 설정은 계산 노드 설치와 동일합니다. 설치가 완료되면 계산 노드와 마찬가지로 Resource Management에 들어갑니다. 방금 전에 등록한 노드가 Unapproved 상태입니다. 두 번째 항목인 “Assign a node template”를 선택합니다.

MS HPC Pack Workstation Node Install Step 10
MS HPC Pack Workstation Node Install Step 10

앞서 만든 템플릿을 선택하고 Ok 버튼을 클릭합니다. 이제 워크스테이션 노드 설정을 완료하였습니다. 다른 HPC 서비스의 경우 이런 워크스테이션 노드와 원격 데스크탑 클라이언트를 연동한 서비스들도 많습니다. 단 HPC Pack의 워크스테이션 노드는 그런 원격 데스크탑 기능과는 차이가 있으니 유의하여 사용해야 겠습니다. 참고로 HPC Pack에서는 윈도우의 원격 데스크탑 연결(RDP)를 이용한 노드 접속 기능도 지원합니다.

로그인 노드

헤드 노드 설치 시 설명했었지만 HPC Job Manager만을 설치하기 위해서 HPC Pack의 클라이언트 파일을 설치하면 됩니다. 로그인 노드를 만들기 위해서 클라이언트를 설치해보겠습니다.

MS HPC Pack Login Node Install Step 1
MS HPC Pack Login Node Install Step 1

Next 버튼을 클릭합니다.

MS HPC Pack Login Node Install Step 2
MS HPC Pack Login Node Install Step 2

라이선스에 대한 내용이고 동의하고 Next버튼을 클릭합니다.

MS HPC Pack Login Node Install Step 3
MS HPC Pack Login Node Install Step 3

HPC Pack클라이언트가 설치되는 장소입니다. Next버튼을 클릭합니다.

MS HPC Pack Login Node Install Step 4
MS HPC Pack Login Node Install Step 4

Install 버튼을 눌러 클릭합니다.

MS HPC Pack Login Node Install Step 5
MS HPC Pack Login Node Install Step 5

클라어인트의 설치는 매우 짧은 시간에 완료됩니다. 설치가 완료되면 Job Manager를 실행합니다.

MS HPC Pack Login Node Install Step 6
MS HPC Pack Login Node Install Step 6

실행하고 헤드 노드를 설정하라고 하면 계산 노드 설치한 것과 마찬가지로 헤드 노드를 선택하면 됩니다. HPC Job ManagerHPC Cluster Manager와 사용 방법이 거의 동일합니다. 사용자들은 로그인 노드에 접속하게 하고 관리자들만 헤드 노드에 설정하게 하면 권한 관리를 세밀하게 할 수 있습니다.

SSH 설정

리눅스에 익숙한 HPC 사용자에게 윈도우의 불편한 점으로 터미널 환경을 꼽습니다. 하지만 윈도우에서도 파워셸이란 셸 환경을 사용할 수 있고 SSH를 사용하는 것도 가능합니다. 단 윈도우에서는 SSH가 기본 서비스가 아니므로 다음과 같이 설치하는 과정이 필요합니다.

https://github.com/PowerShell/Win32-OpenSSH/releases 에서 윈도우 64비트용으로 Open SSH 설치파일을 다운로드 하고 윈도우 서버에 설치합니다. 본 가이드를 작성할 시의 가장 최신 버전은 OpenSSH-Win64-v9.4.0.0.msi파일이었습니다. msi파일이라 특별한 안내 없이 설치가 됩니다. 설치 경로는 C:Program FilesOpenSSH이고 파일 탐색기에서 설치가 되었는지 확인합니다.

윈도우 파워셸을 열고 다음 명령을 수행합니다. 이 명령들은 PATH 환경변수에 OpenSSH 실행 경로를 추가하는 것입니다.

$env:Path="$env:Path;C:\Program
Files\OpenSSH\"
Set-ItemProperty –Path
‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session
Manager\Environment' -Name PATH -Value $env:Path

리눅스 클러스터였다면 bashrc파일에

PATH=$PATH:$HOME/bin

이런 식의 명령과 동일한 것이라고 보면 됩니다.
SSH 서비스를 작동하려면 파워셸에서 다음과 같이 수행합니다.

Start-Service sshd

시작할 때 사용할려면 다음과 같이 수행합니다.

Set-Service sshd -StartupType Automatic

위의 두 명령은 각각 리눅스에서 다음과 유사한 명령입니다.

systemctl start sshd
systemctl enable sshd

이제 SSH 클라이언트에서 SSH 연결을 하면 됩니다. MobaXterm에서 다음과 같이 세션을 만들고 접속합니다.

여기서 1번에는 Host IP를 입력하고 2번에는 사용자 이름을 작성합니다. 3번에서 파워쉘환경을 기본으로 사용하고 싶다면 powershell.exe를 추가합니다. 만약 기본 Command 환경을 사용하고 싶다면 빈 칸으로 두면 됩니다.

작업 설정

Single Task Job

Job Management화면은 다음과 같습니다.

Job Management Screen

가운데가 메인 화면으로 Job의 목록이 보입니다. 왼쪽 사이드바는 Job을 필터링하는 기능입니다. Job의 상태, 종류, 나의 Job같은 옵션으로 필터링하여 볼 수 있습니다. 오른쪽 사이드바는 액션에 관한 것으로 새로운 Job을 제출하거나 이미 있는 Job에 특정 명령을 줄 때 사용하는 기능입니다.

오른쪽 사이드바에 Job Submission이 있습니다. 이 중 두 번째 줄에 있는 New Single Task Job을 선택합니다.

New Single Task Job scree
New Single Task Job screen

중앙에 Task란 용어가 나옵니다. HPC Pack에서의 Task는 Job의 하위 단위입니다. 하나의 Job이 여러 개의 Task로 구성 될 수 있습니다. 하지만 앞서 메뉴에서 Single Task Job을 선택했으므로 Task 하나만 작성하면 됩니다. Task Name에는 적당한 이름을 작성합니다. Single Task이므로 Task Name이 Job Name이 됩니다. 이 Name들은 오로지 사람이 구분하기 위한 것이고 실제 스케쥴러에서는 숫자 ID로 구분하므로 Job(Task) Name은 중복이어도 상관없고 심지어는 빈 칸이어도 됩니다.

Command Line에는 Job에서 실행할 SW명령을 작성합니다. 처음 하는 것이므로 hostname이란 간단한 리눅스 명령어로 테스트 해봅시다. 이 명령은 노드의 호스트 네임을 출력해주는 명령입니다. 다음에는 이 명령이 실행되는 워킹 디렉토리나 스탠다드 출력들의 경로를 작성합니다. 지금 Job은 파일로 출력하지는 않으려고 하니 빈칸으로 합니다. 마지막에는 이 Job에 할당할 코어를 작성합니다. 특별한 Job이 아니라면 Minimum과 Maximum을 동일하게 작성합니다. 현재 Job은 1코어로 제출합니다. Submit버튼을 클릭하여 Job을 제출합니다. Job이 제출되면 새로운 Job ID가 부여되고 목록에 보입니다. 현재 Job은 금방 끝나기 때문에 바로 상태가 Finished가 됩니다. 만약 State가 Finished로 바로 되지 않는다면 이상이 있는 것입니다.

job detail screen
job detail screen

이제 Job을 클릭하면 Job의 상세 정보를 얻을 수 있습니다. 왼쪽 메뉴의 View Tasks를 클릭하면 Job의 결과를 볼 수 있습니다. Output 섹션에 mycom01으로 계산노드의 호스트 네임이 정상적으로 출력되었습니다.

Job Manager 상세

HPC Pack에는 Job을 조금 더 상세하게 작성할 수 있습니다.

MS HPC Pack Job Detailn
MS HPC Pack Job Detail

Job Details에는 Job의 이름과 프로젝트(Project), 우선순위(Priority)를 정할 수 있습니다. 프로젝트는 나중에 Job을 분석할 때 특정 프로젝트 별로 묶어서 분석할 수 있으므로 유용하게 쓰일 수 있습니다. 우선순위는 여러 개의 Job이 Queue에 있을 때 우선순위가 높은 Job이 먼저 들어가게 됩니다. Lowest부터 Highest까지 5개의 단계로 정하게 됩니다.

Job run options에는 Job이 실행되는 옵션을 정할 수 있습니다. Do not run this job for more than: 항목은 특정 시간이상으로 Job이 실행되는 것을 방지합니다. Slurm과 같은 다른 스케쥴러에서는 Walltime이란 용어를 더 많이 사용합니다. Run job until cancelled or run time expires는 Job이 완료되더라도 종료하지 않고 앞에서 정한 Run time이나 Cancel액션을 주기 전까지 계속 되는 옵션입니다. Fail the job if any task in this job 여러 개의 Task로 이루어진 Job에서 하나의 Task라도 Fail이 된다면 전체 Job을 Fail처리하는 옵션입니다. Send a notification when this job은 Job 완료 메일을 설정하는 옵션입니다. 이 중 Walltime에 해당하는 Run time과 메일 알람 옵션은 자주 사용하는 옵션입니다.

Job resource는 Job의 자원을 설정하는 것입니다. 타입은 Core, CPU, Socket, GPU중에 정할 수 있습니다. 보통은 Core나 GPU를 사용합니다. 자원의 최소치와 최대치를 정할 수 있습니다. Auto로 하면 Job의 Task에 따라 자동으로 계산됩니다. Use assigned resource exclusively for this job은 이 Job이 들어간 노드에 다른 Job이 들어가지 않게 강제하는 것입니다. 예를 들어 노드의 부하 테스트 같은 테스트 용 Job을 해야 할 경우 다른 Job이 영향을 주지 않도록 하는 것입니다. Run the entire job on a single node 은 이 Job은 무조건 한 노드에서 계산이 되게 하는 것입니다. 만약 10코어가 필요한데 남아있는 자원이 5코어씩 2노드라면 합해서 10코어는 되지만 2개의 노드에 분산이 됩니다. Single Node 옵션이 켜져있다면 한 노드에서 10코어 확보가 되지 않으므로 Job이 Queue 상태에 머무를 것입니다.

MS HPC Pack New Job
MS HPC Pack New Job

Edit Tasks는 Job의 Task를 설정하는 메뉴입니다. Add 버튼을 클릭하면 Single Task job의 화면과 유사하게 작성할 수 있습니다. Task는 Edit, Copy, Delete등의 액션을 취할 수 있습니다. 여기서 Single Task로 이루어진 여러 개의 Job과 여러 개의 Task로 작성된 한 개의 Job이 어떻게 다를까 궁금할 수 있습니다. 한 개의 Job에서 Task들의 단계를 세분화할 수 있습니다. Dependency버튼늘 클릭해봅시다.

Task Dependency Setup
Task Dependency Setup

6개의 Task가 있고 두 개의 그룹으로 나누어서 1,2번 Task는 1그룹에 3~6 Task는 2그룹에 나누었습니다. 그룹안에서는 여러 개의 Task가 동시에 Running이 가능하지만 반드시 앞의 그룹의 Task가 모두 완료되어야 다음 그룹의 Task가 수행됩니다. 물론 Job간에도 의존성(dependnecy)설정이 가능합니다. 단 하나의 Job에서는 자원을 할당받고 모든 Task를 수행하게 되므로 앞의 그룹이 종료되고 그 다음 그룹은 할당 받은 자원에서 하게 됩니다. 여러 개의 Job의 경우에는 나중의 Job은 자원이 할당되지 않은 상태이므로 첫번째 Job이 종료된 후에 언제 Job이 실행할지는 알 수 없습니다.

Job이 실행되는 노드를 좀 더 세분화하여 정할 수도 있습니다. Resource Selection메뉴에 들어가봅시다.

Resource Selection Screen
Resource Selection Screen

노드를 그룹핑하였다면 해당 그룹에만 들어가게 할 수 있습니다. 본 가이드에서 처럼 Virtual Server그룹과 Baremetal 서버가 계산 노드에 포함되어 있고 서버 스펙이 다르면 그룹핑하는게 적절합니다. 또는 아예 특정 노드에서 실행되게 할 수도 있습니다. 위의 그림에서는 MYCOM01 노드를 직접 선택하여 여기서만 Job이 들어가도록 하였습니다. 이제 Submit 버튼을 클릭하여 Job을 제출합시다.

View Job Screen
View Job Screen

Job의 상세화면으로 가면 2개의 Task는 Running 상태이고 4개의 Task는 Queued상태입니다. 할당 받은 4코어중 2개만 사용하고 있지만 앞에서 의존성 설정을 하였기 때문에 그룹2의 Task들은 Queued상태에 있는 것입니다.

또 하나의 고급 기능은 Parametric Sweep이 있습니다. 오른쪽 화면에서 Parametric Sweep Job을 클릭하면 다음과 같은 화면이 보입니다.

Parametric Sweep Task
Parametric Sweep Task

여기서 Sweep은 숫자로 지정합니다. 위의 그림에서는 1~100까지 증가 비율을 1로 설정하였습니다. 명령을 통해 Sweep Task를 정하게 됩니다. Sweep의 숫자에 따라 실행되는 명령이 달라지게 합니다.

예를 들어 cd C:y-cruncher && y-cruncher custom pi -TD:1 -PF:none -dec:*000000로 한다면 y-cruncher에서 파이를 계산하는 명령입니다. dec:*000000으로 하였는데 *은 Sweep의 숫자에 해당합니다. dec는 파이의 자리수를 의미합니다. 예를 들어 Sweep숫자가 1이라면 dec:1000000으로 백만자리까지 계산하게 되고 Sweep 숫자가 100이라면 dec:100000000으로 1억짜리까지 계산하게 됩니다.

이런 상세한 작업들을 GUI로 하니 편리한 점도 있지만 반복되는 작업을 하기는 귀찮아집니다. HPC Pack에서는 Job을 XML형태로 내보낼 수 있습니다. 나중에 이 Xml파일을 읽어드리기만 하면 앞의 설정과 동일하게 Job이 만들어집니다. 이 xml파일은 텍스트 에디터로 입맛에 바꿔 수정하는것도 가능합니다.

다음은 Single Task Job, Parametric Sweep Task Job의 샘플입니다.

<?xml version="1.0" encoding="utf-8"?>
<Task Version="3.000" Name="My Task" CommandLine="cd C:\y-cruncher &amp;&amp; y-cruncher bench 500m -TD:4
 -PF:cppasync" WorkDirectory="C:\" MinCores="4" MaxCores="4" Type="Basic" xmlns="http://schemas.microsoft.com/
 HPCS2008R2/scheduler/" />
<?xml version="1.0" encoding="utf-8"?>
<Task Version="3.000" Name="My Sweep Task" StartValue="1" EndValue="100" IncrementValue="1" CommandLine="cd 
C:\y-cruncher &amp;&amp; y-cruncher custom pi -TD:1 -PF:none -dec:*000000" WorkDirectory="C:\"  
Type="ParametricSweep" MinCores="1" MaxCores="1" IsParametric="true" xmlns="http://schemas.microsoft.com/HPCS2008R2/scheduler/" />

HPC Pack 명령어 소개

앞서 SSH 접속을 통해 터미널로 접속하는 경우도 소개하였습니다. HPC Pack에는 터미널 환경에서 사용 가능한 명령어들이 있습니다. 이 명령어들을 통해 GUI의 불편한 점을 해소할 수 있을것입니다. 명령어의 종류는 굉장히 많으나 대표적인 명령어들만 소개합니다.

1) clusrun

Clusrun은 클러스터에 속해있는 노드에 터미널 명령어를 동시에 보낼 때 사용합니다. 이 명령은 사용자들보다는 관리자를 위한 것으로 주로 여러 개의 노드의 상태를 체크한다든지 시스템 관리에 사용되는 명령어입니다. 일반적인 잡 스케쥴러에는 없는 명령이며 Slurm을 기반으로 하는 HPC Cluster 서비스에는 대신 ClusterShell이란 미들웨어로 이를 대체합니다.

다음과 같이 /all 옵션은 클러스터의 모든 노드에 명령을 보냅니다.

PS C:\> clusrun /all hostname
-------------------------- MYCOM01 returns 0 --------------------------
mycom01
-------------------------- MYCOM02 returns 0 --------------------------
mycom02
-------------------------- MYCOM08 returns 0 --------------------------
mycom08
-------------------------- MYGPU returns 0 --------------------------
mygpu
-------------------------- MYWIN returns 0 --------------------------
mywin
 
-------------------------- Summary --------------------------
5 Nodes succeeded

다음과 같이 특정 노드들만 명령어를 보낼수 있습니다. 참고로 윈도우는 일반적으로 대소문자 구분을 하지 않습니다.

PS C:\> clusrun /nodes:*com*
-------------------------- MYCOM01 returns 0 --------------------------
mycom01
-------------------------- MYCOM02 returns 0 --------------------------
mycom02
-------------------------- MYCOM08 returns 0 --------------------------
mycom08
 
-------------------------- Summary --------------------------
3 Nodes succeeded

2) hpcfile

작은 파일들을 옮길 때 사용하는 명령입니다. 리눅스에서는 scp라는 명령어가 있습니다. 다음과 같이 사용합니다.

hpcfile put -file:"[파일경로]" -targetnode:MYCOM01 -destFile:"[파일경로]"

3) job

job 명령은 말 그대로 Job을 제출하고 관리하는 명령어입니다. 먼저 다음과 같이 현재 Queued인 상태와 Running중인 상태인 Job을 확인할 때는 list 명령을 사용합니다.

PS C:\> job list
Id          Owner               Name                 State        Priority        Resource Request
 
---------- -------------------- -------------------- ------------ --------------- ------------------
 
196        HPCPART\newone       My Sweep Task                  Running      Normal          *-* cores
198        HPCPART\newone       My Task                        Queued       Normal          *-* cores
199        HPCPART\newone       My Task                        Queued       Normal          *-* cores
201        HPCPART\newone       My Task                        Queued       Normal          *-* cores

Job을 제출할 때는 3단계를 거쳐야 합니다. 처음은 Job을 생성하는 단계입니다. 이 단계는 아직 Job을 제출하기 전 단계로 준비하는 단계입니다. 다음 단계는 생성한 Job에 Task를 추가합니다. 마지막으로 Job을 제출하면 됩니다. 다음은 Job을 제출하는 예시입니다.

PS C:\> job new
Created job, ID: 221
PS C:\> job add 221 /taskfile:SingleTask.xml
Task 221.1 added.
PS C:\> job submit 221
Job has been submitted. ID: 222.

앞장에서 만들었던 SingleTask.xml파일을 이용했습니다. 물론 옵션을 통해서 xml에 있는 내용들을 입력하는 것도 가능하나 너무 많은 옵션이 있어 사용이 불편하므로 xml파일을 적극적으로 활용하기를 추천합니다.

4) node

Node 명령은 클러스터의 노드 상태를 확인할 때 사용하는 명령입니다. HPC Cluster의 slurm에서는 sinfo란 명령어를 사용하였습니다. 사용 예시는 다음과 같습니다.

PS C:\> node list
Node Name           State       Max Run Idle Availability    Cost Per Hour
------------------- ----------- --- --- ---- --------------- -------------
MYCOM01  Online      4   4   0    AlwaysOn        1
MYCOM02  Online      4   0   0    AlwaysOn        1
MYCOM08  Unreachable 96  0   96  AlwaysOn        1
MYGPU    Unreachable 8   0   0   AlwaysOn        1
MYWIN    Offline     4   0   0    AlwaysOn        1

Admin Portal

전통적인 리눅스 HPC에서는 터미널 환경에서 사용자가 Job을 제출하도록 하였는데 초보 사용자들은 사용에 장벽이 있어서 최근에는 이를 편하게 하기 위한 웹 포탈이 많이 개발되고 있습니다. HPC Pack도 관리자를 위한 포탈을 제공합니다. 단 이는 관리자들을 위한 것으로 일반 사용자들을 위한 기능은 많이 부족합니다. 또 HPC Pack 자체가 GUI 데스크탑 프로그램이므로 웹 포탈의 필요성이 높지는 않습니다. 단 Portal은 웹 브라우저만 있다면 별도의 설치 프로그램이 필요 없다는 점이 장점입니다.

MS HPC Pack Admin Portal Dashboard
MS HPC Pack Admin Portal Dashboard

대시보드 화면입니다. 노드의 상태나 Job 현황들을 대략적으로 확인할 수 있습니다.

MS HPC Pack Admin Portal Nodes
MS HPC Pack Admin Portal Nodes

노드 화면에서는 노드의 상태 및 간단한 액션들을 할 수 있습니다. Cluster Manager의 Resource Management메뉴와 거의 같습니다.

MS HPC Pack Admin Portal Jobs
MS HPC Pack Admin Portal Jobs

Job 화면에서는 Job 목록과 간단한 액션을 할 수 있습니다. 단 Cluster Manager에서 가능한 Job 제출은 불가능하기 때문에 사용자 포탈로서는 사용할 수 없습니다.

MS HPC Pack Admin Portal Charts
MS HPC Pack Admin Portal Charts

차트 메뉴에서는 다양한 지표를 차트로 나타낼 수 있습니다.

MS HPC Pack Admin Portal Logs
MS HPC Pack Admin Portal Logs

로그 메뉴에서는 클러스터의 로그를 보여줍니다.

요약 및 향후 계획

이렇게 Samsung Cloud Platform 상에서 윈도우용 HPC 클러스터를 위해 MS HPC Pack을 설치하고 작업 제출까지 했습니다. HPC 클러스터는 단일 서버 스펙만을 사용하는 것이 아니라 다양한 서버 스펙을 사용해야 하는데 Samsung Cloud Platform 상에서 Virtual Server, Baremetal Server, GPU Server들을 혼합하여 구성하는 것이 가능하다는 것을 알 수 있습니다.

윈도우 HPC 클러스터가 필요한 분에게 이 가이드가 도움이 되기를 바랍니다.

많은 내용을 담으려고 했음에도 미처 담지 못한 기능들이 많습니다. 아 가이드에서 추가적으로 내용을 보완하려고 합니다. 추가할 작업들은 다음과 같습니다.

  • Active Directory 설치 및 설정
  • HPC Pack을 위한 Secturity Group 설정
  • Remote Database 설정
  • 헤드 노드 이중화(HA, High Availablity)
  • 더 많은 윈도우 HPC 애플리케이션 활용 케이스(예: Excel, VBA 등)
  • 리눅스 계산 노드 추가
  • SOA(Service-oriented architecture) 서비스 설정/WCF 브로커 노드 설정
  • 계산 노드 추가 자동화
  • Node Preparation, Release Task 설정
  • GPGPU 설정

또한 현재는 가이드로써 수동으로 HPC 클러스터를 구성하는 방법을 설명했습니다. 이에 비해 Samsung Cloud Platform의 “HPC Cluster” 서비스는 자동화된 설치를 제공해주어 Baremetal서버 생성 부터 미들웨어 설치까지 일괄 자동화하여 제공을 합니다.

향후 MS의 HPC Pack의 자동화 기능도 고려하고 있습니다. 그렇게 된다면 윈도우 HPC 클러스터 사용자도 좀 더 편안하게 HPC클러스터를 사용할 수 있을 것으로 기대합니다.

참고 문서

[1] Overview of Microsoft HPC Pack 2019, https://learn.microsoft.com/ko-kr/powershell/high-performance-computing/overview?view=hpc19-ps

[2] y-cruncher A Multi-Threaded Pi-Program, http://www.numberworld.org/y-cruncher/

[3] PowerShell, https://learn.microsoft.com/ko-kr/powershell/scripting/overview?view=powershell-7.4