Files
ai/models/Task.go
2023-06-27 20:16:21 +08:00

83 lines
2.2 KiB
Go

package models
import "time"
type Task struct {
ID int `json:"id" gorm:"primary_key"`
Name string `json:"name"`
Type string `json:"type"` // 任務類型(訓練|推理)
Status string `json:"status"` // (initial|ready|waiting|running|success|error)
Progress int `json:"progress"` // (0-100)
UserID int `json:"user_id"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
}
// 异步任务调度管理
type AsynchronousTaskSchedulingManagement struct {
tasks map[int]Task // 任务队列
servers map[string]Server // 服务器队列
}
// 向任务队列添加任务
func (m *AsynchronousTaskSchedulingManagement) AddTask(task Task) {
// 1. 任务加入队列, 任务状态为 waiting, 每次从最后一个任务开始执行, 并向上全取同模型的任务, 任务状态更新为 waiting(排队), 并更新此模型的排队状态到所有关注此模型的用户(管理员每个连接都关注所有模型)
// 2. 任务从队列中取出, 任务队列长度超过12则增加机器, 模型类型持续占用机器则增加机器
// 加入任务队列
m.tasks[task.ID] = task
// 检查任务队列长度, 持续增长超过12则增加机器
if len(m.tasks) > 12 {
var server Server
m.servers[server.ID] = server
}
// 向目标机器发送模型
// 向目标机器切换模型
// 向目标机器发送任务
}
//// 推理任務
//func startInferenceTask(task *Task) {
//
// // 獲取一臺可用的 GPU 資源
// // ...
//
// // 執行推理任務
// // ...
//
// // 更新任務狀態
// task.Status = "running"
// task.Progress = 0
// task.Update()
//
// // 監聽任務狀態
// for {
// // 延遲 1 秒
// time.Sleep(1 * time.Second)
//
// // 查詢任務狀態
// resp, err := http.Get("http://localhost:5000/api/v1/tasks/" + strconv.Itoa(task.ID))
// if err != nil {
// log.Println(err)
// continue
// }
// defer resp.Body.Close()
//
// // 解析任務狀態
// // ...
//
// // 更新任務狀態
// task.Progress = 100
// task.Status = "success"
// task.Update()
//
// // 任務結束判定
// if task.Progress == 100 {
// break
// }
// }
//
//}