Skip to content

Commit 0931678

Browse files
committed
feat(admission): add NvFractions request validation foundation
Signed-off-by: davidLif <davidshani12@gmail.com>
1 parent 79394c6 commit 0931678

9 files changed

Lines changed: 1509 additions & 27 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Added
2+
body: |-
3+
Validate NvFractions GPU memory annotations

pkg/admission/webhook/v1alpha2/gpusharing/gpu_sharing.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,20 @@ package gpusharing
66
import (
77
"fmt"
88

9+
"strconv"
10+
911
v1 "k8s.io/api/core/v1"
1012
"sigs.k8s.io/controller-runtime/pkg/client"
1113

1214
"github.com/kai-scheduler/KAI-scheduler/pkg/binder/common/gpusharingconfigmap"
15+
"github.com/kai-scheduler/KAI-scheduler/pkg/common/constants"
1316
"github.com/kai-scheduler/KAI-scheduler/pkg/common/resources"
1417

1518
"github.com/kai-scheduler/KAI-scheduler/pkg/binder/common"
16-
gpurequesthandler "github.com/kai-scheduler/KAI-scheduler/pkg/binder/plugins/gpusharing/gpu-request"
1719
)
1820

1921
const (
20-
fractionContainerIndex = 0
21-
CdiDeviceNameBase = "k8s.device-plugin.nvidia.com/gpu=%s"
22+
CdiDeviceNameBase = "k8s.device-plugin.nvidia.com/gpu=%s"
2223
)
2324

2425
type GPUSharing struct {
@@ -44,7 +45,7 @@ func (p *GPUSharing) Validate(pod *v1.Pod) error {
4445
pod.Namespace, pod.Name,
4546
)
4647
}
47-
return gpurequesthandler.ValidateGpuRequests(pod)
48+
return resources.ValidateGPUFractionRequest(pod)
4849
}
4950

5051
func (p *GPUSharing) Mutate(pod *v1.Pod) error {
@@ -61,6 +62,11 @@ func (p *GPUSharing) Mutate(pod *v1.Pod) error {
6162
return fmt.Errorf("failed to get fraction container ref: %w", err)
6263
}
6364

65+
err = adjustFractionalMemoryAnnotations(pod, containerRef)
66+
if err != nil {
67+
return err
68+
}
69+
6470
capabilitiesConfigMapName := gpusharingconfigmap.SetGpuCapabilitiesConfigMapName(pod, containerRef)
6571
directEnvVarsMapName, err := gpusharingconfigmap.ExtractDirectEnvVarsConfigMapName(pod, containerRef)
6672
if err != nil {
@@ -73,3 +79,17 @@ func (p *GPUSharing) Mutate(pod *v1.Pod) error {
7379

7480
return nil
7581
}
82+
83+
// adjustFractionalMemoryAnnotations adjusts the old fractional memory annotations to NvFractions format
84+
func adjustFractionalMemoryAnnotations(pod *v1.Pod, containerRef *gpusharingconfigmap.PodContainerRef) error {
85+
gpuMemoryRequestMiB, foundGPUMemory := pod.Annotations[constants.GpuMemory]
86+
if foundGPUMemory {
87+
gpuMemoryRequestMiB, err := strconv.ParseUint(gpuMemoryRequestMiB, 10, 64)
88+
if err != nil {
89+
return fmt.Errorf("failed to parse gpu memory annotation value: %w", err)
90+
}
91+
memoryQuantity := resources.GpuMemoryAnnotationToNvFractionsMemoryRequest(gpuMemoryRequestMiB)
92+
pod.Annotations[resources.CalcGpuFractionAnnotationForContainer(containerRef.Container.Name)] = memoryQuantity.String()
93+
}
94+
return nil
95+
}

0 commit comments

Comments
 (0)