하이퍼파라미터 , 모델관리 수정

This commit is contained in:
2026-02-03 18:24:49 +09:00
parent d66711e4f4
commit 6e99c209d6
18 changed files with 786 additions and 481 deletions

View File

@@ -0,0 +1,52 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_config")
public class ModelConfigEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "config_id", nullable = false)
private Integer id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@Column(name = "epoch_count")
private Integer epochCount;
@Column(name = "train_percent")
private Float trainPercent;
@Column(name = "validation_percent")
private Float validationPercent;
@Column(name = "test_percent")
private Float testPercent;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -0,0 +1,47 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_dataset")
public class ModelDatasetEntity {
@Id
@Column(name = "id", nullable = false)
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@NotNull
@Column(name = "data_id", nullable = false)
private Long dataId;
@Column(name = "building_cnt")
private Long buildingCnt;
@Column(name = "container_cnt")
private Long containerCnt;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -0,0 +1,74 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_history")
public class ModelHistoryEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "hst_id", nullable = false)
private Integer id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@Column(name = "model_no")
private Short modelNo;
@Size(max = 50)
@Column(name = "model_ver", length = 50)
private String modelVer;
@Column(name = "model_step")
private Short modelStep;
@Column(name = "step1_strt_dttm")
private OffsetDateTime step1StrtDttm;
@Column(name = "step1_end_dttm")
private OffsetDateTime step1EndDttm;
@Size(max = 20)
@Column(name = "step1_state", length = 20)
private String step1State;
@Column(name = "step2_strt_dttm")
private OffsetDateTime step2StrtDttm;
@Column(name = "step2_end_dttm")
private OffsetDateTime step2EndDttm;
@Size(max = 20)
@Column(name = "step2_state", length = 20)
private String step2State;
@Column(name = "error_msg", length = Integer.MAX_VALUE)
private String errorMsg;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -5,8 +5,6 @@ import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.ZonedDateTime;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
@@ -313,9 +311,6 @@ public class ModelHyperParamEntity {
@Column(name = "m3_use_cnt")
private Long m3UseCnt = 0L;
@OneToMany(mappedBy = "hyperParams", fetch = FetchType.LAZY)
private Set<ModelTrainMasterEntity> trainMasters = new LinkedHashSet<>();
public HyperParamDto.Basic toDto() {
return new HyperParamDto.Basic(
this.uuid,

View File

@@ -0,0 +1,108 @@
package com.kamco.cd.training.postgres.entity;
import com.kamco.cd.training.model.dto.ModelMngDto;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.ZonedDateTime;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_master")
public class ModelMasterEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "model_id", nullable = false)
private Long id;
@NotNull
@Column(name = "hyper_param_id", nullable = false)
private Long hyperParamId;
@Size(max = 10)
@Column(name = "model_no", length = 10)
private String modelNo;
@Size(max = 50)
@Column(name = "model_ver", length = 50)
private String modelVer;
@Column(name = "model_step")
private Short modelStep;
@Size(max = 20)
@Column(name = "status_cd", length = 20)
private String statusCd;
@Column(name = "strt_dttm")
private ZonedDateTime strtDttm;
@Column(name = "step1_strt_dttm")
private ZonedDateTime step1StrtDttm;
@Column(name = "step1_end_dttm")
private ZonedDateTime step1EndDttm;
@Size(max = 20)
@Column(name = "step1_state", length = 20)
private String step1State;
@Column(name = "step2_strt_dttm")
private ZonedDateTime step2StrtDttm;
@Column(name = "step2_end_dttm")
private ZonedDateTime step2EndDttm;
@Size(max = 20)
@Column(name = "step2_state", length = 20)
private String step2State;
@Column(name = "del_yn")
private Boolean delYn;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private ZonedDateTime createdDttm = ZonedDateTime.now();
@Column(name = "created_uid")
private Long createdUid;
@Column(name = "updated_dttm")
private ZonedDateTime updatedDttm;
@Column(name = "updated_uid")
private Long updatedUid;
@Column(name = "uuid")
private UUID uuid = UUID.randomUUID();
@Column(name = "train_type")
private String trainType;
public ModelMngDto.Basic toDto() {
return new ModelMngDto.Basic(
this.id,
this.uuid,
this.modelVer,
this.strtDttm,
this.step1StrtDttm,
this.step1EndDttm,
this.step2StrtDttm,
this.step2EndDttm,
this.step1State,
this.step2State,
this.statusCd,
this.trainType);
}
}

View File

@@ -0,0 +1,75 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_matrics_test")
public class ModelMatricsTestEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mtrc_id", nullable = false)
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@Size(max = 50)
@Column(name = "model", length = 50)
private String model1;
@Column(name = "tp")
private Long tp;
@Column(name = "fp")
private Long fp;
@Column(name = "fn")
private Long fn;
@Column(name = "tn")
private Long tn;
@Column(name = "precisions")
private Float precisions;
@Column(name = "recall")
private Float recall;
@Column(name = "f1_score")
private Float f1Score;
@Column(name = "accuracy")
private Float accuracy;
@Column(name = "iou")
private Float iou;
@Column(name = "processed_images")
private Long processedImages;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -0,0 +1,55 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_matrics_train")
public class ModelMatricsTrainEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mtrc_id", nullable = false)
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@Column(name = "epoch")
private Integer epoch;
@Column(name = "iteration")
private Long iteration;
@Column(name = "loss")
private Double loss;
@Column(name = "lr")
private Double lr;
@Column(name = "duration_time")
private Float durationTime;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -0,0 +1,79 @@
package com.kamco.cd.training.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import java.time.OffsetDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Getter
@Setter
@Entity
@Table(name = "tb_model_matrics_validation")
public class ModelMatricsValidationEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mtrc_id", nullable = false)
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "model_id", nullable = false)
private ModelMasterEntity model;
@Column(name = "epoch")
private Integer epoch;
@Column(name = "a_acc")
private Float aAcc;
@Column(name = "m_fscore")
private Float mFscore;
@Column(name = "m_precision")
private Float mPrecision;
@Column(name = "m_recall")
private Float mRecall;
@Column(name = "m_iou")
private Float mIou;
@Column(name = "m_acc")
private Float mAcc;
@Column(name = "changed_fscore")
private Float changedFscore;
@Column(name = "changed_precision")
private Float changedPrecision;
@Column(name = "changed_recall")
private Float changedRecall;
@Column(name = "unchanged_fscore")
private Float unchangedFscore;
@Column(name = "unchanged_precision")
private Float unchangedPrecision;
@Column(name = "unchanged_recall")
private Float unchangedRecall;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private OffsetDateTime createdDttm;
@Column(name = "created_uid")
private Long createdUid;
}

View File

@@ -1,192 +0,0 @@
package com.kamco.cd.training.postgres.entity;
import com.kamco.cd.training.model.dto.ModelMngDto;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.ZonedDateTime;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import org.hibernate.annotations.UuidGenerator;
@Getter
@Setter
@Entity
@Table(name = "tb_model_train_master")
public class ModelTrainMasterEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "model_uid", nullable = false)
private Long id;
@Size(max = 50)
@NotNull
@Column(name = "model_ver", nullable = false, length = 50)
private String modelVer;
@Size(max = 50)
@Column(name = "hyper_ver", length = 50)
private String hyperVer;
/** tb_model_train_master.hyper_param_id -> tb_model_hyper_params.hyper_param_id */
@NotNull
@Column(name = "hyper_param_id", nullable = false)
private Long hyperParamId;
/** - hyperParamId 컬럼으로 저장/수정하고 - 객체로 조회할 때만 hyperParams 사용 */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "hyper_param_id",
referencedColumnName = "hyper_param_id",
insertable = false,
updatable = false)
private ModelHyperParamEntity hyperParams;
@Size(max = 50)
@Column(name = "epoch_ver", length = 50)
private String epochVer;
@Size(max = 50)
@Column(name = "process_step", length = 50)
private String processStep;
@Column(name = "train_start_dttm")
private ZonedDateTime trainStartDttm;
@Column(name = "epoch_cnt")
private Integer epochCnt;
@Size(max = 50)
@Column(name = "dataset_ratio", length = 50)
private String datasetRatio;
@Column(name = "best_epoch")
private Integer bestEpoch;
@Column(name = "step1_end_dttm")
private ZonedDateTime step1EndDttm;
@Column(name = "step1_duration")
private ZonedDateTime step1Duration;
@Column(name = "step2_end_dttm")
private ZonedDateTime step2EndDttm;
@Column(name = "step2_duration")
private ZonedDateTime step2Duration;
@NotNull
@ColumnDefault("false")
@Column(name = "del_yn", nullable = false)
private Boolean delYn = false;
@Column(name = "created_uid")
private Long createdUid;
@Column(name = "updated_uid")
private Long updatedUid;
@ColumnDefault("now()")
@Column(name = "created_dttm")
private ZonedDateTime createdDttm;
@Column(name = "updated_dttm")
private ZonedDateTime updatedDttm;
@ColumnDefault("0")
@Column(name = "progress_rate")
private Integer progressRate;
@Column(name = "stop_dttm")
private ZonedDateTime stopDttm;
@Column(name = "confirmed_best_epoch")
private Integer confirmedBestEpoch;
@Size(max = 255)
@Column(name = "model_path")
private String modelPath;
@Column(name = "error_msg")
private String errorMsg;
@Column(name = "step2_start_dttm")
private ZonedDateTime step2StartDttm;
@Size(max = 1000)
@Column(name = "train_log_path", length = 1000)
private String trainLogPath;
@Column(name = "memo")
private String memo;
/** 기존 자기참조(base_model_uid)는 유지 */
@ManyToOne(fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.SET_NULL)
@JoinColumn(name = "base_model_uid")
private ModelTrainMasterEntity baseModel;
@Size(max = 1000)
@Column(name = "pretrained_model_path", length = 1000)
private String pretrainedModelPath;
@Column(name = "last_checkpoint_epoch")
private Integer lastCheckpointEpoch;
@Size(max = 500)
@Column(name = "checkpoint_path", length = 500)
private String checkpointPath;
@Column(name = "can_resume")
private Boolean canResume;
@NotNull
@UuidGenerator
@Column(name = "uuid", nullable = false, updatable = false)
private UUID uuid = UUID.randomUUID();
@Size(max = 10)
@Column(name = "step1_status", length = 10)
private String step1Status;
@Size(max = 10)
@Column(name = "step2_status", length = 10)
private String step2Status;
@Size(max = 10)
@Column(name = "transfer_status", length = 10)
private String transferStatus;
@Size(max = 10)
@Column(name = "status_cd", length = 10)
private String statusCd;
public ModelMngDto.Basic toDto() {
return new ModelMngDto.Basic(
this.id,
this.uuid,
this.modelVer,
this.trainStartDttm,
this.step1EndDttm,
this.step1Duration,
this.step2EndDttm,
this.step2Duration,
this.step1Status,
this.step2Status,
this.transferStatus,
this.statusCd);
}
}