模型切换
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user