@@ -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,35 +75,63 @@ func (rayJobObject *RayJobYamlObject) GenerateRayJobApplyConfig() *rayv1ac.RayJo
70
75
}
71
76
72
77
// generateRequestResources returns a corev1.ResourceList with the given CPU, memory, ephemeral storage, and GPU values for only resource requests
73
- func generateRequestResources (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 generateRequestResources (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
88
110
}
89
111
90
112
// generateLimitResources returns a corev1.ResourceList with the given memory, ephemeral storage, and GPU values for only resource limits
91
- func generateLimitResources (memory , ephemeralStorage , gpu string ) corev1.ResourceList {
92
- resources := corev1.ResourceList {
93
- corev1 .ResourceMemory : resource .MustParse (memory ),
113
+ func generateLimitResources (memory , ephemeralStorage , gpu * string ) corev1.ResourceList {
114
+ resources := corev1.ResourceList {}
115
+
116
+ if memory != nil && * memory != "" {
117
+ memoryResource := resource .MustParse (* memory )
118
+ if ! memoryResource .IsZero () {
119
+ resources [corev1 .ResourceMemory ] = memoryResource
120
+ }
94
121
}
95
- if ephemeralStorage != "" {
96
- resources [corev1 .ResourceEphemeralStorage ] = resource .MustParse (ephemeralStorage )
122
+
123
+ if ephemeralStorage != nil && * ephemeralStorage != "" {
124
+ ephemeralStorageResource := resource .MustParse (* ephemeralStorage )
125
+ if ! ephemeralStorageResource .IsZero () {
126
+ resources [corev1 .ResourceEphemeralStorage ] = ephemeralStorageResource
127
+ }
97
128
}
98
129
99
- gpuResource := resource .MustParse (gpu )
100
- if ! gpuResource .IsZero () {
101
- resources [corev1 .ResourceName (util .ResourceNvidiaGPU )] = gpuResource
130
+ if gpu != nil && * gpu != "" {
131
+ gpuResource := resource .MustParse (* gpu )
132
+ if ! gpuResource .IsZero () {
133
+ resources [corev1 .ResourceName (util .ResourceNvidiaGPU )] = gpuResource
134
+ }
102
135
}
103
136
104
137
return resources
@@ -115,23 +148,28 @@ func (rayClusterSpecObject *RayClusterSpecObject) generateRayClusterSpec() *rayv
115
148
"metrics-export-port" : "8080" ,
116
149
}
117
150
maps .Copy (headRayStartParams , rayClusterSpecObject .HeadRayStartParams )
118
- maps .Copy (workerRayStartParams , rayClusterSpecObject .WorkerRayStartParams )
151
+ maps .Copy (workerRayStartParams , rayClusterSpecObject .WorkerGroups [ 0 ]. WorkerRayStartParams )
119
152
120
153
headRequestResources := generateRequestResources (rayClusterSpecObject .HeadCPU , rayClusterSpecObject .HeadMemory , rayClusterSpecObject .HeadEphemeralStorage , rayClusterSpecObject .HeadGPU )
121
154
headLimitResources := generateLimitResources (rayClusterSpecObject .HeadMemory , rayClusterSpecObject .HeadEphemeralStorage , rayClusterSpecObject .HeadGPU )
122
- workerRequestResources := generateRequestResources (rayClusterSpecObject .WorkerCPU , rayClusterSpecObject .WorkerMemory , rayClusterSpecObject .WorkerEphemeralStorage , rayClusterSpecObject .WorkerGPU )
123
- workerLimitResources := generateLimitResources (rayClusterSpecObject .WorkerMemory , rayClusterSpecObject .WorkerEphemeralStorage , rayClusterSpecObject .WorkerGPU )
155
+ workerRequestResources := generateRequestResources (rayClusterSpecObject .WorkerGroups [0 ].WorkerCPU , rayClusterSpecObject .WorkerGroups [0 ].WorkerMemory , rayClusterSpecObject .WorkerGroups [0 ].WorkerEphemeralStorage , rayClusterSpecObject .WorkerGroups [0 ].WorkerGPU )
156
+ workerLimitResources := generateLimitResources (rayClusterSpecObject .WorkerGroups [0 ].WorkerMemory , rayClusterSpecObject .WorkerGroups [0 ].WorkerEphemeralStorage , rayClusterSpecObject .WorkerGroups [0 ].WorkerGPU )
157
+
158
+ workerGroupName := "default-group"
159
+ if rayClusterSpecObject .WorkerGroups [0 ].Name != nil {
160
+ workerGroupName = * rayClusterSpecObject .WorkerGroups [0 ].Name
161
+ }
124
162
125
163
rayClusterSpec := rayv1ac .RayClusterSpec ().
126
- WithRayVersion (rayClusterSpecObject .RayVersion ).
164
+ WithRayVersion (* rayClusterSpecObject .RayVersion ).
127
165
WithHeadGroupSpec (rayv1ac .HeadGroupSpec ().
128
166
WithRayStartParams (headRayStartParams ).
129
167
WithTemplate (corev1ac .PodTemplateSpec ().
130
168
WithSpec (corev1ac .PodSpec ().
131
169
WithNodeSelector (rayClusterSpecObject .HeadNodeSelectors ).
132
170
WithContainers (corev1ac .Container ().
133
171
WithName ("ray-head" ).
134
- WithImage (rayClusterSpecObject .Image ).
172
+ WithImage (* rayClusterSpecObject .Image ).
135
173
WithResources (corev1ac .ResourceRequirements ().
136
174
WithRequests (headRequestResources ).
137
175
WithLimits (headLimitResources )).
@@ -140,14 +178,14 @@ func (rayClusterSpecObject *RayClusterSpecObject) generateRayClusterSpec() *rayv
140
178
corev1ac .ContainerPort ().WithContainerPort (10001 ).WithName ("client" )))))).
141
179
WithWorkerGroupSpecs (rayv1ac .WorkerGroupSpec ().
142
180
WithRayStartParams (workerRayStartParams ).
143
- WithGroupName ("default-group" ).
144
- WithReplicas (rayClusterSpecObject .WorkerReplicas ).
181
+ WithGroupName (workerGroupName ).
182
+ WithReplicas (* rayClusterSpecObject . WorkerGroups [ 0 ] .WorkerReplicas ).
145
183
WithTemplate (corev1ac .PodTemplateSpec ().
146
184
WithSpec (corev1ac .PodSpec ().
147
- WithNodeSelector (rayClusterSpecObject .WorkerNodeSelectors ).
185
+ WithNodeSelector (rayClusterSpecObject .WorkerGroups [ 0 ]. WorkerNodeSelectors ).
148
186
WithContainers (corev1ac .Container ().
149
187
WithName ("ray-worker" ).
150
- WithImage (rayClusterSpecObject .Image ).
188
+ WithImage (* rayClusterSpecObject .Image ).
151
189
WithResources (corev1ac .ResourceRequirements ().
152
190
WithRequests (workerRequestResources ).
153
191
WithLimits (workerLimitResources ))))))
0 commit comments