mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
feat: Add GPU CDI support for workspace containers (#332)
* feat: add CDI GPU support for workspace containers * feat: expose GPU CDI settings in bot container UI * feat: move GPU settings into advanced container options * docs: document advanced CDI device configuration
This commit is contained in:
@@ -51,3 +51,71 @@ func TestWithoutWorkspaceImagePreferenceRemovesOnlyImageKey(t *testing.T) {
|
||||
t.Fatalf("expected unrelated workspace metadata to remain, got %#v", workspace)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkspaceGPUMetadataRoundTrip(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
metadata := map[string]any{
|
||||
workspaceMetadataKey: map[string]any{
|
||||
"keep": "value",
|
||||
},
|
||||
}
|
||||
|
||||
updated := withWorkspaceGPUPreference(metadata, WorkspaceGPUConfig{
|
||||
Devices: []string{" nvidia.com/gpu=0 ", "amd.com/gpu=1", "nvidia.com/gpu=0"},
|
||||
})
|
||||
|
||||
gpu, ok := workspaceGPUFromMetadata(updated)
|
||||
if !ok {
|
||||
t.Fatal("expected gpu preference to be present")
|
||||
}
|
||||
if got, want := gpu.Devices, []string{"nvidia.com/gpu=0", "amd.com/gpu=1"}; len(got) != len(want) || got[0] != want[0] || got[1] != want[1] {
|
||||
t.Fatalf("expected normalized gpu devices %v, got %v", want, got)
|
||||
}
|
||||
workspace, ok := updated[workspaceMetadataKey].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatal("expected workspace metadata section")
|
||||
}
|
||||
if workspace["keep"] != "value" {
|
||||
t.Fatalf("expected existing workspace metadata to be preserved, got %#v", workspace)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkspaceGPUExplicitDisableRemainsPresent(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
metadata := withWorkspaceGPUPreference(map[string]any{}, WorkspaceGPUConfig{})
|
||||
|
||||
gpu, ok := workspaceGPUFromMetadata(metadata)
|
||||
if !ok {
|
||||
t.Fatal("expected gpu preference key to remain present")
|
||||
}
|
||||
if len(gpu.Devices) != 0 {
|
||||
t.Fatalf("expected explicit disable with no devices, got %#v", gpu.Devices)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWithoutWorkspaceGPUPreferenceRemovesOnlyGPUKey(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
metadata := map[string]any{
|
||||
workspaceMetadataKey: map[string]any{
|
||||
workspaceGPUMetadataKey: map[string]any{
|
||||
workspaceGPUDevicesKey: []any{"nvidia.com/gpu=all"},
|
||||
},
|
||||
"keep": true,
|
||||
},
|
||||
}
|
||||
|
||||
updated := withoutWorkspaceGPUPreference(metadata)
|
||||
if _, ok := workspaceGPUFromMetadata(updated); ok {
|
||||
t.Fatal("expected gpu preference to be cleared")
|
||||
}
|
||||
workspace, ok := updated[workspaceMetadataKey].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatal("expected workspace metadata section to remain")
|
||||
}
|
||||
if workspace["keep"] != true {
|
||||
t.Fatalf("expected unrelated workspace metadata to remain, got %#v", workspace)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user