Browse Source

#2701

find available specs
tags/v1.22.9.1^2^2
chenyifan01 3 years ago
parent
commit
6366003ab1
4 changed files with 97 additions and 0 deletions
  1. +4
    -0
      models/cloudbrain.go
  2. +60
    -0
      models/resource_specification.go
  3. +8
    -0
      routers/repo/cloudbrain.go
  4. +25
    -0
      services/cloudbrain/resource/resource_specification.go

+ 4
- 0
models/cloudbrain.go View File

@@ -119,6 +119,10 @@ const (
//AI center
AICenterOfCloudBrainOne = "OpenIOne"
AICenterOfCloudBrainTwo = "OpenITwo"

//ComputeResource
GPU = "GPU"
NPU = "NPU"
)

type Cloudbrain struct {


+ 60
- 0
models/resource_specification.go View File

@@ -141,6 +141,37 @@ func (r ResourceSpecAndQueue) ConvertToRes() *ResourceSpecAndQueueRes {
}
}

type FindSpecsOptions struct {
JobType JobType
ComputeResource string
Cluster string
AiCenterCode string
}

type Specification struct {
ID int64
SourceSpecId string
AccCardsNum int
AccCardType string
CpuCores int
MemGiB float32
GPUMemGiB float32
ShareMemGiB float32
ComputeResource string
UnitPrice int
QueueId int64
QueueCode string
Cluster string
AiCenterCode string
AiCenterName string
IsExclusive bool
ExclusiveOrg string
}

func (Specification) TableName() string {
return "resource_specification"
}

func InsertResourceSpecification(r ResourceSpecification) (int64, error) {
return x.Insert(&r)
}
@@ -283,3 +314,32 @@ func SyncGrampusSpecs(updateList []ResourceSpecification, insertList []ResourceS

return sess.Commit()
}

func FindAvailableSpecs(opts FindSpecsOptions) ([]Specification, error) {
var cond = builder.NewCond()
if opts.JobType != "" {
cond = cond.And(builder.Eq{"resource_scene.job_type": opts.JobType})
}
if opts.ComputeResource != "" {
cond = cond.And(builder.Eq{"resource_queue.compute_resource": opts.ComputeResource})
}
if opts.ComputeResource != "" {
cond = cond.And(builder.Eq{"resource_queue.cluster": opts.Cluster})
}
if opts.AiCenterCode != "" {
cond = cond.And(builder.Eq{"resource_queue.ai_center_code": opts.AiCenterCode})
}
cond = cond.And(builder.Or(builder.Eq{"resource_scene.delete_time": 0}, builder.IsNull{"resource_scene.delete_time"}))

r := make([]Specification, 0)
err := x.Where(cond).
Join("INNER", "resource_scene_spec", "resource_scene_spec.spec_id = resource_specification.id").
Join("INNER", "resource_scene", "resource_scene_spec.scene_id = resource_scene.id").
Join("INNER", "resource_queue", "resource_queue.id = resource_specification.queue_id").
OrderBy("resource_queue.compute_resource asc,resource_queue.acc_card_type asc,resource_specification.acc_cards_num asc").
Unscoped().Find(&r)
if err != nil {
return nil, err
}
return r, nil
}

+ 8
- 0
routers/repo/cloudbrain.go View File

@@ -2,6 +2,7 @@ package repo

import (
"bufio"
"code.gitea.io/gitea/services/cloudbrain/resource"
"encoding/json"
"errors"
"fmt"
@@ -166,6 +167,13 @@ func cloudBrainNewDataPrepare(ctx *context.Context) error {
if cloudbrain.InferenceResourceSpecs != nil {
ctx.Data["inference_resource_specs"] = cloudbrain.InferenceResourceSpecs.ResourceSpec
}
specs, _ := resource.FindAvailableSpecs(ctx.User.ID, models.FindSpecsOptions{
JobType: models.JobTypeDebug,
ComputeResource: models.GPU,
Cluster: models.OpenICluster,
AiCenterCode: models.AICenterOfCloudBrainOne,
})
ctx.Data["Specs"] = specs

if cloudbrain.SpecialPools != nil {
var debugGpuTypes []*models.GpuInfo


+ 25
- 0
services/cloudbrain/resource/resource_specification.go View File

@@ -184,3 +184,28 @@ func AddSpecOperateLog(doerId int64, operateType string, newValue, oldValue *mod
Comment: comment,
})
}

func FindAvailableSpecs(userId int64, opts models.FindSpecsOptions) ([]models.Specification, error) {
r, err := models.FindAvailableSpecs(opts)
if err != nil {
log.Error("FindAvailableSpecs error.%v", err)
return nil, err
}
specs := make([]models.Specification, 0, len(r))
//filter exclusive spec
for i := 0; i < len(r); i++ {
spec := r[i]
if !spec.IsExclusive {
specs = append(specs, spec)
continue
}
orgs := strings.Split(spec.ExclusiveOrg, ";")
for _, org := range orgs {
isMember, _ := models.IsOrganizationMemberByOrgName(org, userId)
if isMember {
specs = append(specs, spec)
}
}
}
return specs, err
}

Loading…
Cancel
Save