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:
@@ -146,6 +146,8 @@ public class ModelMngRepositoryImpl implements ModelMngRepositoryCustom {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrainRunRequest findTrainRunRequest(Long modelId) {
|
public TrainRunRequest findTrainRunRequest(Long modelId) {
|
||||||
|
QModelMasterEntity beforeModel = new QModelMasterEntity("beforeModel");
|
||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
Projections.constructor(
|
Projections.constructor(
|
||||||
@@ -193,12 +195,17 @@ public class ModelMngRepositoryImpl implements ModelMngRepositoryCustom {
|
|||||||
Expressions.nullExpression(Integer.class),
|
Expressions.nullExpression(Integer.class),
|
||||||
Expressions.nullExpression(String.class),
|
Expressions.nullExpression(String.class),
|
||||||
modelHyperParamEntity.uuid,
|
modelHyperParamEntity.uuid,
|
||||||
modelMasterEntity.reqTmpYn))
|
modelMasterEntity.reqTmpYn,
|
||||||
|
modelMasterEntity.trainType,
|
||||||
|
beforeModel.uuid,
|
||||||
|
beforeModel.bestEpoch))
|
||||||
.from(modelMasterEntity)
|
.from(modelMasterEntity)
|
||||||
.leftJoin(modelHyperParamEntity)
|
.leftJoin(modelHyperParamEntity)
|
||||||
.on(modelHyperParamEntity.id.eq(modelMasterEntity.hyperParamId))
|
.on(modelHyperParamEntity.id.eq(modelMasterEntity.hyperParamId))
|
||||||
.leftJoin(modelConfigEntity)
|
.leftJoin(modelConfigEntity)
|
||||||
.on(modelConfigEntity.model.id.eq(modelMasterEntity.id))
|
.on(modelConfigEntity.model.id.eq(modelMasterEntity.id))
|
||||||
|
.leftJoin(beforeModel)
|
||||||
|
.on(modelMasterEntity.beforeModelId.eq(beforeModel.id))
|
||||||
.where(modelMasterEntity.id.eq(modelId))
|
.where(modelMasterEntity.id.eq(modelId))
|
||||||
.fetchOne();
|
.fetchOne();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,12 @@ public class TrainRunRequest {
|
|||||||
|
|
||||||
private Boolean reqTmpYn; // tmp 심볼릭 링크를 쓰는지 아닌지 여부
|
private Boolean reqTmpYn; // tmp 심볼릭 링크를 쓰는지 아닌지 여부
|
||||||
|
|
||||||
|
private String trainType; // 일반 : GENERAL, 전이 : TRANSFER
|
||||||
|
|
||||||
|
private UUID beforeModelUUID;
|
||||||
|
private Integer
|
||||||
|
beforeBestEpoch; // 전이학습인 경우, before 모델 베스트 pth 경로를 보내야 해서 before 모델의 bestEpoch 을 조회하기
|
||||||
|
|
||||||
public String getOutputFolder() {
|
public String getOutputFolder() {
|
||||||
return String.valueOf(this.outputFolder);
|
return String.valueOf(this.outputFolder);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -379,9 +379,30 @@ public class DockerTrainService {
|
|||||||
addArg(c, "--saturation-range", req.getSaturationRange());
|
addArg(c, "--saturation-range", req.getSaturationRange());
|
||||||
addArg(c, "--hue-delta", req.getHueDelta());
|
addArg(c, "--hue-delta", req.getHueDelta());
|
||||||
|
|
||||||
|
// 재시작을 위한 파라미터
|
||||||
if (req.getResumeFrom() != null && !req.getResumeFrom().isBlank()) {
|
if (req.getResumeFrom() != null && !req.getResumeFrom().isBlank()) {
|
||||||
c.add("--resume");
|
c.add("--resume");
|
||||||
addArg(c, "--load-from", req.getResumeFrom());
|
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);
|
addArg(c, "--save-interval", 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user