잡 스펙의 `numa` 블록
잡 스펙의 numa 블록
numa 블록은 노드의 NUMA 하드웨어 토폴로지를 고려해 태스크에 CPU 코어를 어떻게 할당할지 Nomad에 구성하는 데 사용해요. 메모리 지연에 민감한 워크로드는 같은 NUMA 노드의 CPU 코어에 고정되면 훨씬 더 좋은 성능을 낼 수 있어요.
출처: 문서
본문
| 배치 | job -> group -> task -> resources -> **numa** |
|---|
NUMA 인지 스케줄링은 현재 Linux로 제한돼요.
Enterprise
이 기능은 Nomad Enterprise(새 탭에서 열림)가 필요해요.
job "example" {
group "group" {
task "task" {
resources {
cores = 8
numa {
affinity = "require"
}
}
}
}
}
위 예시에서 태스크는 Nomad가 CPU 코어 8개를 예약하도록 요청하고, 모두가 같은 하드웨어 NUMA 노드에 함께 배치되어야 해요. Nomad 스케줄러는 호환되는 구성에서 충분한 미사용 CPU 코어를 가진 Nomad 노드에 태스크가 배치되도록 보장해요.
numa 블록을 구성하려면 태스크가 cores 매개변수로 CPU 리소스를 지정해야 해요.
매개변수 (Parameters)
-
affinity(string: "none")- 태스크에 할당할 CPU 코어를 선택할 때 Nomad가 사용할 전략. 가능한 값은"none","prefer","require"예요.none- Nomad는 어떤 전략으로든 CPU 코어를 자유롭게 할당할 수 있어요. Nomad는 이 자유를 사용해 NUMA 노드당 코어 가용성의 단편화를 최소화하는 방식으로 코어를 할당해요. 선택한 코어를 사용 가능한 코어 수가 가장 적은 NUMA 노드에 bin-pack 하여 이렇게 해요.prefer- Nomad는 노드에서 코어 사이의 총 거리를 최소화하는 CPU 코어 집합을 선택하지만, 그 CPU 코어 선택이 단일 NUMA 노드에서 오도록 제한하지는 않아요.require- Nomad는 엄격히 같은 하드웨어 NUMA 노드에 함께 배치된 CPU 코어 집합을 선택해요. 호환되는 구성에서 충분한 수의 사용 가능한 코어를 가진 Nomad 노드가 없으면 리소스 소진으로 태스크 배치가 실패해요.
-
devices(list<string>: nil)- 할당된 CPU 코어와 함께 같은 NUMA 노드에 배치되어야 하는 장치. resources 블록에 나열된 장치의 부분집합이어야 해요.affinity가require로 설정된 경우에만 사용할 수 있어요.
참고
require affinity 옵션은 선택된 코어가 연관된 NUMA 노드에 따라 사용 가능한 CPU 코어의 단편화를 일으켜요. 메모리 지연에 매우 민감한 것으로 알려진 워크로드에 사용하세요. 모든 잡이 require affinity 옵션을 사용하는 클러스터는 사용 가능한 리소스를 효율적으로 사용할 수 없을 거예요.
예시 (Examples)
이 예시는 1080ti GPU를 할당하고 그것이 태스크에 예약된 4개 CPU 코어와 같은 NUMA 노드에 있도록 보장해요.
resources {
cores = 4
memory = 2048
device "nvidia/gpu/1080ti" {
count = 1
}
numa {
affinity = "require"
devices = [
"nvidia/gpu/1080ti"
]
}
}