-
Notifications
You must be signed in to change notification settings - Fork 178
Support Nebius InfiniBand clusters #2604
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
An InfiniBand cluster is now created automatically when provisioning 8xH100 or 8xH200 instances using a fleet configuration with `placement: cluster`. Nebius clusters were supported using `dstack` placement groups. Several changes were made to the placement group management logic: - The offer for the master instance of the fleet is passed to `Compute.create_placement_group`, which allows to set different placement group settings based on the offer. Nebius requires different settings for H100 and H200 clusters. - `Compute.is_suitable_placement_group` is introduced to allow choosing an appropriate placement group when creating the master instance and filtering offers for non-master instances based on backend-specific placement group properties. Nebius currently only provides homogeneous clusters, so offers need to be filtered based on the placement group. - The placement group object is passed to `Compute.create_instance` to allow adding the instance to the placement group using its backend-specific properties, such as cluster ID on Nebius. - The placement group name is generated at master instance provisioning time, not at fleet creation time. This allows to have different placement group names for the same fleet and avoid name conflicts, since multiple placement groups can be created while `dstack` is trying different offers for the master instance. - Placement groups that were created during master instance provisioning but didn't end up being used are now cleaned up. Nebius quotas limit the number of clusters, so unused clusters need to be cleaned up quickly, without waiting for fleet deletion. - If all offers failed for the master instance, `dstack` will no longer attempt to provision other fleet instances to avoid them being provisioned without a placement group or without connectivity at all. - Placement group creation errors are now handled gracefully, so that `dstack` can move on to other master instance offers, which may lead to creating different placement groups. For example, if `dstack` cannot create a cluster in one Nebius region because of a missing quota, it may attempt to create a cluster in another region.
Will mark as ready for review after more testing and adding unit tests |
NCCL tests
|
r4victor
reviewed
May 7, 2025
r4victor
approved these changes
May 7, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
An InfiniBand cluster is now created automatically when provisioning 8xH100 or 8xH200 instances using a fleet configuration with
placement: cluster
.Nebius clusters were supported using
dstack
placement groups. Several changes were made to the placement group management logic:
Compute.create_placement_group
, which allows to set different placement group settings based on the offer. Nebius requires different settings for H100 and H200 clusters.Compute.is_suitable_placement_group
is introduced to allow choosing an appropriate placement group when creating the master instance and filtering offers for non-master instances based on backend-specific placement group properties. Nebius currently only provides homogeneous clusters, so offers need to be filtered based on the placement group.Compute.create_instance
to allow adding the instance to the placement group using its backend-specific properties, such as cluster ID on Nebius.dstack
is trying different offers for the master instance.dstack
will no longer attempt to provision other fleet instances to avoid them being provisioned without a placement group or without connectivity at all.dstack
can move on to other master instance offers, which may lead to creating different placement groups. For example, ifdstack
cannot create a cluster in one Nebius region because of a missing quota, it may attempt to create a cluster in another region.#2590