feat/training_260202 #55
@@ -95,7 +95,7 @@ public class ModelTrainMngService {
|
|||||||
modelTrainMngCoreService.saveModelConfig(modelId, req.getModelConfig());
|
modelTrainMngCoreService.saveModelConfig(modelId, req.getModelConfig());
|
||||||
|
|
||||||
UUID tmpUuid = UUID.randomUUID();
|
UUID tmpUuid = UUID.randomUUID();
|
||||||
String raw = tmpUuid.toString().replace("-", "");
|
String raw = tmpUuid.toString().toUpperCase().replace("-", "");
|
||||||
|
|
||||||
List<String> uids =
|
List<String> uids =
|
||||||
modelTrainMngCoreService.findDatasetUid(req.getTrainingDataset().getDatasetList());
|
modelTrainMngCoreService.findDatasetUid(req.getTrainingDataset().getDatasetList());
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.kamco.cd.training.postgres.repository.model.ModelDatasetRepository;
|
|||||||
import com.kamco.cd.training.postgres.repository.model.ModelMngRepository;
|
import com.kamco.cd.training.postgres.repository.model.ModelMngRepository;
|
||||||
import com.kamco.cd.training.train.dto.TrainRunRequest;
|
import com.kamco.cd.training.train.dto.TrainRunRequest;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -503,6 +504,16 @@ public class ModelTrainMngCoreService {
|
|||||||
return datasetRepository.findDatasetUid(datasetIds);
|
return datasetRepository.findDatasetUid(datasetIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Long> findModelDatasetMapp(Long modelId) {
|
||||||
|
List<Long> datasetUids = new ArrayList<>();
|
||||||
|
List<ModelDatasetMappEntity> entities = modelDatasetMapRepository.findByModelUid(modelId);
|
||||||
|
for (ModelDatasetMappEntity entity : entities) {
|
||||||
|
datasetUids.add(entity.getDatasetUid());
|
||||||
|
}
|
||||||
|
|
||||||
|
return datasetUids;
|
||||||
|
}
|
||||||
|
|
||||||
public Long findModelStep1InProgressCnt() {
|
public Long findModelStep1InProgressCnt() {
|
||||||
return modelMngRepository.findModelStep1InProgressCnt();
|
return modelMngRepository.findModelStep1InProgressCnt();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ import org.springframework.stereotype.Repository;
|
|||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface ModelDatasetMappRepository
|
public interface ModelDatasetMappRepository
|
||||||
extends JpaRepository<ModelDatasetMappEntity, ModelDatasetMappEntity.ModelDatasetMappId> {}
|
extends JpaRepository<ModelDatasetMappEntity, ModelDatasetMappEntity.ModelDatasetMappId>,
|
||||||
|
ModelDatasetMappRepositoryCustom {}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.kamco.cd.training.postgres.repository.model;
|
||||||
|
|
||||||
|
import com.kamco.cd.training.postgres.entity.ModelDatasetMappEntity;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ModelDatasetMappRepositoryCustom {
|
||||||
|
List<ModelDatasetMappEntity> findByModelUid(Long modelId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.kamco.cd.training.postgres.repository.model;
|
||||||
|
|
||||||
|
import static com.kamco.cd.training.postgres.entity.QModelDatasetMappEntity.modelDatasetMappEntity;
|
||||||
|
|
||||||
|
import com.kamco.cd.training.postgres.entity.ModelDatasetMappEntity;
|
||||||
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ModelDatasetMappRepositoryImpl implements ModelDatasetMappRepositoryCustom {
|
||||||
|
|
||||||
|
private final JPAQueryFactory queryFactory;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModelDatasetMappEntity> findByModelUid(Long modelId) {
|
||||||
|
queryFactory
|
||||||
|
.select(modelDatasetMappEntity)
|
||||||
|
.from(modelDatasetMappEntity)
|
||||||
|
.where(modelDatasetMappEntity.modelUid.eq(modelId));
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -164,4 +164,26 @@ public class TrainApiController {
|
|||||||
testJobService.cancel(modelId);
|
testJobService.cancel(modelId);
|
||||||
return ApiResponseDto.ok("ok");
|
return ApiResponseDto.ok("ok");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "데이터셋 tmp 파일생성", description = "데이터셋 tmp 파일생성 API")
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
responseCode = "200",
|
||||||
|
description = "데이터셋 tmp 파일생성 성공",
|
||||||
|
content =
|
||||||
|
@Content(
|
||||||
|
mediaType = "application/json",
|
||||||
|
schema = @Schema(implementation = String.class))),
|
||||||
|
@ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content),
|
||||||
|
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||||
|
})
|
||||||
|
@PostMapping("/create-tmp/{uuid}")
|
||||||
|
public ApiResponseDto<UUID> createTmpFile(
|
||||||
|
@Parameter(description = "uuid", example = "80a0e544-36ed-4999-b705-97427f23337d")
|
||||||
|
@PathVariable
|
||||||
|
UUID uuid) {
|
||||||
|
|
||||||
|
return ApiResponseDto.ok(trainJobService.createTmpFile(uuid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,17 @@ package com.kamco.cd.training.train.service;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.kamco.cd.training.common.enums.TrainStatusType;
|
import com.kamco.cd.training.common.enums.TrainStatusType;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainMngDto;
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto;
|
||||||
|
import com.kamco.cd.training.model.service.TmpDatasetService;
|
||||||
import com.kamco.cd.training.postgres.core.ModelTrainJobCoreService;
|
import com.kamco.cd.training.postgres.core.ModelTrainJobCoreService;
|
||||||
import com.kamco.cd.training.postgres.core.ModelTrainMngCoreService;
|
import com.kamco.cd.training.postgres.core.ModelTrainMngCoreService;
|
||||||
import com.kamco.cd.training.train.dto.ModelTrainJobQueuedEvent;
|
import com.kamco.cd.training.train.dto.ModelTrainJobQueuedEvent;
|
||||||
import com.kamco.cd.training.train.dto.TrainRunRequest;
|
import com.kamco.cd.training.train.dto.TrainRunRequest;
|
||||||
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -29,6 +32,7 @@ public class TrainJobService {
|
|||||||
private final DockerTrainService dockerTrainService;
|
private final DockerTrainService dockerTrainService;
|
||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
private final ApplicationEventPublisher eventPublisher;
|
private final ApplicationEventPublisher eventPublisher;
|
||||||
|
private final TmpDatasetService tmpDatasetService;
|
||||||
|
|
||||||
// 학습 결과가 저장될 호스트 디렉토리
|
// 학습 결과가 저장될 호스트 디렉토리
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.responseDir}")
|
||||||
@@ -210,4 +214,26 @@ public class TrainJobService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UUID createTmpFile(UUID modelUuid) {
|
||||||
|
UUID tmpUuid = UUID.randomUUID();
|
||||||
|
String raw = tmpUuid.toString().toUpperCase().replace("-", "");
|
||||||
|
|
||||||
|
Long modelId = modelTrainMngCoreService.findModelIdByUuid(modelUuid);
|
||||||
|
List<Long> datasetIds = modelTrainMngCoreService.findModelDatasetMapp(modelId);
|
||||||
|
|
||||||
|
List<String> uids = modelTrainMngCoreService.findDatasetUid(datasetIds);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 데이터셋 심볼링크 생성
|
||||||
|
Path path = tmpDatasetService.buildTmpDatasetSymlink(raw, uids);
|
||||||
|
ModelTrainMngDto.UpdateReq updateReq = new ModelTrainMngDto.UpdateReq();
|
||||||
|
updateReq.setRequestPath(path.toString());
|
||||||
|
modelTrainMngCoreService.updateModelMaster(modelId, updateReq);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return modelUuid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user