Merge pull request '전이학습 API 호출 파라미터 적용' (#201) from feat/training_260623 into develop

Reviewed-on: #201
This commit was merged in pull request #201.
This commit is contained in:
2026-06-23 14:27:43 +09:00
3 changed files with 35 additions and 1 deletions

View File

@@ -146,6 +146,8 @@ public class ModelMngRepositoryImpl implements ModelMngRepositoryCustom {
@Override
public TrainRunRequest findTrainRunRequest(Long modelId) {
QModelMasterEntity beforeModel = new QModelMasterEntity("beforeModel");
return queryFactory
.select(
Projections.constructor(
@@ -193,12 +195,17 @@ public class ModelMngRepositoryImpl implements ModelMngRepositoryCustom {
Expressions.nullExpression(Integer.class),
Expressions.nullExpression(String.class),
modelHyperParamEntity.uuid,
modelMasterEntity.reqTmpYn))
modelMasterEntity.reqTmpYn,
modelMasterEntity.trainType,
beforeModel.uuid,
beforeModel.bestEpoch))
.from(modelMasterEntity)
.leftJoin(modelHyperParamEntity)
.on(modelHyperParamEntity.id.eq(modelMasterEntity.hyperParamId))
.leftJoin(modelConfigEntity)
.on(modelConfigEntity.model.id.eq(modelMasterEntity.id))
.leftJoin(beforeModel)
.on(modelMasterEntity.beforeModelId.eq(beforeModel.id))
.where(modelMasterEntity.id.eq(modelId))
.fetchOne();
}

View File

@@ -86,6 +86,12 @@ public class TrainRunRequest {
private Boolean reqTmpYn; // tmp 심볼릭 링크를 쓰는지 아닌지 여부
private String trainType; // 일반 : GENERAL, 전이 : TRANSFER
private UUID beforeModelUUID;
private Integer
beforeBestEpoch; // 전이학습인 경우, before 모델 베스트 pth 경로를 보내야 해서 before 모델의 bestEpoch 을 조회하기
public String getOutputFolder() {
return String.valueOf(this.outputFolder);
}

View File

@@ -379,9 +379,30 @@ public class DockerTrainService {
addArg(c, "--saturation-range", req.getSaturationRange());
addArg(c, "--hue-delta", req.getHueDelta());
// 재시작을 위한 파라미터
if (req.getResumeFrom() != null && !req.getResumeFrom().isBlank()) {
c.add("--resume");
addArg(c, "--load-from", req.getResumeFrom());
} else if ("TRANSFER".equals(req.getTrainType())
&& req.getBeforeModelUUID() != null
&& req.getBeforeBestEpoch() != null) {
// 재시작이 아닌데 전이학습인 경우, 전이학습을 위한 파라미터
String finalLoadFromPath;
String bestModelFileName = "best_changed_fscore_epoch_" + req.getBeforeBestEpoch() + ".pth";
String epochFileName = "epoch_" + req.getBeforeBestEpoch() + ".pth";
// 이전 모델 response 경로
Path beforeModelDir = Path.of(responseDir).resolve(req.getBeforeModelUUID().toString());
// 이전 모델 response 의 베스트 fscore pth 모델 파일 경로
Path bestFilePath = beforeModelDir.resolve(bestModelFileName);
// 베스트 fscore 파일이 있으면 그 경로를 사용, 없으면 epoch_00.pth 파일 경로 사용
if (Files.exists(bestFilePath)) {
finalLoadFromPath = bestFilePath.toString();
} else {
finalLoadFromPath = beforeModelDir.resolve(epochFileName).toString();
}
addArg(c, "--load-from", finalLoadFromPath);
}
addArg(c, "--save-interval", 1);