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
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user