Browse Source

新增获取模型列表等接口

gitlink
JeshuaRen 1 year ago
parent
commit
657dec1d0b
3 changed files with 153 additions and 30 deletions
  1. +145
    -0
      sdks/scheduler/modeljob.go
  2. +8
    -4
      sdks/scheduler/models.go
  3. +0
    -26
      sdks/scheduler/response.go

+ 145
- 0
sdks/scheduler/modeljob.go View File

@@ -0,0 +1,145 @@
package schsdk

import (
"fmt"
"gitlink.org.cn/cloudream/common/consts/errorcode"
"gitlink.org.cn/cloudream/common/pkgs/mq"
myhttp "gitlink.org.cn/cloudream/common/utils/http"
"gitlink.org.cn/cloudream/common/utils/serder"
"net/url"
"strings"
)

// 这个结构体无任何字段,但实现了Noop,每种MessageBody都要内嵌这个结构体
type MessageBodyBase struct{}

// 此处的receiver是指针
func (b *MessageBodyBase) Noop() {}

type RunningModelResp struct {
MessageBodyBase
RunningModels map[string]RunningModelInfo `json:"allNode"`
}

type NodeInfo struct {
MessageBodyBase
InstanceID JobID `json:"instanceID"`
//NodeID NodeID `json:"nodeID"`
Address Address `json:"address"`
Status string `json:"status"`
}

type RunningModelInfo struct {
MessageBodyBase
JobSetID JobSetID `json:"jobSetID"`
ModelID ModelID `json:"modelID"`
ModelName ModelName `json:"modelName"`
CustomModelName ModelName `json:"customModelName"`
Nodes []NodeInfo `json:"nodes"`
}

type ECSNodeRunningInfoReq struct {
mq.MessageBodyBase
CustomModelName ModelName `form:"customModelName" json:"customModelName" binding:"required"`
ModelID ModelID `form:"modelID" json:"modelID" binding:"required"`
}

type ECSNodeRunningInfoResp struct {
MessageBodyBase
NodeUsageRateInfos []NodeUsageRateInfo `json:"nodeUsageRateInfos"`
}

func NewECSNodeRunningInfoResp(nodeUsageRateInfos []NodeUsageRateInfo) *ECSNodeRunningInfoResp {
return &ECSNodeRunningInfoResp{
NodeUsageRateInfos: nodeUsageRateInfos,
}
}

type NodeUsageRateInfo struct {
MessageBodyBase
InstanceID JobID `json:"instanceID"`
Address Address `json:"address"`
GPURate []UsageRate `json:"GPURate"`
AccCardRate []UsageRate `json:"AccCardRate"`
}

type UsageRate struct {
Timestamp string `json:"timestamp"`
Number string `json:"number"`
}

const (
RunStatus = "run"
StopStatus = "stop"
FineTuning = "finetuning"

CreateECS = "create"
RunECS = "run"
PauseECS = "pause"
DestroyECS = "destroy"
OperateServer = "operate"
)

type QueryAllModelsReq struct {
UserID int64 `form:"userID" json:"userID"`
}

func (c *Client) QueryAllModels(req QueryAllModelsReq) (*RunningModelResp, error) {
url, err := url.JoinPath(c.baseURL, "/job/queryRunningModels")
if err != nil {
return nil, err
}

resp, err := myhttp.GetJSON(url, myhttp.RequestParam{
Body: req,
})
if err != nil {
return nil, err
}

contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) {
var codeResp response[RunningModelResp]
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err)
}

if codeResp.Code == errorcode.OK {
return &codeResp.Data, nil
}

return nil, codeResp.ToError()
}

return nil, fmt.Errorf("unknow response content type: %s", contType)
}

func (c *Client) ECSNodeRunningInfo(req ECSNodeRunningInfoReq) (*ECSNodeRunningInfoResp, error) {
url, err := url.JoinPath(c.baseURL, "/job/getECSNodeRunningInfo")
if err != nil {
return nil, err
}

resp, err := myhttp.GetJSON(url, myhttp.RequestParam{
Body: req,
})
if err != nil {
return nil, err
}

contType := resp.Header.Get("Content-Type")
if strings.Contains(contType, myhttp.ContentTypeJSON) {
var codeResp response[ECSNodeRunningInfoResp]
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err)
}

if codeResp.Code == errorcode.OK {
return &codeResp.Data, nil
}

return nil, codeResp.ToError()
}

return nil, fmt.Errorf("unknow response content type: %s", contType)
}

+ 8
- 4
sdks/scheduler/models.go View File

@@ -27,6 +27,7 @@ type ImageID int64
type CCID int64 type CCID int64


type ModelID string type ModelID string
type ModelName string
type NodeID int64 type NodeID int64
type Address string type Address string


@@ -90,13 +91,16 @@ type UpdateMultiInstanceJobInfo struct {
Files JobFilesInfo `json:"files"` Files JobFilesInfo `json:"files"`
Runtime JobRuntimeInfo `json:"runtime"` Runtime JobRuntimeInfo `json:"runtime"`
MultiInstanceJobSetID JobSetID `json:"multiInstanceJobSetID"` MultiInstanceJobSetID JobSetID `json:"multiInstanceJobSetID"`
//InstanceIDs []JobID `json:"instanceIDs"`
UpdateStrategy string `json:"updateStrategy"`
UpdateType string `json:"updateType"`
SubJobs []JobID `json:"subJobs"`
Operate string `json:"operate"`
} }


type ModelJobInfo struct { type ModelJobInfo struct {
Type string `json:"type"`
ModelID string `json:"modelID"`
Type string `json:"type"`
ModelID ModelID `json:"modelID"`
CustomModelName ModelName `json:"customModelName"`
Command string `json:"command"`
} }


type InstanceJobInfo struct { type InstanceJobInfo struct {


+ 0
- 26
sdks/scheduler/response.go View File

@@ -1,26 +0,0 @@
package schsdk

// 这个结构体无任何字段,但实现了Noop,每种MessageBody都要内嵌这个结构体
type MessageBodyBase struct{}

// 此处的receiver是指针
func (b *MessageBodyBase) Noop() {}

type AvailableNodesResp struct {
MessageBodyBase
AvailableNodes map[ModelID]AvailableNodes `json:"allNode"`
}

type AvailableNodes struct {
MessageBodyBase
//ModelID ModelID `json:"modelID"`
JobID JobID `json:"jobID"`
Nodes []NodeInfo `json:"nodes"`
}

type NodeInfo struct {
MessageBodyBase
InstanceID JobID `json:"instanceID"`
NodeID NodeID `json:"nodeID"`
Address Address `json:"address"`
}

Loading…
Cancel
Save