feat(llm): 添加停止微调任务功能
- 在 application-ymx.yaml 中添加停止微调任务的 API 路径 - 新增 FineTuningTaskHttpService 类,实现停止微调任务的 HTTP 请求 - 修改 AsyncFineTuningTaskService 类,增加停止微调任务的方法 - 更新 FineTuningTaskServiceImpl 类,实现停止微调任务的业务逻辑
This commit is contained in:
parent
af0f47c2c7
commit
8dffa602fb
@ -71,6 +71,9 @@ public class LLMBackendProperties {
|
||||
@NotNull(message = "创建微调任务 POST")
|
||||
private String finetuningCreate;
|
||||
|
||||
@NotNull(message = "停止微调任务 POST")
|
||||
private String stopFinetuning;
|
||||
|
||||
private String finetuningLog;
|
||||
|
||||
private String finetuningDetail;
|
||||
|
@ -13,15 +13,16 @@ import cn.iocoder.yudao.module.llm.dal.mysql.servername.ServerNameMapper;
|
||||
import cn.iocoder.yudao.module.llm.enums.FinetuningTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.llm.service.dataset.DatasetQuestionService;
|
||||
import cn.iocoder.yudao.module.llm.service.dataset.DatasetService;
|
||||
import cn.iocoder.yudao.module.llm.service.http.FineTuningTaskHttpService;
|
||||
import cn.iocoder.yudao.module.llm.service.http.TrainHttpService;
|
||||
import cn.iocoder.yudao.module.llm.service.http.vo.AigcFineTuningCreateReqVO;
|
||||
import cn.iocoder.yudao.module.llm.service.http.vo.AigcFineTuningCreateRespVO;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -49,15 +50,18 @@ public class AsyncFineTuningTaskService {
|
||||
@Resource
|
||||
private AsyncDataSetService dataSetService;
|
||||
|
||||
@Resource
|
||||
private FineTuningTaskHttpService fineTuningTaskHttpService;
|
||||
|
||||
@Value("${spring.profiles.active}")
|
||||
private String active;
|
||||
|
||||
//大模型平台创建调优任务
|
||||
@Async
|
||||
public void createTuning(FineTuningTaskDO fineTuningTask) {
|
||||
public void createTuning (FineTuningTaskDO fineTuningTask) {
|
||||
// 记录开始创建任务的日志
|
||||
log.info("异步创建。 开始创建微调任务,请求参数: {}", fineTuningTask);
|
||||
|
||||
|
||||
try {
|
||||
log.info("开始创建微调任务,任务ID: {}", fineTuningTask.getId());
|
||||
|
||||
@ -146,10 +150,10 @@ public class AsyncFineTuningTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
private static AigcFineTuningCreateReqVO getAigcFineTuningCreateReqVO(FineTuningTaskDO fineTuningTask) {
|
||||
private static AigcFineTuningCreateReqVO getAigcFineTuningCreateReqVO (FineTuningTaskDO fineTuningTask) {
|
||||
AigcFineTuningCreateReqVO req = new AigcFineTuningCreateReqVO();
|
||||
req.setModel(fineTuningTask.getBaseModel());
|
||||
req.setTrainEpoch( (fineTuningTask.getEpoch() == 0) ? 1 :fineTuningTask.getEpoch());
|
||||
req.setTrainEpoch((fineTuningTask.getEpoch() == 0) ? 1 : fineTuningTask.getEpoch());
|
||||
req.setSuffix(fineTuningTask.getTaskName());
|
||||
req.setRemark(fineTuningTask.getTaskIntro());
|
||||
req.setTrainBatchSize(fineTuningTask.getBatchSize());
|
||||
@ -164,26 +168,45 @@ public class AsyncFineTuningTaskService {
|
||||
|
||||
//调优任务部署
|
||||
@Async
|
||||
public void startFineTuningTask(FineTuningTaskDO fineTuningTask) {
|
||||
public void startFineTuningTask (FineTuningTaskDO fineTuningTask) {
|
||||
try {
|
||||
createTuning(fineTuningTask);
|
||||
}catch(Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
};
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
//调优任务停止
|
||||
@Async
|
||||
public void stopFineTuningTask(FineTuningTaskDO fineTuningTask) {
|
||||
public void stopFineTuningTask (FineTuningTaskDO fineTuningTask) {
|
||||
try {
|
||||
trainHttpService.finetuningCancle(new HashMap<>(),fineTuningTask.getJobId());
|
||||
trainHttpService.finetuningCancle(new HashMap<>(), fineTuningTask.getJobId());
|
||||
trainHttpService.finetuningDelete(new HashMap<>(), fineTuningTask.getJobId());
|
||||
fineTuningTask.setStatus(0);
|
||||
fineTuningTaskMapper.updateById(fineTuningTask);
|
||||
}catch(Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
};
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止微调任务 TODO:先同步调试
|
||||
*
|
||||
* @param fineTuningTaskDO 微调任务数据对象
|
||||
*/
|
||||
public void stopFinetuning (FineTuningTaskDO fineTuningTaskDO) {
|
||||
log.info(" ===== 停止微调任务 ===== stopFinetuning");
|
||||
try {
|
||||
log.info("开始调用HTTP服务停止微调任务,任务模型名称: {}", fineTuningTaskDO.getJobModelName());
|
||||
fineTuningTaskHttpService.stopFinetuning(fineTuningTaskDO);
|
||||
log.info("HTTP服务调用成功,任务模型名称: {}", fineTuningTaskDO.getJobModelName());
|
||||
} catch (Exception e) {
|
||||
log.error("调用HTTP服务停止微调任务时发生异常,任务模型名称: {}", fineTuningTaskDO.getJobModelName(), e);
|
||||
throw new RuntimeException("停止微调任务失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -345,16 +345,36 @@ public class FineTuningTaskServiceImpl implements FineTuningTaskService {
|
||||
return null;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void stopFineTuningTask (Long id) {
|
||||
// FineTuningTaskDO fineTuningTaskDO = validateFineTuningTaskExists(id);
|
||||
// fineTuningTaskMapper.stopStartTask(id, FinetuningTaskStatusEnum.WAITING.getStatus());
|
||||
// //todo 调用模型服务,停止调优任务
|
||||
// asyncFineTuningTaskService.stopFineTuningTask(fineTuningTaskDO);
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
public void stopFineTuningTask (Long id) {
|
||||
public void stopFineTuningTask(Long id) {
|
||||
log.info(" ===== 停止微调任务 ===== stopFineTuningTask");
|
||||
|
||||
// 1. 校验微调任务是否存在
|
||||
log.info("开始校验微调任务是否存在,任务ID: {}", id);
|
||||
FineTuningTaskDO fineTuningTaskDO = validateFineTuningTaskExists(id);
|
||||
fineTuningTaskMapper.stopStartTask(id, FinetuningTaskStatusEnum.WAITING.getStatus());
|
||||
//todo 调用模型服务,停止调优任务
|
||||
asyncFineTuningTaskService.stopFineTuningTask(fineTuningTaskDO);
|
||||
log.info("微调任务校验成功,任务ID: {}", id);
|
||||
|
||||
// 2. 修改微调任务状态为已取消
|
||||
log.info("开始修改微调任务状态为已取消,任务ID: {}", id);
|
||||
fineTuningTaskMapper.stopStartTask(id, FinetuningTaskStatusEnum.CANCELLED.getStatus());
|
||||
log.info("微调任务状态修改成功,任务ID: {}", id);
|
||||
|
||||
// 3. 异步调用模型服务,停止微调任务
|
||||
log.info("开始异步调用模型服务,停止微调任务,任务ID: {}", id);
|
||||
asyncFineTuningTaskService.stopFinetuning(fineTuningTaskDO);
|
||||
log.info("异步调用模型服务完成,任务ID: {}", id);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PageResult<FineTuningTaskDO> getFineTuningTaskPage (FineTuningTaskPageReqVO pageReqVO) {
|
||||
return fineTuningTaskMapper.selectPage(pageReqVO);
|
||||
|
@ -0,0 +1,53 @@
|
||||
package cn.iocoder.yudao.module.llm.service.http;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO;
|
||||
import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @Description 微调任务相关接口
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class FineTuningTaskHttpService {
|
||||
@Resource
|
||||
private LLMBackendProperties llmBackendProperties;
|
||||
|
||||
/**
|
||||
* 停止微调任务
|
||||
* 该方法通过HTTP请求调用后端服务,停止指定的微调任务。
|
||||
*
|
||||
* @param fineTuningTaskDO 微调任务数据对象,包含任务的相关信息
|
||||
*/
|
||||
public void stopFinetuning(FineTuningTaskDO fineTuningTaskDO) {
|
||||
log.info(" ===== 停止微调任务 ===== stopFinetuning");
|
||||
|
||||
// 1. 获取停止微调任务的URL
|
||||
String url = llmBackendProperties.getStopFinetuning();
|
||||
log.info("获取停止微调任务的URL: {}", url);
|
||||
|
||||
// 2. 发送HTTP POST请求,停止微调任务
|
||||
log.info("开始发送HTTP POST请求,停止微调任务,任务模型名称: {}", fineTuningTaskDO.getJobModelName());
|
||||
try {
|
||||
// 使用 try-with-resources 确保 HttpResponse 被正确关闭
|
||||
try (HttpResponse response = HttpRequest.post(url)
|
||||
.form("fine_tuned_model", fineTuningTaskDO.getJobModelName())
|
||||
.timeout(60000)
|
||||
.executeAsync()) {
|
||||
String body = response.body();
|
||||
log.info("HTTP请求完成,响应内容: {}", body);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("发送HTTP请求停止微调任务时发生异常,任务模型名称: {}", fineTuningTaskDO.getJobModelName(), e);
|
||||
throw new RuntimeException("HTTP请求失败", e);
|
||||
}
|
||||
}
|
||||
}
|
@ -326,6 +326,8 @@ llm:
|
||||
text_to_image: http://127.0.0.1:5123/generate-image
|
||||
# 检查点文件列表
|
||||
check_file_list: /llm/finetuning/checkpoints?model_name=
|
||||
# 模型调优停止 POST
|
||||
stop_finetuning: /llm/finetuning/stop
|
||||
|
||||
#################### 30000: 大模型对话相关API。 ###################
|
||||
#### 大模型对话
|
||||
|
Loading…
x
Reference in New Issue
Block a user