|
20 | 20 | namespace ray { |
21 | 21 | using namespace ::ray::scheduling; |
22 | 22 |
|
| 23 | +NodeResources::NodeResources(const NodeResourceSet &resources) { |
| 24 | + NodeResourceSet resources_adjusted = resources; |
| 25 | + absl::flat_hash_map<std::string, std::string> node_labels; |
| 26 | + if (resources.Has(ResourceID::GPU_Memory())) { |
| 27 | + // if gpu_memory is set, default GPU value is 1 |
| 28 | + if (!resources.Has(ResourceID::GPU())) { |
| 29 | + resources_adjusted.Set(ResourceID::GPU(), 1); |
| 30 | + } |
| 31 | + node_labels["_gpu_memory_per_gpu"] = |
| 32 | + std::to_string(resources.Get(ResourceID::GPU_Memory()).Double() / |
| 33 | + resources_adjusted.Get(ResourceID::GPU()).Double()); |
| 34 | + resources_adjusted.Set(ResourceID::GPU_Memory(), 0); |
| 35 | + } else { |
| 36 | + node_labels["_gpu_memory_per_gpu"] = "0"; |
| 37 | + } |
| 38 | + |
| 39 | + this->total = resources_adjusted; |
| 40 | + this->available = resources_adjusted; |
| 41 | + this->labels = node_labels; |
| 42 | +} |
| 43 | + |
23 | 44 | /// Convert a map of resources to a ResourceRequest data structure. |
24 | 45 | ResourceRequest ResourceMapToResourceRequest( |
25 | 46 | const absl::flat_hash_map<std::string, double> &resource_map, |
@@ -59,8 +80,12 @@ NodeResources ResourceMapToNodeResources( |
59 | 80 | auto node_labels_copy = node_labels; |
60 | 81 |
|
61 | 82 | if (resource_map_total.find("gpu_memory") != resource_map_total.end()) { |
| 83 | + // if gpu_memory is set, default GPU value is 1 |
| 84 | + if (resource_map_total.find("GPU") == resource_map_total.end()) { |
| 85 | + resource_map_total_copy["GPU"] = 1; |
| 86 | + } |
62 | 87 | node_labels_copy["_gpu_memory_per_gpu"] = std::to_string( |
63 | | - resource_map_total.at("gpu_memory") / resource_map_total.at("GPU")); |
| 88 | + resource_map_total.at("gpu_memory") / resource_map_total_copy.at("GPU")); |
64 | 89 | resource_map_total_copy.erase("gpu_memory"); |
65 | 90 | resource_map_available_copy.erase("gpu_memory"); |
66 | 91 | } else { |
@@ -108,6 +133,7 @@ bool NodeResources::IsAvailable(const ResourceRequest &resource_request, |
108 | 133 | } |
109 | 134 | const ResourceSet resource_request_adjusted = |
110 | 135 | this->ConvertRelativeResources(resource_request.GetResourceSet()); |
| 136 | + |
111 | 137 | if (!this->normal_task_resources.IsEmpty()) { |
112 | 138 | auto available_resources = this->available; |
113 | 139 | available_resources -= this->normal_task_resources; |
@@ -159,6 +185,8 @@ const ResourceSet NodeResources::ConvertRelativeResources( |
159 | 185 | num_gpus_request = |
160 | 186 | (resource.Get(ResourceID::GPU_Memory()).Double() / total_gpu_memory_per_gpu) + |
161 | 187 | 1 / static_cast<double>(2 * kResourceUnitScaling); |
| 188 | + } else { |
| 189 | + return resource; |
162 | 190 | } |
163 | 191 | adjusted_resource.Set(ResourceID::GPU(), num_gpus_request); |
164 | 192 | adjusted_resource.Set(ResourceID::GPU_Memory(), 0); |
@@ -208,6 +236,8 @@ const ResourceSet NodeResourceInstances::ConvertRelativeResources( |
208 | 236 | num_gpus_request = |
209 | 237 | (resource.Get(ResourceID::GPU_Memory()).Double() / total_gpu_memory_per_gpu) + |
210 | 238 | 1 / static_cast<double>(2 * kResourceUnitScaling); |
| 239 | + } else { |
| 240 | + return resource; |
211 | 241 | } |
212 | 242 | adjusted_resource.Set(ResourceID::GPU(), num_gpus_request); |
213 | 243 | adjusted_resource.Set(ResourceID::GPU_Memory(), 0); |
|
0 commit comments