How-to guides
Simple AI Training 서비스의 Training Job을 생성하여 AI 학습 방식을 선택하고 학습을 진행할 수 있습니다.
Training Job 생성하기
Simple AI Training 서비스를 이용하려면 먼저 Training Job을 생성해야 합니다.
Trainging Job을 생성하려면 다음 절차를 따르세요.
모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
Service Home 페이지에서 Training Job 생성 버튼을 클릭하세요. Training Job 생성 페이지로 이동합니다.
Training Job 생성 페이지에서 서비스 생성에 필요한 정보들을 입력하고, 상세 옵션을 선택하세요.
- 필수 정보 입력 영역에서 Training Job 관련 필수 정보를 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| 학습 형태 | 필수 | 학습 방식을 선택- On-Demand Training: 학습을 원하는 시점에 서버를 선점하여 안정적으로 학습 진행
- Concurrent Checkpointing 기능 적용되어 효율적인 체크포인트 저장 지원
- Spot Training: 우선 순위가 낮은 학습에 대해 유휴 GPU를 사용하여 비용 효율적인 학습을 진행
- Concurrent Checkpointing 및 Mixed workload 기능 적용되어 학습의 연속성(자동 중단 및 시작) 지원
|
| Training Job명 | 필수 | Training Job 이름을 입력- 영문 소문자, 숫자, 특수문자(-.)를 사용하여 3 ~ 63자 이내로 입력
- 이름의 시작과 끝에 영문 소문자 또는 숫자 필수
|
| 분산 Framework | 필수 | 분산 Framework를 버전 선택 |
표. Training Job 필수 정보 입력 항목
- 서비스 정보 입력 영역에서 Training Job 생성에 필요한 옵션을 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| Job Failover | 선택 | Job Failover 기능의 사용 여부 선택- Spot Training 기능 사용 시 Job Failover 사용 불가
|
| 리소스 할당 | 필수 | 학습에 활용할 GPU 수 및 메모리 크기 선택 |
| 노드 수 | 필수 | 분산 학습 규모를 설정 |
| Shared Memory | 필수 | 분산 학습, 분산 데이터 처리를 위해 프로세스 간 공유할 메모리를 설정 |
표. Training Job 서비스 정보 입력 항목
- AI Training Image 정보 입력 영역에서 서비스 생성에 필요한 옵션을 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| AI Training Image URL | 필수 | 사용자의 컨테이너 저장소(SCR, Docker Hub 등) 주소를 입력 |
| 사용자 ID | 선택 | 이미지 저장소의 사용자 ID |
| 비밀번호 | 필수 | 이미지 저장소의 비밀번호 |
표. Training Job AI Training Image 정보 입력 입력 항목
- 학습 Command 및 볼륨 정보 입력 영역에서 필요한 정보를 입력 또는 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| 스토리지 연결 | 선택 | 추가 볼륨의 사용 여부를 선택- 사용 시 추가 보륨 Mount 경로 및 학습 스크립트 URL 입력 필
- File Storage Volume Mount Path: File Storage 연결 시 사용할 데이터 경로(예시: /root)
- Training Script 가져오기(Object Storage): Object Storage 연결 시 스크립트 URL 입력
|
| Command | 필수 | Command 정보를 3 ~ 1,024 이내로 입 |
표. Training Job AI Training Image 정보 입력 입력 항목
- 추가 정보 입력 영역에서 필요한 정보를 입력 또는 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| 태그 | 선택 | 태그 추가- 태그 추가 버튼을 클릭한 후 Key, Value 값을 입력 또는 선택
|
표. Training Job 학습 Command 및 볼륨 정보 입력 항목
요약 패널에서 생성한 상세 정보를 확인하고, 생성 버튼을 클릭하세요.
생성을 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
- 생성이 완료되면, Training Job 목록 페이지에서 생성한 자원을 확인하세요.
Training Job 상세 정보 확인하기
Training Job 서비스의 전체 자원 목록과 상세 정보를 확인하고 수정할 수 있습니다.
Training Job 상세정보를 확인하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 상세 정보를 확인할 자원을 클릭하세요. Training Job 상세 페이지로 이동합니다.
- Training Job 상세 페이지는 상세 정보, 모니터링, 로그, 태그 탭으로 구성됩니다.
| 구분 | 상세 설명 |
|---|
| 서비스 상태 | CloudML의 상태 |
| Training Job 삭제 | 서비스를 해지하는 버튼 |
표. Training Job 상세 페이지 항목
Training Job 목록 페이지에서 선택한 자원의 상세 정보를 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|
| 서비스 | 서비스명 |
| 자원 유형 | 자원 유형 |
| SRN | Samsung Cloud Platform에서의 고유 자원 ID |
| 자원명 | 자원 이름 |
| 자원 ID | 서비스에서의 고유 자원 ID |
| 생성자 | 서비스를 생성한 사용자 |
| 생성 일시 | 서비스를 생성한 일시 |
| 수정자 | 서비스 정보를 수정한 사용자 |
| 수정 일시 | 서비스 정보를 수정한 일시 |
| 학습 형태 | AI Training 학습 방식 |
| Training Job명 | Training Job 이름 |
| 분산 Framework | 분산 Framework 종류 |
| Job Failover | Job Failover 기능 사용 여부 |
| 리소스 할당 | 리소스로 할당된 GPU 및 메모리 정보 |
| 노드 수 | 노드 수 |
| Shared Memory | 프로세스 간 공유한 메모리 정보 |
| Command | Training Job 생성 시 입력한 Command 정보 |
| Image URL | 사용자의 컨테이너 저장소 주소 |
| File Storage Volume Mount Point | 추가 볼륨 사용 시 연결한 File Storage Mount 경로 |
| Traing Script URL | 추가 볼륨 사용 시 연결한 Object Storage 스크립트 URL |
표. Training Job 상세 정보 항목
모니터링
Training Job 목록 페이지에서 선택한 자원의 모니터링 정보를 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|
| 모니터링 | ServiceWatch 서비스의 모니터링 정보를 연계하여 표시- 모니터링 정보 클릭 시 ServiceWatch의 모니터링 상세 페이지로 이동
|
표. Training Job 모니터링 탭 항목
참고
Simple AI Training의 모니터링 지표는
ServiceWatch 지표를 참고하세요.
로그
Training Job 목록 페이지에서 선택한 자원의 로그 정보를 확인할 수 있습니다.
| 구분 | 상세 설명 |
|---|
| Job 로그 | ServiceWatch 서비스의 로그 정보를 연계하여 표시- 로그 정보 클릭 시 ServiceWatch의 로그 그룹 상세 페이지로 이동
|
표. Training Job 로그 탭 항목
참고
Training Job의 로그는 ServiceWatch 서비스와 연계되어 제공됩니다.
Training Job 로그를 확인하는 방법은
Training Job 로그 확인하기를 참고하세요.
태그
Training Job 목록 페이지에서 선택한 자원의 태그 정보를 확인하고, 추가하거나 변경 또는 삭제할 수 있습니다.
| 구분 | 상세 설명 |
|---|
| 태그 목록 | 태그 목록- 태그 입력 시 기존에 생성된 Key와 Value 목록을 검색하여 선택
|
표. Training Job 태그 탭 항목
Training Job 로그 확인하기
ServiceWatch 서비스에서 Training Job의 로그를 확인할 수 있습니다.
Training Job의 로그를 확인하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 로그를 확인할 자원을 선택하세요. Training Job 상세 페이지로 이동합니다.
- Training Job 상세 페이지에서 로그 탭을 클릭하세요. 해당 Job의 로그 정보가 표시됩니다.
- 로그 정보의 Training Job명 하단의 이름을 클릭하세요. ServiceWatch의 로그 그룹 상세 페이지로 이동합니다.
- 로그 그룹 상세 페이지에서 로그 스트림 탭을 클릭하세요. 로그 스트림 목록이 표시됩니다.
- 확인할 로그 스트림 이름(예시: master)을 클릭하세요. 해당 스트림의 로그가 시간순으로 표시됩니다.
- Failover가 발생한 경우, 장애로 중단되었던 학습의 로그와 재배치 후 다시 시작된 학습의 로그가 하나의 스트림에 함께 기록됩니다.
- 학습 시작 시 출력되는 초기화 로그(예시: Starting dataset initialization)가 두 번 이상 표시되면, 학습이 재배치되어 다시 시작되었음을 확인할 수 있습니다.
Training Job 삭제하기
사용하지 않는 Training Job을 삭제할 수 있습니다.
Training Job을 삭제하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 삭제할 자원을 선택한 후, 목록 상단의 삭제 버튼을 클릭하세요.
- 삭제할 자원을 클릭하여 Training Job 상세 페이지로 이동한 후, 개별적으로 삭제할 수도 있습니다.
- 삭제를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
Training Workspace 사용하기
Training Workspace를 사용하여 Simple AI Training 서비스를 이용할 수 있습니다.
Training Workspace 생성하기
Training Workspace를 생성하려면 다음 절차를 따르세요.
모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
Service Home 페이지에서 Training Workspace 메뉴를 클릭하세요. Training Workspace 목록 페이지로 이동합니다.
Training Workspace 목록 페이지에서 서비스 생성 버튼을 클릭하세요. Training Workspace 생성 페이지로 이동합니다.
서비스 생성에 필요한 정보들을 입력하고, 상세 옵션을 선택하세요.
- 서비스 정보 입력 영역에서 Training Workspace 생성에 필요한 옵션을 선택하세요.
| 구분 | 필수 여부 | 상세 설명 |
|---|
| Training Workspace명 | 필수 | Training Workspace 이름을 입력- 영문 소문자, 숫자, 특수문자(-.)를 사용하여 63자 이내로 입력
|
| 리소스 할당 | 필수 | 학습에 활용할 GPU 수 및 메모리 크기 선택 |
| 노드 수 | 필수 | 분산 학습 규모를 설정 |
| 약정 기간 | 필수 | 서비스 이용 약정 기간을 선택 |
표. Training Workspace 서비스 정보 입력 항목
요약 패널에서 생성한 상세 정보와 예상 청구 금액을 확인하고, 생성 버튼을 클릭하세요.
생성을 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
- 생성이 완료되면, Training Workspace 목록 페이지에서 생성한 자원을 확인하세요.
Training Workspace 수정하기
Training Workspace의 노드 수를 수정할 수 있습니다.
Training Workspace를 수정하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Workspace 메뉴를 클릭하세요. Training Workspace 목록 페이지로 이동합니다.
- Training Workspace 목록 페이지에서 수정할 자원의 더보기 > 수정 버튼을 클릭하세요. Training Workspace 수정 페이지로 이동합니다.
- Training Workspace 수정 페이지에서 노드 수를 확인하고 수정하세요.
- 수정이 완료되면 확인 버튼을 클릭하세요.
Training Workspace 삭제하기
사용하지 않는 Training Workspace를 삭제할 수 있습니다.
Training Workspace를 삭제하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Workspace 메뉴를 클릭하세요. Training Workspace 목록 페이지로 이동합니다.
- Training Workspace 목록 페이지에서 삭제할 자원을 선택한 후, 목록 상단의 서비스 해지 버튼을 클릭하세요.
- 삭제할 자원의 더보기 > 서비스 해지 버튼을 클릭하여 개별적으로 삭제할 수도 있습니다.
- 삭제를 알리는 팝업창이 열리면 확인 버튼을 클릭하세요.
1 - Job Failover 사용하기
Job Failover는 On-Demand Training으로 학습을 진행하는 도중 GPU 등 하드웨어 장애가 발생하더라도 학습이 중단되지 않도록 정상 자원으로 자동 재배치하여 학습을 이어가는 기능입니다.
Job Failover 기능을 사용하면 시스템 오류 및 하드웨어 장애 감지 시 사용자가 직접 장애를 확인하고 Job을 다시 생성할 필요 없이 학습의 연속성을 확보할 수 있습니다.
Job Failover 개요
Training Job 실행 중에는 학습이 배치된 노드에서 GPU 오류, 노드 장애 등 다양한 하드웨어 이상이 발생할 수 있습니다.
Job Failover 기능을 사용하면 이러한 하드웨어 장애가 감지되었을 때 시스템이 장애 노드를 회피하여 정상 자원으로 Training Job을 자동 재배치하고 학습을 재개합니다.
Job Failover의 주요 동작은 다음과 같습니다.
- 장애 감지: 학습이 실행 중인 노드의 GPU 및 하드웨어 상태를 지속적으로 점검하여 이상을 감지합니다.
- 자동 재배치: 하드웨어 장애로 판단되면 장애 노드를 제외하고 정상 노드로 Training Job을 재배치하여 학습을 다시 시작합니다.
- 불필요한 재배치 방지: 하드웨어 장애가 아닌 사용자 코드 오류, 설정 오류 등은 Failover 대상에서 제외됩니다.
- 재시도 횟수 제한: Failover는 정해진 최대 횟수(3회) 내에서만 수행되며, 이를 초과하면 학습이 실패로 종료됩니다.
Job Failover 사용 조건
- Job Failover는 Training Job 생성 시 학습 형태를 On-Demand Training 타입으로 선택한 경우에만 사용할 수 있습니다. Spot Training 사용 시에는 Job Failover를 사용할 수 없습니다.
- Job Failover 기능의 사용 여부는 Training Job 생성 시 서비스 정보 입력 영역의 Job Failover 항목에서 선택할 수 있습니다. 생성 이후에는 Training Job 상세 페이지의 상세 정보 탭에서 사용 여부를 확인할 수 있습니다.
안내
- Failover로 학습이 다른 자원에 재배치되면 학습이 중단된 시점의 메모리 상태는 유지되지 않습니다. 학습을 이어서 진행하려면 공유 스토리지(File Storage, Object Storage)에 체크포인트를 저장하도록 학습 스크립트를 구성하는 것을 권장합니다.
- Failover가 항상 즉시 실행을 보장하지는 않습니다.
- Failover로 재배치되는 Job은 우선 순위가 높게 설정되어 대기 중인 다른 Job 보다 먼저 자원을 할당받아 실행됩니다.
- 단, 재배치 시점에 이미 대기열에 들어와 있던 Job의 우선순위와 대기 순서에 따라 재배치되는 Job이 해당 Job들 보다 늦게 실행될 수 있습니다.
- Job의 재배치 여부를 결정하기 위해 노드 상태를 점검하는 동안(최대 5분) Job이 Pending - failoverinprogress 상태에 머무를 수 있습니다.
오류 원인 점검
시스템은 학습 중단이 발생하면 노드의 GPU 및 하드웨어 상태를 점검하여, 그 원인이 하드웨어 장애인지 아니면 사용자 애플리케이션, 설정과 같은 하드웨어 이외의 문제인지 판단합니다.
Failover 수행 여부는 이 판단 결과에 따라 결정됩니다.
하드웨어 장애로 판단되는 경우
GPU를 정상적으로 사용할 수 없는 물리적, 하드웨어 수준의 오류가 감지되면 하드웨어 장애로 판단하여 Failover를 수행합니다.
이러한 오류는 해당 노드에서 학습을 계속할 수 없으므로 장애 노드를 제외하고 정상 자원으로 재배치하여 학습을 재개합니다.
하드웨어 장애로 판단되는 오류 예시는 다음과 같습니다.
| XID 코드 | 오류 | 설명 |
|---|
| 48 | GPU 메모리(HBM) 복구 불가능 오류 (Uncorrectable Double Bit ECC) | - GPU의 대용량 메모리에서 스스로 정정할 수 없는 손상이 발생한 경우
- 해당 GPU의 연산 결과를 신뢰할 수 없어 계속 사용 불가
|
| 79 | GPU가 시스템에서 분리됨 (GPU fallen off the bus) | - 시스템이 GPU 자체를 더 이상 인식하지 못하는 상태
|
| 94, 95 | GPU 내부 메모리(SRAM) 복구 불가능 오류 | - GPU 칩 내부의 고속 메모리에서 정정할 수 없는 오류가 발생
|
| - | GPU 과열, 전원 공급 장치(PSU), PCIe 등 하드웨어 구성 요소 장애 | - 온도가 허용치를 초과하거나 전원 또는 연결 부품에 문제가 생긴 경우
|
표. 하드웨어 장애로 판단되는 오류 예시
참고
XID 코드: NVIDIA GPU 드라이버가 오류 종류를 구분하기 위해 부여하는 번호로써, GPU 로그에서 오류 원인을 파악하는 데 참고할 수 있습니다.
내부 오류로 판단되는 경우
학습 중단의 원인이 하드웨어 장애가 아니라 사용자 애플리케이션 코드나 설정 문제로 판단되면, 재배치를 하더라도 동일한 문제가 반복될 가능성이 높으므로 Failover를 거부하고 internalerror 상태로 종료합니다.
내부 오류로 판단되는 오류 예시는 다음과 같습니다.
| XID 코드 | 오류 | 설명 |
|---|
| - | 메모리 부족으로 인한 강제 종료 (Out Of Memory) | - 학습 프로그램이 할당된 GPU 또는 시스템 메모리보다 많은 메모리를 사용하려다 강제 종료된 경우
GPU 메모리 하드웨어 오류(XID 48)가 아닌 자원 부족 및 설정 문제그대로 재배치해도 동일하게 발생하므로 배치 크기(Batch size) 축소, 메모리 할당량 상향 등 학습 설정 조정 필요 |
| 31 | GPU 메모리 페이지 폴트 | - 학습 프로그램이 허용되지 않은 메모리 영역에 접근하려다 발생하는 오류
|
| 43 | GPU 처리 중단 | - 실행 중인 프로그램에서 오류가 발생해 GPU 작업이 중단된 경우
|
| 13 | 그래픽·컴퓨트 엔진 예외 | - GPU에 전달된 명령이 잘못되어 발생하는 경우
|
| - | GPU 설정 경고, 소프트웨어 오류 등 | - 하드웨어 자체는 정상이나 설정·소프트웨어 수준의 문제
|
표. 내부 오류로 판단되는 오류 예시
참고
- XID 코드: NVIDIA GPU 드라이버가 오류 종류를 구분하기 위해 부여하는 번호로써, GPU 로그에서 오류 원인을 파악하는 데 참고할 수 있습니다.
- 이 경우에는 학습 스크립트와 실행 Command, 입력 데이터, 리소스 설정 등을 점검하세요. 로그 확인 방법에 대한 자세한 내용은 Job Failover 로그 확인하기를 참고하세요.
Job Failover 상태 확인하기
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 Job의 상태를 확인하세요.
- Failover 사용 여부와 하드웨어 장애 판단 결과에 따른 상태 흐름은 다음과 같습니다.
| 구분 | 상세 설명 |
|---|
| Failover 성공 | 하드웨어 장애가 감지되어 정상 자원으로 재배치가 완료된 상태- Running → Pending - failoverinprogress → Running 순서로 상태가 변경되면 Failover가 정상적으로 수행되어 학습 재개 완료
|
| Failover 거부 | 학습이 중단되었으나 하드웨어 장애 신호가 확인되지 않아 재배치 대상이 아니라고 판단된 상태- Running → Pending - failoverinprogress → Pending - internalerror 순서로 상태가 변경되면 Failover가 거부
- 사용자 코드 오류와 같이 하드웨어 이외의 원인일 수 있으므로 로그 확인 필요
|
| |
| Failover 미설정 | Job Failover를 사용하지 않도록 설정한 상태- 학습 중단이 발생하면 재배치를 시도하지 않고 Running → Failed 순서로 학습을 종료
|
표. Job Failover에 따른 상태 흐름
- Failover 진행 중 표시되는 주요 상태값은 다음과 같습니다.
| 상태 | 상세 설명 |
|---|
| Pending - failoverinprogress | 하드웨어 장애를 감지하고 Failover 가능 여부를 판단하거나 정상 자원으로 재배치를 진행 중인 상태 |
| Pending - maxretriesexceeded | Failover 최대 시도 횟수를 초과하여 더 이상 재배치를 수행하지 않는 상태 |
| Pending - imagepullbackoff | 컨테이너 이미지를 불러오지 못해 학습을 시작할 수 없는 상태(이미지 URL 및 인증 정보 확인 필요) |
| Pending - internalerror | 하드웨어 장애 신호가 확인되지 않는 등 Failover 대상이 아니라고 판단되어 재배치가 거부된 상태 |
표. Job Failover 진행 중 주요 상태값
Job Failover 로그 확인하기
Failover가 발생한 경우, 장애로 중단된 이전 학습의 로그와 재배치 후에 재개된 학습의 로그를 하나의 로그 스트림에서 함께 확인할 수 있습니다.
참고
Training Job의 로그는 ServiceWatch 서비스와 연계되어 제공됩니다.
Training Job 로그를 확인하는 방법은
Training Job 로그 확인하기를 참고하세요.
Job Failover의 로그를 확인하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 로그를 확인할 자원을 선택하세요. Training Job 상세 페이지로 이동합니다.
- Training Job 상세 페이지에서 로그 탭을 클릭하세요. 해당 Job의 로그 정보가 표시됩니다.
- 로그 정보의 Training Job명 하단의 이름을 클릭하세요. ServiceWatch의 로그 그룹 상세 페이지로 이동합니다.
- 로그 그룹 상세 페이지에서 로그 스트림 탭을 클릭하세요. 로그 스트림 목록이 표시됩니다.
- 확인할 로그 스트림 이름(예시: master)을 클릭하세요. 해당 스트림의 로그가 시간순으로 표시됩니다.
- Failover가 발생한 경우, 장애로 중단되었던 학습의 로그와 재배치 후 다시 시작된 학습의 로그가 하나의 스트림에 함께 기록됩니다.
- 학습 시작 시 출력되는 초기화 로그(예시: Starting dataset initialization)가 두 번 이상 표시되면, 학습이 재배치되어 다시 시작되었음을 확인할 수 있습니다.
2 - Concurrent Checkpointing
Concurrent Checkpointing은 기존 방식과 달리 Forward/Backward 연산 중에도 체크포인트를 비동기적으로 저장하는 기능입니다.
따라서 이 기능을 사용하여 체크포인트 저장으로 인한 오버헤드를 줄여 전체 학습 시간을 효율적으로 단축하고, 예측 불가능한 학습 중단 발생 시 유실될 수 있는 학습 진행 상태를 자동으로 저장할 수 있습니다.
Concurrent Checkpointing 개요
Simple AI Training에서 제공하는 Training Job은 On-Demand Training 타입과 Spot Training 타입이 있습니다.
Concurrent Checkpointing은 두 가지 타입에서 모두 사용할 수 있으나 타입별로 기능의 활용 범위가 다릅니다. 타입별 활용 범위는 다음과 같습니다.
| 타입 | 활용 범위 |
|---|
| On-Demand Training | - 학습 체크포인트 자동 저장(학습 데이터 유실 방지)
|
| Spot Training | - 학습 체크포인트 자동 저장(유휴 GPU 회수로 학습 중단 시 데이터 유실 방지)
- 유휴 GPU 재할당으로 학습 재개 시 체크포인트 자동 로드 및 무중단 학습
|
표. Training Job 타입별 Concurrent Checkpointing 활용 범위
Concurrent Checkpointing 사용하기
사전 준비하기: 스크립트 작성
사용자는 Trainer, Concurrent Checkpoint의 save method를 동시에 사용할 수 있습니다.
참고
- Concurrent Checkpoint가 저장하는 체크포인트는 safetensor format이 아닙니다. 따라서 추후 safetensor format이 필요하다면 Huggingface Trainer의 checkpointing 기능도 함께 사용하는 것을 권장합니다.
- Concurrent Checkpoint가
TrainingArgument중 공유하는 것은 output_dir입니다. - Concurrent Checkpoint가 유지하는 checkpoint수는 최대 3개입니다.
Spot Training 사용법
Spot Training 사용 시 스크립트 예시는 다음과 같습니다.
|language = python | title = Training Script Example | collapse = true
// transformers==5.10.2 기준으로 작성합니다.
import os
import torch
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
Trainer,
TrainingArguments,
DataCollatorForLanguageModeling
)
from datasets import load_dataset
import json
from datastates.llm import DecoratedCheckpointing
import argparse
import logging
import time
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--local_rank",
type=int,
default=-1,
help="local rank passed from distributed launcher (Deepspeed, torchrun, etc.)"
)
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
model_path="/root/.cache/huggingface/hub/models--meta-llama--Llama-3.2-1B/snapshots/4e20de362430cd3b72f300e6b0f18e50e7166e08"
# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
# Set pad token to EOS if not already defined
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
# Load WikiText-2 dataset
dataset = load_dataset("wikitext", "wikitext-2-raw-v1",cache_dir="/root/.cache/huggingface/datasets")
# Tokenization function
def tokenize_function(examples):
return tokenizer(
examples["text"],
truncation=True,
max_length=128,
padding="max_length"
)
# Tokenize the dataset
tokenized_dataset = dataset.map(
tokenize_function,
batched=True,
remove_columns=["text"]
)
train_dataset = tokenized_dataset["train"]
valid_dataset = tokenized_dataset["validation"]
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False # Causal LM (not masked LM)
)
script_directory = os.path.dirname(os.path.abspath(__file__))
ds_config_path = os.path.join(script_directory, "ds_config.json")
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=2, # Adjust based on GPU memory
gradient_accumulation_steps=4, # Effective batch size = batch_size * gradient_accumulation_steps
save_strategy="steps",
save_steps=200,
logging_steps=2,
eval_strategy="steps",
eval_steps=100,
bf16=True, # Enable BF16 mixed precision (use fp16 if unsupported)
deepspeed=ds_config_path, # Path to DeepSpeed config file
report_to="none",
)
model = AutoModelForCausalLM.from_pretrained( model_path, local_files_only=True, low_cpu_mem_usage=True, device_map=None)
# Initialize Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=valid_dataset, # Optional: validation set for evaluation
processing_class=tokenizer,
data_collator=data_collator,
)
# ADD configuration for Concurrent CHECKPOINT ENGINE
config = {
"host_cache_size": 50,
"parser_threads": 1,
"pin_host_cache": True,
"trainer": trainer,
}
ckpt_engine = DecoratedCheckpointing(runtime_config=config, rank=args.local_rank)
resume_from_checkpoint=False
if os.getenv("CKPT_LAST_STEP") != None :
resume_from_checkpoint=True
trainer.train(resume_from_checkpoint=resume_from_checkpoint)
// transformers==5.10.2 기준으로 작성합니다.
import os
import torch
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
Trainer,
TrainingArguments,
DataCollatorForLanguageModeling
)
from datasets import load_dataset
import json
from datastates.llm import DecoratedCheckpointing
import argparse
import logging
import time
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--local_rank",
type=int,
default=-1,
help="local rank passed from distributed launcher (Deepspeed, torchrun, etc.)"
)
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
model_path="/root/.cache/huggingface/hub/models--meta-llama--Llama-3.2-1B/snapshots/4e20de362430cd3b72f300e6b0f18e50e7166e08"
# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_path, local_files_only=True)
# Set pad token to EOS if not already defined
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
# Load WikiText-2 dataset
dataset = load_dataset("wikitext", "wikitext-2-raw-v1",cache_dir="/root/.cache/huggingface/datasets")
# Tokenization function
def tokenize_function(examples):
return tokenizer(
examples["text"],
truncation=True,
max_length=128,
padding="max_length"
)
# Tokenize the dataset
tokenized_dataset = dataset.map(
tokenize_function,
batched=True,
remove_columns=["text"]
)
train_dataset = tokenized_dataset["train"]
valid_dataset = tokenized_dataset["validation"]
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False # Causal LM (not masked LM)
)
script_directory = os.path.dirname(os.path.abspath(__file__))
ds_config_path = os.path.join(script_directory, "ds_config.json")
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=2, # Adjust based on GPU memory
gradient_accumulation_steps=4, # Effective batch size = batch_size * gradient_accumulation_steps
save_strategy="steps",
save_steps=200,
logging_steps=2,
eval_strategy="steps",
eval_steps=100,
bf16=True, # Enable BF16 mixed precision (use fp16 if unsupported)
deepspeed=ds_config_path, # Path to DeepSpeed config file
report_to="none",
)
model = AutoModelForCausalLM.from_pretrained( model_path, local_files_only=True, low_cpu_mem_usage=True, device_map=None)
# Initialize Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=valid_dataset, # Optional: validation set for evaluation
processing_class=tokenizer,
data_collator=data_collator,
)
# ADD configuration for Concurrent CHECKPOINT ENGINE
config = {
"host_cache_size": 50,
"parser_threads": 1,
"pin_host_cache": True,
"trainer": trainer,
}
ckpt_engine = DecoratedCheckpointing(runtime_config=config, rank=args.local_rank)
resume_from_checkpoint=False
if os.getenv("CKPT_LAST_STEP") != None :
resume_from_checkpoint=True
trainer.train(resume_from_checkpoint=resume_from_checkpoint)
코드블록. Spot Training 사용 시 스크립트 예시다음 절차의 예시를 참고하여 스크립트를 작성하세요.
- Import Concurrent CHECKPOINT
from datastates.llm import DecoratedCheckpointing
...
- ADD configuration for Concurrent CHECKPOINT ENGINE
config = {
"host_cache_size": 50,
"parser_threads": 1,
"pin_host_cache": True,
"trainer": trainer,
}
참고
예시 그대로 입력하는 것을 추천하며, 메모리 이슈 발생 시 담당자에게 host_cache_size 가용 가능 값을 요청합니다.
host_cache_size: 사용될 host의 pinned memory 크기이며 단위는 GB입니다.trainer: 위에서 초기화한 huggingface trainer를 넣어줍니다.
- Initialize Concurrent CHECKPOINT ENGINE
ckpt_engine = DecoratedCheckpointing(runtime_config=config, rank=args.local_rank)
- Set Concurrent CHECKPOINT ENGINE parameter
resume_from_checkpoint=False
if os.getenv("CKPT_LAST_STEP") != None :
resume_from_checkpoint=True
trainer.train(resume_from_checkpoint=resume_from_checkpoint)
참고
유휴 GPU를 재할당하여 학습 재개 시 체크포인트 자동 로드 및 무중단 학습을 위한 옵션이 활성화됩니다.
Concurrent Checkpoint 저장 경로
저장 경로는 기본적으로 TrainingArgument의 output_dir을 기반으로 합니다.
해당 output_dir 하위 경로에 concurrent_checkpoint라는 디렉토리 하위에 저장됩니다.
참고
체크포인트 자동 또는 수동 로드 시 output_dir 경로에 저장된 checkpoint중 가장 최신(예시: 가장 step 숫자가 큰 checkpoint)으로 로드됩니다.
On-Demand Training 사용하기
On-Demand Training 사용 방법 Spot Training 사용 방법과 유사합니다.
안내
현재 자동 Parameter 기능은 지원하지 않으며 수동으로만 활성화할 수 있습니다.
최초 학습
다음 절차의 예시를 참고하여 스크립트를 작성하세요.
- Import Concurrent CHECKPOINT
from datastates.llm import DecoratedCheckpointing
...
- ADD configuration for Concurrent CHECKPOINT ENGINE
config = {
"host_cache_size": 50,
"parser_threads": 1,
"pin_host_cache": True,
"trainer": trainer,
}
참고
예시 그대로 입력하는 것을 추천하며, 메모리 이슈 발생 시 담당자에게 host_cache_size 가용 가능 값을 요청합니다.
host_cache_size: 사용될 host의 pinned memory 크기이며 단위는 GB입니다.trainer: 위에서 초기화한 huggingface trainer를 넣어줍니다.
- Initialize Concurrent CHECKPOINT ENGINE
ckpt_engine = DecoratedCheckpointing(runtime_config=config, rank=args.local_rank)
- Set Concurrent CHECKPOINT ENGINE parameter
trainer.train(resume_from_checkpoint=False)
수동 활성화 시
최초 학습 시 지정한 output_dir 경로에 유효한 체크포인트가 확인될 경우, 학습 재실행 시 해당 체크포인트 경로를 직접 model initialize 시 지정하여 로드합니다.
또는 학습을 재실행할 때 기존 output_dir과 동일하게 지정하고 다음과 같이 설정하여 최신 체크포인트를 자동으로 로드할 수 있습니다.
주의
수동으로 활성화한 경우, 해당 체크포인트의 유효 여부를 보장할 수 없습니다.
다음 절차의 예시를 참고하여 스크립트를 작성하세요.
- Import Concurrent CHECKPOINT
from datastates.llm import DecoratedCheckpointing
...
- ADD configuration for Concurrent CHECKPOINT ENGINE
config = {
"host_cache_size": 50,
"parser_threads": 1,
"pin_host_cache": True,
"trainer": trainer,
}
참고
예시 그대로 입력하는 것을 추천하며, 메모리 이슈 발생 시 담당자에게 host_cache_size 가용 가능 값을 요청합니다.
host_cache_size: 사용될 host의 pinned memory 크기이며 단위는 GB입니다.trainer: 위에서 초기화한 huggingface trainer를 넣어줍니다.
- Initialize Concurrent CHECKPOINT ENGINE
ckpt_engine = DecoratedCheckpointing(runtime_config=config, rank=args.local_rank)
- Set Concurrent CHECKPOINT ENGINE parameter
trainer.train(resume_from_checkpoint=True)
Job 실행하기
Training Job 생성 화면의 Command 필드에 사용하고자 하는 명령어와 함께 기능 관련 환경 변수를 추가하여 실행합니다.
안내
Training Job 실행 방법은 On-Demand Training 타입과 Spot Training 타입 모두 동일합니다.
| language = go
PYTHONPATH=$CHECKPOINT_VENDOR HF_DATASETS_OFFLINE="1" ${USER_SCRIPT}
PYTHONPATH=$CHECKPOINT_VENDOR: 기능 활성화를 위한 라이브러리 경로를 로드하도록 설정합니다.HF_DATASETS_OFFLINE=“1”: Samsung Cloud Platform 망은 huggingface 로그인 및 모델/데이터셋 다운로드를 지원하지 않습니다. 따라서 사용자 스크립트에서 huggingface 네트워크 호출을 방지하는 용도로 설정합니다.
예시
기본 코드
| language = actionscript
python /mnt/experiment/training/compatiblitiy-test/version_check.py
deepspeed --num_gpus=2 /mnt/experiment/training/compatiblitiy-test/train_llama_8b-demo.py
accelerate launch --config_file /mnt/experiment/training/compatiblitiy-test/sat-test/fsdp_config.yaml --num_processes 4 /mnt/experiment/training/compatiblitiy-test/sat-test/train_llama_1b-demo.py
기능 사용 시
| language = actionscript
PYTHONPATH=$CHECKPOINT_VENDOR python /mnt/experiment/training/compatiblitiy-test/version_check.py
PYTHONPATH=$CHECKPOINT_VENDOR deepspeed --num_gpus=4 /mnt/experiment/training/compatiblitiy-test/train_llama_8b-demo.py
PYTHONPATH=$CHECKPOINT_VENDOR accelerate launch --config_file /mnt/experiment/training/compatiblitiy-test/sat-test/fsdp_config.yaml --num_processes 4 /mnt/experiment/training/compatiblitiy-test/sat-test/train_llama_1b-demo.py
주의
해당 기능을 활성화하면 라이브러리 경로에 설치된 Python 패키지 버전이 우선 실행됩니다.
(예시: 사용자 이미지 torch 버전 2.11 → torch 2.12.1 로 실행)
transformers==5.10.2
numpy==2.4.6
pybind11==3.0.4
safetensors==0.8.0
torch==2.12.1
torchvision==0.27.1
datasets==4.8.4
pytest
cuda-bindings~=13.2.0
packaging<=26.0
#--- test deepspeed version library
deepspeed==0.18.9
accelerate==1.13.0
진행 상황 확인
진행 상황은 Training Job 상세 페이지의 로그 탭에서 확인할 수 있습니다.
진행 상황을 확인하려면 다음 절차를 따르세요.
- 모든 서비스 > AI/ML > Simple AI Training 메뉴를 클릭하세요. Simple AI Training의 Service Home 페이지로 이동합니다.
- Service Home 페이지에서 Training Job 메뉴를 클릭하세요. Training Job 목록 페이지로 이동합니다.
- Training Job 목록 페이지에서 상세 정보를 확인할 자원을 클릭하세요. Training Job 상세 페이지로 이동합니다.
- 로그 탭을 클릭한 후, 로그를 확인하세요. 환경 준비 상태로 로그를 확인할 수 있습니다.
| language = actionscript | title =
[INFO] Concurrent Checkpoint library is installed
waiting for validator through /channel/stage.socket...
validator is running....
sidecar container is running and ready for training process to run!
안내
- 사용 환경은 Concurrent Checkpoint 기능의 사용 여부와 상관 없이 On-Demand Training 타입과 Spot Training 타입 모두 제공됩니다.
- On-Demand Training 타입의 경우, 자동 Parameter 기능을 지원하지 않으므로 기능 사용 시 다음과 같이 Parameter 관련 에러 로그가 발생할 수 있습니다. 단, 최신 체크포인트 로드 기능은 정상 동작합니다.
| language = actionscript | title =
[2026-07-10 01:50:09,939] [ERROR] [decorator.py:442:get_last_checkpoint_preprocess] [Concurrent Checkpoint] No Checkpoint found with step: -1
ERROR:datastates.llm.decorator:[Concurrent Checkpoint] No Checkpoint found with step: -1