diff --git a/api/internal/scheduler/schedulers/aiScheduler.go b/api/internal/scheduler/schedulers/aiScheduler.go index b88fa481..923a290c 100644 --- a/api/internal/scheduler/schedulers/aiScheduler.go +++ b/api/internal/scheduler/schedulers/aiScheduler.go @@ -74,6 +74,9 @@ func (as *AiScheduler) PickOptimalStrategy() (strategy.Strategy, error) { case strategy.RESOURCES_PRICING: strategy := strategy.NewPricingStrategy(¶m.ResourcePricingParams{Params: params, Replicas: 1}) return strategy, nil + case strategy.DYNAMIC_RESOURCES: + strategy := strategy.NewDynamicResourcesStrategy(resources, as.option) + return strategy, nil } return nil, errors.New("no strategy has been chosen") diff --git a/api/internal/scheduler/schedulers/option/aiOption.go b/api/internal/scheduler/schedulers/option/aiOption.go index 9024d907..b30a372c 100644 --- a/api/internal/scheduler/schedulers/option/aiOption.go +++ b/api/internal/scheduler/schedulers/option/aiOption.go @@ -29,3 +29,7 @@ type AiOption struct { Image string Model interface{} } + +func (a AiOption) GetOptionType() string { + return AI +} diff --git a/api/internal/scheduler/schedulers/option/option.go b/api/internal/scheduler/schedulers/option/option.go index e7c5c218..f7c9eef1 100644 --- a/api/internal/scheduler/schedulers/option/option.go +++ b/api/internal/scheduler/schedulers/option/option.go @@ -1,5 +1,11 @@ package option -type Option struct { - Name string +const ( + AI = "ai" + CLOUD = "cloud" + HPC = "hpc" +) + +type Option interface { + GetOptionType() string } diff --git a/api/internal/scheduler/strategy/dynamicResources.go b/api/internal/scheduler/strategy/dynamicResources.go index 4bb4a83e..7ad0e9d9 100644 --- a/api/internal/scheduler/strategy/dynamicResources.go +++ b/api/internal/scheduler/strategy/dynamicResources.go @@ -1,8 +1,30 @@ package strategy +import ( + "errors" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" + "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/service/collector" +) + type DynamicResourcesStrategy struct { + replicas int32 + resources []*collector.ResourceStats + opt option.Option +} + +func NewDynamicResourcesStrategy(resources []*collector.ResourceStats, opt option.Option) *DynamicResourcesStrategy { + return &DynamicResourcesStrategy{resources: resources, opt: opt} } func (ps *DynamicResourcesStrategy) Schedule() ([]*AssignedCluster, error) { + if ps.replicas < 1 { + return nil, errors.New("replicas must be greater than 0") + } + + switch ps.opt.GetOptionType() { + case option.AI: + _ = (interface{})(ps.opt).(*option.AiOption) + + } return nil, nil }