GPU 등의PICe을 VM 에 passthrough 하거나, vGPU 를 사용할때에 가이드 하는 문서가 있는데, 그중에서도 아래 문서를 참고하는 편입니다.

 

Using GPUs with Virtual Machines on vSphere – Part 2: VMDirectPath I/O – Virtualize Applications (vmware.com)

 

이중 Virtual Machine Setup 항목에 보면 Adjusting the Memory Mapped I/O Settings for the VM 내용이 있는데, 간단히 요약하면 아래의 추가적인 설정이 필요하다는 것입니다.

 

pciPassthru.use64bitMMIO=”TRUE”

pciPassthru.64bitMMIOSizeGB=<n>

 

위의 항목은 TRUE 로 하면 간단한데 아래의 <n> 부분이 문제입니다. 그럼 <n> 항목엔 얼마나 들어가야 하는것인가..

위 문서의 경우 V100 GPU 를 예로 들어서 해놨습니다.

 

We calculate the value of the “64bitMMIOSizeGB” parameter using a straightforward approach. Count the number of high-end PCI GPU devices that you intend to pass into this VM. This can be one or more GPUs. Multiply that number by 16 and round it up to the next power of two.

For example, to use passthrough mode with two GPU devices in one VM, the value would be:

2 * 16 = 32, rounded up to the next power of two to give 64.

 

….

이게 무슨 말이야 싶습니다. 우리가 알고 싶은건 계산공식이 아니라 그래서 얼마로 해야되는데? 이게 아니겠습니까.

아래만 기억하세요. 

  1. <n> 은 VM 에 할당한 GPU 의 메모리의 2배 보다 같거나 커야한다.
  2. <n> 은 반드시 2의 n승 이어야 한다. (power of two)  2,4,8,16,32,64,128,256,512…..

예를 들어보겠습니다.

NVIDIA v100 16GB 한장을 VM 에 passthrough 한다고 가정하겠습니다.

  • 1번 조건에 의하면 <n> 은 16×2 보다 같거야 커야 합니다. 16×2 는 32 입니다.
  • 32는 2의 5승 입니다.  따라서 2번 조건을 만족함으로 <n> 은 32 가 됩니다.

 

NVIDA V100 16GB 두장을 에 passthrough 한다고 가정하겠습니다. 

  • 1번 조건의 의하면 <n> 은 16 x 2(장) x 2 보다 같거나 커야합니다. 16x2x2 는 64 입니다.
  • 64 는 2의 6승 입니다. 따라서 2번 조건을 만족함으로 <n> 은 64 가 됩니다

 

별거 아닌거 같죠? 그럼 이렇게 생각하실 수 있습니다. 별거 아닌데 뭘 이런걸 따로 쓰지? 라고 생각하실 수 있습니다.

 

자 그럼 NVIDIA 의 A100 카드를 들고 오겠습니다. A100 카드는 메모리가 40GB / 80GB 인 모델이 있습니다. ( 더 있다면 알려주십시요)

 

A100 40GB 1장을 passthrough 한다고 가정하겠습니다.

  • 1번 조건에 의하면 <n> 은 40 x 2 보다 같거나 커야 합니다. 40 x 2 는 80 입니다.

 

그럼 80 으로 적음 되겠네? 안됩니다. 2번 조건을 만족하지 않기 때문이죠..

  • 80보다 같거나 큰 2의 n승은? 2의 7승인 128 입니다. 따라서 <n> 은 128 이 되어야 합니다. 80 이 아니고요.

 

A100 80GB 1장을 passthrough 한다고 가정하겠습니다.

  • 1번 조건에 의하면 <n> 은 80 x 2 보다 같거나 커야 합니다. 40 x 2 는 160 입니다.
  • 2번 조건에 의하면 <n> 은 160 보다 같거나 큰 2의 n승 이여야 합니다. 160 보다 큰 2의 n승은 2의 8승인 256 입니다. 따라서 <n> 은 256 이 되어야 합니다.

 

A100 GPU 의 메모리가 2의 n승이 아닌 단위기 때문에, 계산을 좀 해보셔야 합니다. 

 

그럼 또 하나 질문이 있을 수 있죠?

  • A100 80GB 1장을 쓴다 했을 때 256 이상을 할당하면 우째되냐? 예를 들어 512 등, 1024 등의 배수를 넣얻 어도 되냐?
  • 더 높은 값을 넣었을 때 임팩트가 뭐냐?

 

64bitMMIOSizeGB 값은 VM power on 시에 BAR (Base address register) 의 값을 예약하기 위한 용도입니다.이 값의 맥시멈은 아래와 같습니다.

  • VM Memory Size + NVDIMM size (사용한다면) + 12GB (possible hypertransport hole) + specific 64bitMMIO 이 VM 의 Virtual Hardware 버전에 따른 메모리 리빗보다 작아야 한다.

 

Virtual Hardware version 18 의 경우 VM 에 할당할 수 있는 최대 메모리는 24TB 입니다.

만약 VM 의 메모리에 22TB 를 할당한다면, 64bitMMIO 로 적을 수 있는 <n> 의 크기는 대략 2TB 정도가 된다는 이야기 입니다. nvdimm 등이 있다면 좀 더 빼야하고요. 

 

반대로 VM 의 메모리가 256GB 다 라고 하면, 64bitMMIO 는 대충 23TB 로 적어도 무방하다는 것이지요 (실제로는 2 의 n 승이여야 겠지만요)

 

GPU 를 사용하시는 경우 참고 부탁드립니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다