模型切换

This commit is contained in:
2023-07-02 06:13:47 +08:00
parent 30286dd0c0
commit e9637f85a7

View File

@@ -81,33 +81,7 @@ func (model *Model) Inference(image_list []Image, callback func(Image)) {
data, _ := json.MarshalIndent(server, "", " ")
fmt.Println(string(data))
//var form = struct {
// Components []struct {
// ID int `json:"id"`
// Type string `json:"type"`
// Props struct {
// Value string `json:"value"`
// }
// } `json:"components"`
//}{}
//// 检查当前是否为目标模型, 不是则执行切换模型 http://106.15.192.42:7860/config
//if err := goreq.Get(fmt.Sprintf("http://%s:%d/config", server.IP, server.Port)).Do().BindJSON(&form); err != nil {
// log.Println("获取推理机配置失败:", err)
// return
//}
//var isSet = false
//for _, component := range form.Components {
// if component.Type == "dropdown" && component.ID == 1514 && component.Props.Value == model.Name {
// log.Println("当前推理机已经部署了目标模型")
// isSet = true
// break
// }
//}
//if !isSet {
// log.Println("当前推理机未部署目标模型, 开始部署目标模型")
// // 没有切换模型接口
// return
//}
// TODO: 上传模型到推理机
// 记录到推理机
server.Models = append(server.Models, model.ID)
@@ -121,20 +95,40 @@ func (model *Model) Inference(image_list []Image, callback func(Image)) {
configs.ORMDB().Take(&server)
}
// 排队等待切换模型(先检查是否已经切换完成)
for {
// 检查推理机是否已经加载了模型
if server.ModelID != model.ID {
log.Println("推理机未加载模型, 开始排队加载模型")
// 执行切换模型(推理机需要先处理完当前的任务才能加载新的模型)
if err := goreq.Post(fmt.Sprintf("http://%s:%d/sdapi/v1/options", server.IP, server.Port)).SetJsonBody(map[string]interface{}{
"sd_model_checkpoint": model.ModelCheckpoint,
"CLIP_stop_at_last_layers": 2,
}).Do().Error(); err != nil {
log.Println("切换模型失败:", err)
return
}
var form = struct {
Components []struct {
ID int `json:"id"`
Type string `json:"type"`
Props struct {
Value string `json:"value"`
}
} `json:"components"`
SdCheckpointHash string `json:"sd_checkpoint_hash"`
SdModelCheckpoint string `json:"sd_model_checkpoint"`
}{}
// 检查当前是否为目标模型, 不是则执行切换模型 http://
if err := goreq.Get(fmt.Sprintf("http://%s:%d/config", server.IP, server.Port)).Do().BindJSON(&form); err != nil {
log.Println("获取推理机配置失败:", err)
for {
if err := goreq.Get(fmt.Sprintf("http://%s:%d/sdapi/v1/options", server.IP, server.Port)).Do().BindJSON(&form); err != nil {
log.Println("获取推理机配置失败:", err)
return
}
if form.SdModelCheckpoint == model.ModelCheckpoint {
log.Println("模型切换完成:", form.SdModelCheckpoint)
break
}
time.Sleep(time.Second)
}
// 更新推理机模型ID
server.ModelID = model.ID
if err := configs.ORMDB().Save(&server).Error; err != nil {
log.Println("更新推理机模型ID失败:", err)
return
}
}
@@ -177,7 +171,7 @@ func (model *Model) Inference(image_list []Image, callback func(Image)) {
image_list[index].Progress = 100
callback(image_list[index])
}
log.Println("模型未部署到推理機, 取消推理模型")
log.Println("推理完成:", model.ID, model.Name)
}
// 将base64编码的图片保存到本地webp