HB 및 HC VM 사용에 대한 모범 사례
개요
H 시리즈 VM( 가상 머신 )은 Azure의 최신 HPC 제품입니다. HB 시리즈 VM은 명시적 유한 요소 분석, 유체 역학 및 날씨 모델링과 같은 높은 메모리 대역폭 요구 사항이 있는 애플리케이션 실행에 최적화된 60코어 AMD EPYC 프로세서를 제공합니다. HC 시리즈 VM에는 44코어 Intel Xeon Skylake 프로세서가 있으며 분자 역학 및 암시적 유한 요소 분석과 같은 집중적인 CPU 계산이 필요한 애플리케이션에 최적화되어 있습니다. HB 및 HC VM은 100Gb/s EDR InfiniBand를 갖추고 있으며 최신 MPI 유형 및 버전을 지원합니다. HPC 애플리케이션 크기 조정 가이드에는 HB 및 HC VM에서 HPC 애플리케이션의 크기를 조정하는 방법에 대한 자세한 정보가 있습니다.
Azure CycleCloud는 새로운 H 시리즈 VM을 기본으로 지원하지만 최상의 환경과 성능을 위해 이 페이지의 지침 및 모범 사례를 따릅니다.
CentOS 7.6 HPC Marketplace 이미지
CentOS 7.6 HPC Marketplace 이미지에는 InfiniBand 인터페이스를 사용하도록 설정하는 모든 드라이버와 /opt에 설치된 모든 일반 MPI 변형의 미리 컴파일된 버전이 포함되어 있습니다. 이미지가 제공하는 내용에 대한 자세한 내용은 이 블로그 게시물을 참조하세요.
클러스터를 만들 때 CentOS 7.6 HPC 이미지를 사용하려면 고급 설정 매개 변수에서 사용자 지정 이미지 상자를 선택하고 값을 OpenLogic:CentOS-HPC:7.6:latest
입력합니다.
이전 H16r VM 시리즈를 지원하고 클러스터 헤드 노드를 동일한 버전의 CentOS로 잠그기 위해 기본 OS 드롭다운의 기본 "Cycle CentOS 7" 이미지는 CentOS 7.4를 배포합니다. 대부분의 VM 시리즈에서는 괜찮지만 HB/HC VM에는 CentOS 7.6 이상 및 다른 Mellanox 드라이버가 필요합니다.
CycleCloud < 7.7.4에서 SElinux 사용 안 함
기본적으로 SElinux는 /root 및 /home만 홈 디렉터리에 유효한 경로로 간주합니다. 이러한 경로 외부에 홈 디렉터리가 있는 사용자는 SElinux가 사용자의 홈 디렉터리에 있는 SSH 키 대문을 사용하지 못하도록 차단합니다. CycleCloud 클러스터에서 사용자 홈 디렉터리 /shared/home에 만들어집니다. CycleCloud 버전이 7.7.4보다 최신이면 /shared/home 경로가 유효한 SElinux homedir 컨텍스트로 자동으로 설정되지만 이전 버전은 이를 지원하지 않습니다. 클러스터의 사용자에 대해 SSH가 제대로 작동하는지 확인하려면 클러스터 템플릿에서 SElinux를 사용하지 않도록 설정해야 합니다.
[[node defaults]]
[[[configuration]]]
cyclecloud.selinux.policy = permissive
Slurm을 사용하여 MPI 작업 실행
HB/HC VM에서 실행되는 MPI 작업은 동일한 VMSS(VM Scaleset)에서 실행되어야 합니다. Slurm을 사용하여 실행되는 MPI 작업에 대한 VM의 적절한 자동 크기 조정 배치를 확인하려면 클러스터 템플릿에서 다음 특성을 설정해야 합니다.
[[nodearray execute]]
Azure.SingleScaleset = true
Azure.MaxScalesetSize = 300
Azure.Overprovision = true
OpenMPI 및 MPICH에서 사용할 pkey 가져오기
일부 MPI 변형에서는 작업을 실행할 때 InfiniBand PKEY를 지정해야 합니다. 다음 Bash 함수를 사용하여 PKEY를 확인할 수 있습니다.
get_ib_pkey()
{
key0=$(cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/0)
key1=$(cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/1)
if [ $(($key0 - $key1)) -gt 0 ]; then
export IB_PKEY=$key0
else
export IB_PKEY=$key1
fi
export UCX_IB_PKEY=$(printf '0x%04x' "$(( $IB_PKEY & 0x0FFF ))")
}