Train
core.Trainer
AnomalyDetction 모델을 학습시키기 위한 Trainer class 입니다.
Usage
demo/train.py 참고
build(config, data)
classmethod
Trainer class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
Trainer |
Trainer
|
build가 완료된 core.Trainer class의 instance를 반환합니다. |
to_device(device)
Trainer의 device를 변경합니다. (cpu/gpu)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
device | str | int
|
변경하고자 하는 device 입니다. int의 경우 해당 번호의 GPU, "cpu"(str)은 cpu를 사용합니다. |
required |
train_one_step()
학습을 1스텝 수행합니다.
실패한 step 뒤에도 다시 호출할 수 있으며, 새 step 시작 시 잔여 gradient를 비웁니다. 재시도는 이미 소비한 batch와 RNG, 변경된 model buffer 또는 optimizer/AMP의 부분 실패를 자동으로 되돌리지 않습니다. 저장 시점부터 정확히 다시 시작하려면 기존 pause checkpoint를 resume()해야 합니다. Pause 상태에서는 TrainingPausedError에 해당하는 오류를 반환합니다.
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
post_train_process()
train을 마무리하기 위한 작업을 합니다. 주로 threshold를 자동으로 계산해줍니다.
Returns:
validation_enabled()
Trainer가 validation이 가능한지 bool로 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
Trainer가 validation이 가능하면 True를, 불가능하다면 False를 반환합니다. |
get_validation_schedule(total_iterations, density_level)
classmethod
validation을 수행할 step을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
total_iterations |
int
|
총 학습 스텝입니다. |
required |
density_level |
int
|
validation을 수행할 step의 밀도입니다. [0, 1, 2] 중 1가지이며 작을수록 validation을 더 자주 수행합니다. 기본값은 1입니다. |
required |
Returns:
| Type | Description |
|---|---|
list[int]
|
list[int]: validation을 수행할 step이 담긴 list를 반환합니다. |
validate()
Validation을 수행하고, 결과를 리턴합니다.
Returns:
| Name | Type | Description |
|---|---|---|
dict |
dict
|
pause(checkpoint_path, metadata=None, password=None)
완료된 학습 step의 상태를 저장하고 일시 정지합니다.
SaigeToolkit 2.8.1 이상, 2.9.0 미만과 기본 InfiniteRandomSampler 학습 경로를 지원합니다. 학습 시작 전이나 micro-batch 누적까지 끝난 optimizer step에서 저장할 수 있으며, 학습 도중 요청하면 해당 step이 끝날 때까지 기다립니다. 실패한 step 뒤에는 다음 step이 성공하거나 resume()하기 전까지 TrainingPauseBoundaryError에 해당하는 오류를 반환합니다. Custom finite loader는 학습할 수 있지만 pause() 요청에는 TrainerResumeSamplerError에 해당하는 오류 코드 -414204를 반환합니다.
post_train_process() 없이 저장할 수 있습니다. Model, optimizer, AMP scaler, loss state, 학습 step, threshold/calibration 상태, 소비한 dataloader 위치, validation iterator 생성 여부와 RNG를 metadata와 별도로 저장합니다. 성공 후 학습을 계속하려면 resume()을 호출해야 합니다. Pause 자체는 프로세스를 종료하지 않으며, 저장 성공 후 제품에서 종료할 수 있습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
학습 재개용 checkpoint를 저장할 path입니다. |
required |
metadata |
dict[str, Any] | None
|
호출자가 정의하는 추가 정보입니다. 고정 또는 필수 키는 없으며, step도 자동으로 추가하지 않습니다. 예를 들어 demo/train.py는 train_one_step() 결과의 step을 {"step": result["step"]}으로 전달하여 완료한 학습 step을 기록합니다. 생략하거나 None이면 빈 dictionary를 저장합니다. Defaults to None. |
None
|
password |
str | None
|
checkpoint 암호화에 사용할 password입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
성공 시 public API는 (0, "Success", None)을 반환합니다. 실패 시에는 (음수 error_code, error_message, None)을 반환합니다. |
resume(checkpoint_path, password=None)
pause()로 저장한 학습 상태를 복원하고, 함께 저장한 metadata를 반환합니다.
같은 config와 데이터 순서, module version으로 Trainer를 build하고, to_device()로 같은 device type과 AMP 설정을 준비한 뒤 호출합니다. Config의 dictionary 필드 순서도 유지해야 하며, 데이터 파일 내용과 library 환경도 같아야 합니다. 파일 내용의 hash는 검사하지 않습니다. 실제 학습 step은 metadata의 step 값과 별도로 복원됩니다. 같은 Trainer나 새 프로세스의 Trainer 모두 사용할 수 있으며, 일반 save_checkpoint() 파일은 resume()의 입력으로 사용할 수 없습니다.
Global Python/NumPy/Torch CPU RNG를 사용하는 training augmentation과 corruption을 지원합니다. Transform 내부 private generator나 자체 가변 상태, 임의의 stochastic validation transform의 worker RNG는 별도 관리가 필요합니다. Validation iterator 생성 정보가 없는 이전 pause 파일도 읽을 수 있지만, 대상 iterator의 기존 상태를 유지하므로 validation 이후의 정확한 RNG 연속성은 보장하지 않습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
pause()로 저장한 학습 재개용 checkpoint의 path입니다. |
required |
password |
str | None
|
저장할 때 사용한 password입니다. Defaults to None. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: pause()에 전달했던 metadata의 키와 값을 반환합니다. 고정 또는 필수 키는 없으며, metadata를 생략했거나 None으로 저장했다면 {}입니다. 아래 키는 호출자가 직접 저장할 수 있는 예시이며, 자동으로 추가되지 않습니다. public API의 실제 반환값은 (0, "Success", metadata)입니다. 실패 시에는 (음수 error_code, error_message, None)을 반환합니다. |
Examples:
같은 설정으로 build하고 to_device()를 호출한 Trainer에서 재개합니다. 아래 step 접근은 pause(metadata={"step": step})으로 저장한 경우의 예시입니다.
save_checkpoint(checkpoint_path, metadata=None, password=None)
현재 Trainer의 상태를 암호화하여 저장합니다.
학습 후에는 post_train_process()로 threshold를 갱신한 뒤 저장합니다. 이 checkpoint는 model과 step을 저장하며, optimizer와 RNG 등을 포함한 학습 재개용 checkpoint는 pause()로 저장해야 합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
checkpoint를 저장할 path 입니다. |
required |
metadata |
dict | None
|
호출자가 정의하는 추가 정보입니다. 고정 또는 필수 키는 없습니다. 예를 들어 {"description": "demo"}를 저장하면 load_checkpoint()가 그대로 반환합니다. 생략하거나 None이면 빈 dictionary를 저장합니다. Defaults to None. |
None
|
password |
str | None
|
checkpoint 파일에서 중요한 정보를 암호화 하는데 사용되는 password 입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
성공 시 public API는 (0, "Success", None)을 반환합니다. 실패 시에는 (음수 error_code, error_message, None)을 반환합니다. |
load_checkpoint(checkpoint_path, password=None)
저장한 checkpoint로부터 Trainer의 상태를 불러오고, metadata를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
load할 checkpoint가 저장 되어 있는 path 입니다. |
required |
password |
str | None
|
checkpoint 파일에서 중요한 정보를 복호화 하는데 사용되는 password 입니다. None이면 복호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
dict |
dict
|
save_checkpoint()에 전달했던 metadata의 키와 값을 반환합니다. 고정 또는 필수 키는 없으며, metadata를 생략했거나 None으로 저장했다면 {}입니다. 예를 들어 {"description": "demo"}로 저장한 경우 description (str) 키를 반환합니다. step 등 저장하지 않은 키는 자동으로 추가하지 않습니다. public API의 실제 반환값은 (0, "Success", metadata)입니다. 실패 시에는 (음수 error_code, error_message, None)을 반환합니다. |