Train
segmentation.Trainer
Segmentation 모델을 학습시키기 위한 Trainer class 입니다.
모든 public API는 (error_code, error_message, result)를 반환합니다. 성공 시 (0, "Success", result), 실패 시 (음수 error_code, error_message, None)입니다. 각 method의 Returns는 이 tuple의 세 번째 값인 result를 설명합니다.
Usage
demo/train.py 참고
build(config, data)
classmethod
Trainer class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
Trainer |
Trainer
|
build가 완료된 segmentation.Trainer class의 instance를 반환합니다. |
to_device(device)
Trainer의 device를 변경합니다. (cpu/gpu)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
device | str | int
|
변경하고자 하는 device 입니다.
|
required |
Returns: None: None
train_one_step()
학습을 1스텝 수행하고, 결과를 반환합니다.
Model 계산 단계에서 실패한 뒤에는 재호출할 수 있지만, 실패한 step의 batch 소비나 model/optimizer 변경을 자동으로 되돌리지는 않습니다. Resumable 모드에서 데이터 로딩 실패로 iterator가 닫히면, 실패 원인을 해결한 뒤 이전 pause() 파일을 resume()해야 다시 학습할 수 있습니다. 저장된 pause() 파일이 없으면 새 Trainer로 처음부터 학습해야 합니다. 다른 단계의 실패도 정확한 복구에는 이전 pause() 파일을 resume()합니다. 실패 직후에는 pause()할 수 없으며, 성공한 step 또는 resume() 이후 다시 가능합니다.
Returns:
validation_enabled()
Trainer가 validation이 가능한지 bool로 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
Trainer가 validation이 가능하면 True를, 불가능하다면 False를 반환합니다. |
validate()
Validation을 수행하고, 결과를 리턴합니다.
Returns:
post_train_process()
train 후처리를 수행하고, 해당 모델의 default inference options을 리턴합니다.
Returns:
get_class_label_counts()
save_checkpoint(checkpoint_path, metadata=None, password=None)
현재 Trainer의 상태를 암호화하여 저장합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
checkpoint를 저장할 path 입니다. |
required |
metadata |
dict | None
|
None
|
|
password |
str | None
|
checkpoint 파일에서 중요한 정보를 암호화 하는데 사용되는 password 입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns: None: None
pause(checkpoint_path, metadata=None, password=None)
완료된 step의 학습 상태를 저장하고 일시정지합니다.
build() config에 resumable=True를 지정해야 합니다. 기본값 False에서는 기존 loader 경로를 사용하며, resume용 config signature를 계산하지 않습니다. 지원되는 sampler/loader 조합을 resumable=False로 build한 Trainer의 pause()/resume()은 error_code -412204를 반환합니다. 미지원 sampler/loader 조합이면 -412202를 반환합니다. 미지원 조합에 resumable=True를 지정하면 build 단계에서 -412202로 거절합니다. pause()는 상태를 저장하고 학습을 멈출 뿐, 프로세스를 종료하거나 GPU 메모리를 해제하지 않습니다. 성공을 반환한 뒤에는 같은 Trainer에서 resume()하거나, 프로세스를 종료하고 새 프로세스에서 resume()할 수 있습니다. 기존 save_checkpoint() 형식은 유지되며, 재개용 파일은 별도 경로에 저장합니다. 시작 전이나 train_one_step()이 성공한 경계에서 호출합니다. AMP가 optimizer update를 건너뛰어도 정상 완료된 학습 step은 저장할 수 있습니다. Model, optimizer, scheduler, AMP scaler, RNG, loader 위치와 step/epoch, 남은 crop buffer 및 validation 상태를 저장합니다. Epoch 중간에도 저장할 수 있으며, resume() 후 다음 batch부터 이어서 학습합니다. InfiniteRandomSampler를 사용하는 MemorySafeDataLoader/Full2PatchDataLoader를 지원하며, ClassBalancedInfiniteRandomSampler는 pause/resume을 지원하지 않습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
재개용 checkpoint를 저장할 path입니다. |
required |
metadata |
dict[str, Any] | None
|
None
|
|
password |
str | None
|
checkpoint 암호화에 사용할 password입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
성공 시 (0, "Success", None)을 반환합니다. |
resume(checkpoint_path, password=None)
동일한 config/data 및 device/AMP로 build한 Trainer에서 학습을 재개합니다.
같은 Trainer 또는 새로 build한 Trainer에서 사용할 수 있습니다. 두 경우 모두 build() config에 resumable=True가 필요합니다. resume()은 재개용 파일을 삭제하지 않습니다. Step 실패 후 같은 파일로 다시 복구할 수 있으며, 학습 완료 후 파일 정리는 호출자가 합니다. 저장할 때와 같은 module 버전, config, data 내용과 순서, CPU/CUDA 종류 및 AMP 설정이 필요합니다. to_device()로 device를 설정한 뒤 호출하며, pause() checkpoint만 허용합니다. Cache 경로와 loader의 worker 수, persistent_workers, prefetch, pin_memory, multiprocessing_context, timeout은 변경할 수 있습니다. Validation은 학습 RNG를 보존하며, validation의 custom stochastic transform 결과까지 동일하게 보장하지는 않습니다. Sample별 Python/NumPy/Torch CPU 기본 RNG를 복원하며, custom transform의 자체 generator나 여러 thread의 RNG 동시 사용은 별도 state 관리가 필요합니다. CUDA 연산 자체의 비결정성 때문에 이후 loss/weight의 bitwise 일치를 보장하지는 않습니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
pause()로 저장한 재개용 checkpoint의 path입니다. |
required |
password |
str | None
|
저장할 때 사용한 password입니다. 암호화하지 않은 파일은 None을 사용합니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
metadata |
dict[str, Any]
|
pause()에 전달했던 사용자 정의 metadata입니다. 실제 호출은 error_code, error_message, metadata = trainer.resume(...) 형식입니다. 성공한 경우 정해진 반환 key는 없으며, metadata를 생략했으면 {}입니다. 아래는 demo/train.py에서 직접 저장한 예시이며 항상 존재하는 key가 아닙니다. Model, optimizer, scheduler, loader 위치와 step/epoch 등은 Trainer 내부에 복원하며, metadata에 자동으로 추가하지 않습니다. 실패 시 metadata는 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 |
|---|---|---|
metadata |
dict
|
save_checkpoint()에 전달했던 사용자 정의 metadata입니다. 실제 호출은 error_code, error_message, metadata = trainer.load_checkpoint(...) 형식입니다. 성공한 경우 정해진 반환 key는 없으며, metadata를 생략했으면 {}입니다. 아래는 demo/train.py에서 사용하는 예시이며 항상 존재하는 key가 아닙니다. 실패 시 metadata는 None입니다. 학습 state 전체를 재개하려면 pause()/resume()을 사용합니다. |