Skip to content

kserve: load_model has no pool affinity — the predictor lands on any free GPU node, not the pool it was fitted for #152

Description

@teemow

Problem

With two GPU pools on one cluster (an L4 g6.xlarge pool and an L40S g6e.4xlarge pool), load_model for a 24 GB preset fitted against the L4 pool composed a predictor without any pool or accelerator affinity: the pod was scheduled onto the L40S node, the first GPU to appear. The L4 node never served; the model the person asked to run on the small pool consumed the large pool's card, and the model loaded against the L40S pool waited eight minutes for it to leave. The fit verdict named a pool and an instance type that the placement then ignored.

Proposed solution

The composed LLMInferenceService carries a node affinity for the pool the fit chose: the pool's own label (giantswarm.io/machine-pool=<name>) when the request named a pool or the fit selected one, else the accelerator label (nvidia.com/gpu.product or the pool's accelerator label) the preset's requirements imply. The verdict and the placement then agree; a model never lands on a card another pool was created for.

Acceptance criteria

  • With two pools of different accelerators, a model fitted for the small pool runs on that pool's node (unit test on the composed spec; a serve on an installation).
  • get_model names the pool the model is pinned to.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions