@@ -17,29 +17,34 @@ import (
17
17
)
18
18
19
19
type RayClusterSpecObject struct {
20
- HeadRayStartParams map [string ]string
21
- WorkerRayStartParams map [string ]string
22
- HeadNodeSelectors map [string ]string
23
- WorkerNodeSelectors map [string ]string
24
- RayVersion string
25
- Image string
26
- HeadCPU string
27
- HeadGPU string
28
- HeadMemory string
29
- HeadEphemeralStorage string
30
- WorkerCPU string
31
- WorkerGPU string
32
- WorkerMemory string
33
- WorkerEphemeralStorage string
34
- WorkerReplicas int32
20
+ Context * string `yaml:"context,omitempty"`
21
+ Namespace * string `yaml:"namespace,omitempty"`
22
+ Name * string `yaml:"name,omitempty"`
23
+ Labels map [string ]string `yaml:"labels,omitempty"`
24
+ Annotations map [string ]string `yaml:"annotations,omitempty"`
25
+
26
+ RayVersion * string `yaml:"ray-version,omitempty"`
27
+ Image * string `yaml:"image,omitempty"`
28
+
29
+ HeadCPU * string `yaml:"head-cpu,omitempty"`
30
+ HeadGPU * string `yaml:"head-gpu,omitempty"`
31
+ HeadMemory * string `yaml:"head-memory,omitempty"`
32
+ HeadEphemeralStorage * string `yaml:"head-ephemeral-storage,omitempty"`
33
+ HeadRayStartParams map [string ]string `yaml:"head-ray-start-params,omitempty"`
34
+ HeadNodeSelectors map [string ]string `yaml:"head-node-selectors,omitempty"`
35
+
36
+ WorkerGroups []WorkerGroupConfig `yaml:"worker-groups,omitempty"`
35
37
}
36
38
37
- type RayClusterYamlObject struct {
38
- ClusterName string
39
- Namespace string
40
- Labels map [string ]string
41
- Annotations map [string ]string
42
- RayClusterSpecObject
39
+ type WorkerGroupConfig struct {
40
+ Name * string `yaml:"name,omitempty"`
41
+ WorkerCPU * string `yaml:"worker-cpu,omitempty"`
42
+ WorkerGPU * string `yaml:"worker-gpu,omitempty"`
43
+ WorkerMemory * string `yaml:"worker-memory,omitempty"`
44
+ WorkerEphemeralStorage * string `yaml:"worker-ephemeral-storage,omitempty"`
45
+ WorkerReplicas * int32 `yaml:"worker-replicas,omitempty"`
46
+ WorkerRayStartParams map [string ]string `yaml:"worker-ray-start-params,omitempty"`
47
+ WorkerNodeSelectors map [string ]string `yaml:"worker-node-selectors,omitempty"`
43
48
}
44
49
45
50
type RayJobYamlObject struct {
@@ -50,11 +55,11 @@ type RayJobYamlObject struct {
50
55
RayClusterSpecObject
51
56
}
52
57
53
- func (rayClusterObject * RayClusterYamlObject ) GenerateRayClusterApplyConfig () * rayv1ac.RayClusterApplyConfiguration {
54
- rayClusterApplyConfig := rayv1ac .RayCluster (rayClusterObject . ClusterName , rayClusterObject .Namespace ).
55
- WithLabels (rayClusterObject .Labels ).
56
- WithAnnotations (rayClusterObject .Annotations ).
57
- WithSpec (rayClusterObject .generateRayClusterSpec ())
58
+ func (rayClusterSpecObject * RayClusterSpecObject ) GenerateRayClusterApplyConfig () * rayv1ac.RayClusterApplyConfiguration {
59
+ rayClusterApplyConfig := rayv1ac .RayCluster (* rayClusterSpecObject . Name , * rayClusterSpecObject .Namespace ).
60
+ WithLabels (rayClusterSpecObject .Labels ).
61
+ WithAnnotations (rayClusterSpecObject .Annotations ).
62
+ WithSpec (rayClusterSpecObject .generateRayClusterSpec ())
58
63
59
64
return rayClusterApplyConfig
60
65
}
@@ -70,18 +75,35 @@ func (rayJobObject *RayJobYamlObject) GenerateRayJobApplyConfig() *rayv1ac.RayJo
70
75
}
71
76
72
77
// generateResources returns a corev1.ResourceList with the given CPU, memory, ephemeral storage, and GPU values for both requests and limits
73
- func generateResources (cpu , memory , ephemeralStorage , gpu string ) corev1.ResourceList {
74
- resources := corev1.ResourceList {
75
- corev1 .ResourceCPU : resource .MustParse (cpu ),
76
- corev1 .ResourceMemory : resource .MustParse (memory ),
78
+ func generateResources (cpu , memory , ephemeralStorage , gpu * string ) corev1.ResourceList {
79
+ resources := corev1.ResourceList {}
80
+
81
+ if cpu != nil && * cpu != "" {
82
+ cpuResource := resource .MustParse (* cpu )
83
+ if ! cpuResource .IsZero () {
84
+ resources [corev1 .ResourceCPU ] = cpuResource
85
+ }
86
+ }
87
+
88
+ if memory != nil && * memory != "" {
89
+ memoryResource := resource .MustParse (* memory )
90
+ if ! memoryResource .IsZero () {
91
+ resources [corev1 .ResourceMemory ] = memoryResource
92
+ }
77
93
}
78
- if ephemeralStorage != "" {
79
- resources [corev1 .ResourceEphemeralStorage ] = resource .MustParse (ephemeralStorage )
94
+
95
+ if ephemeralStorage != nil && * ephemeralStorage != "" {
96
+ ephemeralStorageResource := resource .MustParse (* ephemeralStorage )
97
+ if ! ephemeralStorageResource .IsZero () {
98
+ resources [corev1 .ResourceEphemeralStorage ] = ephemeralStorageResource
99
+ }
80
100
}
81
101
82
- gpuResource := resource .MustParse (gpu )
83
- if ! gpuResource .IsZero () {
84
- resources [corev1 .ResourceName (util .ResourceNvidiaGPU )] = gpuResource
102
+ if gpu != nil && * gpu != "" {
103
+ gpuResource := resource .MustParse (* gpu )
104
+ if ! gpuResource .IsZero () {
105
+ resources [corev1 .ResourceName (util .ResourceNvidiaGPU )] = gpuResource
106
+ }
85
107
}
86
108
87
109
return resources
@@ -98,21 +120,26 @@ func (rayClusterSpecObject *RayClusterSpecObject) generateRayClusterSpec() *rayv
98
120
"metrics-export-port" : "8080" ,
99
121
}
100
122
maps .Copy (headRayStartParams , rayClusterSpecObject .HeadRayStartParams )
101
- maps .Copy (workerRayStartParams , rayClusterSpecObject .WorkerRayStartParams )
123
+ maps .Copy (workerRayStartParams , rayClusterSpecObject .WorkerGroups [ 0 ]. WorkerRayStartParams )
102
124
103
125
headResources := generateResources (rayClusterSpecObject .HeadCPU , rayClusterSpecObject .HeadMemory , rayClusterSpecObject .HeadEphemeralStorage , rayClusterSpecObject .HeadGPU )
104
- workerResources := generateResources (rayClusterSpecObject .WorkerCPU , rayClusterSpecObject .WorkerMemory , rayClusterSpecObject .WorkerEphemeralStorage , rayClusterSpecObject .WorkerGPU )
126
+ workerResources := generateResources (rayClusterSpecObject .WorkerGroups [0 ].WorkerCPU , rayClusterSpecObject .WorkerGroups [0 ].WorkerMemory , rayClusterSpecObject .WorkerGroups [0 ].WorkerEphemeralStorage , rayClusterSpecObject .WorkerGroups [0 ].WorkerGPU )
127
+
128
+ workerGroupName := "default-group"
129
+ if rayClusterSpecObject .WorkerGroups [0 ].Name != nil {
130
+ workerGroupName = * rayClusterSpecObject .WorkerGroups [0 ].Name
131
+ }
105
132
106
133
rayClusterSpec := rayv1ac .RayClusterSpec ().
107
- WithRayVersion (rayClusterSpecObject .RayVersion ).
134
+ WithRayVersion (* rayClusterSpecObject .RayVersion ).
108
135
WithHeadGroupSpec (rayv1ac .HeadGroupSpec ().
109
136
WithRayStartParams (headRayStartParams ).
110
137
WithTemplate (corev1ac .PodTemplateSpec ().
111
138
WithSpec (corev1ac .PodSpec ().
112
139
WithNodeSelector (rayClusterSpecObject .HeadNodeSelectors ).
113
140
WithContainers (corev1ac .Container ().
114
141
WithName ("ray-head" ).
115
- WithImage (rayClusterSpecObject .Image ).
142
+ WithImage (* rayClusterSpecObject .Image ).
116
143
WithResources (corev1ac .ResourceRequirements ().
117
144
WithRequests (headResources ).
118
145
WithLimits (headResources )).
@@ -121,14 +148,14 @@ func (rayClusterSpecObject *RayClusterSpecObject) generateRayClusterSpec() *rayv
121
148
corev1ac .ContainerPort ().WithContainerPort (10001 ).WithName ("client" )))))).
122
149
WithWorkerGroupSpecs (rayv1ac .WorkerGroupSpec ().
123
150
WithRayStartParams (workerRayStartParams ).
124
- WithGroupName ("default-group" ).
125
- WithReplicas (rayClusterSpecObject .WorkerReplicas ).
151
+ WithGroupName (workerGroupName ).
152
+ WithReplicas (* rayClusterSpecObject . WorkerGroups [ 0 ] .WorkerReplicas ).
126
153
WithTemplate (corev1ac .PodTemplateSpec ().
127
154
WithSpec (corev1ac .PodSpec ().
128
- WithNodeSelector (rayClusterSpecObject .WorkerNodeSelectors ).
155
+ WithNodeSelector (rayClusterSpecObject .WorkerGroups [ 0 ]. WorkerNodeSelectors ).
129
156
WithContainers (corev1ac .Container ().
130
157
WithName ("ray-worker" ).
131
- WithImage (rayClusterSpecObject .Image ).
158
+ WithImage (* rayClusterSpecObject .Image ).
132
159
WithResources (corev1ac .ResourceRequirements ().
133
160
WithRequests (workerResources ).
134
161
WithLimits (workerResources ))))))
0 commit comments