Train
classification.Trainer
Classification 모델을 학습시키기 위한 Trainer class 입니다.
SaigeToolkit 2.8.1 이상의 학습 일시정지·재개 기능은 pause()와 resume()를 사용합니다.
demo/train.py에서 학습 → pause → 새 Trainer에서 resume → 학습 → save_checkpoint 예시를
확인할 수 있습니다. Windows에서 worker를 사용하는 실행 코드는
if __name__ == "__main__": 안에서 시작합니다.
Usage
# Trainer 빌드
error, message, trainer = Trainer.build(CONFIG, DATA)
assert error >= 0, f"[CODE] ({error}) {message}"
# 0번 GPU로 이동
error, message, result = trainer.to_device(DEVICE)
assert error >= 0, f"[CODE] ({error}) {message}"
# validation 가능한지 확인
error, message, validation_enabled = trainer.validation_enabled()
assert error >= 0, f"[CODE] ({error}) {message}"
# 학습 루프
for step in range(CONFIG["total_iterations"]):
error, message, result = trainer.train_one_step()
assert error >= 0, f"[CODE] ({error}) {message}"
if (step + 1) % PRINT_INTERVAL == 0:
print(f"Train {step + 1}:", result)
if validation_enabled and (step + 1) % VALIDATION_INTERVAL == 0:
error, message, result = trainer.validate()
assert error >= 0, f"[CODE] ({error}) {message}"
print(f"Validation {step + 1}:", result)
# 학습 후처리 (default inference options)
error, message, post_train_process_result = trainer.post_train_process()
assert error >= 0, f"[CODE] ({error}) {message}"
print("post_train_process :", post_train_process_result)
# 체크포인트 저장
error, message, _ = trainer.save_checkpoint(
checkpoint_path=CHECKPOINT_PATH,
password=PASSWORD,
metadata={"description": "demo"},
)
build(config, data)
classmethod
Trainer class의 instance를 생성합니다.
Parameters:
Returns:
| Name | Type | Description |
|---|---|---|
Trainer |
Trainer
|
build가 완료된 classification.Trainer class의 instance를 반환합니다. |
to_device(device)
Trainer의 device를 변경합니다. (cpu/gpu)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
device |
Union[device, str, int]
|
변경하고자 하는 device 입니다.
|
required |
Returns: None: None
get_class_label_counts()
train_one_step()
학습을 1스텝 수행하고, 결과를 반환합니다.
Returns:
validation_enabled()
Trainer가 validation이 가능한지 bool로 반환합니다.
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
Trainer가 validation이 가능하면 True를, 불가능하다면 False를 반환합니다. |
validate()
Validation을 수행하고, 결과를 리턴합니다.
Returns:
post_train_process()
save_checkpoint(checkpoint_path, metadata=None, password=None)
현재 Trainer의 상태를 암호화하여 저장합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
checkpoint를 저장할 path 입니다. |
required |
metadata |
Optional[dict]
|
호출자가 정의하여 저장하는 추가 정보입니다. 고정 key나 자동으로 추가되는 key는 없으며, load_checkpoint()에서 반환합니다. 예: {"description": "demo"}에서 description (str)은 호출자가 정한 설명입니다. None이면 빈 dict를 저장합니다. Defaults to None. |
None
|
password |
Optional[str]
|
checkpoint 파일에서 중요한 정보를 암호화 하는데 사용되는 password 입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns: None: None
pause(checkpoint_path, metadata=None, password=None)
완료된 step의 학습 상태를 저장하고 일시정지합니다.
Model, optimizer, scheduler, AMP scaler, RNG, train loader의 소비 위치와 step/epoch counter를 저장합니다. Epoch 중간에도 다음 batch부터 재개할 수 있습니다. 실패하거나 미완료된 step은 저장할 수 없습니다. 실패 후 train_one_step()을 재시도할 수 있지만, 성공하거나 checkpoint를 resume하기 전까지 pause는 거부합니다. 재시도 자체가 실패 중 소비한 batch나 gradient를 되돌리지는 않습니다.
성공 후에는 resume() 전까지 학습할 수 없습니다. pause()가 프로세스를 종료하거나 GPU를 반환하지는 않으므로, 필요하면 제품에서 저장 성공 후 프로세스를 종료합니다. 일반 save_checkpoint()에는 재개용 학습 상태를 추가하지 않으며, 재개용 파일은 일반 checkpoint와 별도 경로에 저장합니다. 지원하지 않는 sampler를 사용하면 API 오류 코드 -411336을 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
재개용 checkpoint를 저장할 경로입니다. |
required |
metadata |
dict[str, Any] | None
|
None
|
|
password |
str | None
|
checkpoint 암호화에 사용할 password입니다. None이면 암호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
None |
None
|
API는 (error, message, None)을 반환합니다. error >= 0이면 저장이 완료되었으며, error < 0이면 저장에 실패한 것입니다. |
resume(checkpoint_path, password=None)
pause()로 저장한 학습 상태를 복원하고 다음 batch부터 재개합니다.
기존 Trainer 또는 동일한 원본 config(필드 순서 포함), data 순서, module version과 device/AMP 설정으로 build한 새 Trainer를 사용합니다. 이미지 내용의 hash는 검사하지 않습니다. pause() checkpoint만 허용하며, 일반 save_checkpoint() 파일로는 학습을 재개할 수 없습니다. 지원하지 않는 sampler를 사용하면 API 오류 코드 -411336을 반환합니다.
Sample별 Python/NumPy/Torch CPU 기본 RNG를 제어하여 학습 augmentation을 재현합니다. Custom transform의 자체 generator, CUDA augmentation 또는 다른 thread가 동시에 사용하는 global RNG는 별도 state 관리가 필요합니다. 복원한 step/epoch counter와 별개로, 호출자가 관리하는 외부 학습 loop의 시작 위치는 metadata 등을 사용하여 복원해야 합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
pause()로 저장한 재개용 checkpoint 경로입니다. |
required |
password |
str | None
|
pause()에서 사용한 password입니다. Defaults to None. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
dict[str, Any]: pause(metadata=...)에 전달한 호출자 정의 metadata입니다. metadata를 생략하거나 None으로 저장했다면 빈 dict를 반환합니다. 고정 key나 자동으로 추가되는 key는 없습니다. demo/train.py로 저장한 경우: completed_steps는 pause() 시 직접 저장한 경우에만 존재합니다. Model, optimizer, scheduler, AMP scaler, RNG, loader 및 내부 step 상태는 Trainer에 복원되며, 반환 metadata에는 자동으로 포함되지 않습니다. API는 (error, message, metadata)를 반환합니다. error < 0이면 metadata는 None이므로, 성공 여부를 먼저 확인해야 합니다. |
Usage
# 같은 config/data로 build하고 같은 device로 옮긴 Trainer를 사용합니다.
error, message, metadata = trainer.resume("./training.pause")
assert error >= 0, message
# pause() 예시처럼 completed_steps를 직접 저장한 경우에 사용합니다.
start_step = metadata["completed_steps"]
for step in range(start_step, CONFIG["total_iterations"]):
error, message, result = trainer.train_one_step()
assert error >= 0, message
load_checkpoint(checkpoint_path, password=None)
저장한 checkpoint로부터 Trainer의 상태를 불러오고, metadata를 반환합니다.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
checkpoint_path |
str
|
load할 checkpoint가 저장 되어 있는 path 입니다. |
required |
password |
Optional[str]
|
checkpoint 파일에서 중요한 정보를 복호화 하는데 사용되는 password 입니다. None이면 복호화하지 않습니다. Defaults to None. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
dict |
dict
|
save_checkpoint(metadata=...)에 전달한 호출자 정의 metadata입니다. metadata를 생략하거나 None으로 저장했다면 빈 dict를 반환합니다. 고정 key나 자동으로 추가되는 key는 없습니다. Trainer의 Usage 예시에서는: description은 save_checkpoint() 시 직접 저장한 경우에만 존재합니다. API는 (error, message, metadata)를 반환합니다. error < 0이면 metadata는 None이므로, 성공 여부를 먼저 확인해야 합니다. |