실험
우수한 성능의 기계학습 모델을 만들기 위해서는 데이터세트, 하이퍼파라미터, 피쳐, 알고리즘 등 여러 조건 간의 최적의 조합을 찾아야 합니다. 이를 위해서는 수많은 반복 작업과 시행착오가 필요합니다. 실험은 학습, 추적, 분석, 비교 및 평가 등 반복되는 작업을 손쉽게 수행할 수 있도록 제공하는 것이 목표입니다.
실험(Experiments)은 지정된 스크립트인 실행의 묶음입니다. 실험은 Kakao i Machine Learning 워크스페이스 하위에 포함되며, 실행 정보는 지정한 실험 하위에 저장됩니다.
-
실험 하위의 실행 간 결과는 텐서보드(TensorBoard)에서 비교 분석할 수 있습니다.
-
텐서보드를 이용하기 위해서는 실행을 구성하는 학습 스크립트에 메트릭, 지표, 아티팩트 등을 비교할 수 있도록 로그를 남기는 코드를 삽입해야 합니다. 프레임워크에 따른 텐서보드 활용 코드는 PyTorch와 TensorFlow에서 제공하는 TensorBoard 가이드를 참고하시기 바랍니다.
실험 이름
표실험 이름 설정항목 | 설명 |
---|---|
실험 이름 | 실험의 이름으로, 워크스페이스 내에서 고유함 - 공백 없이 영어 소문자(a-z), 숫자(0-9), 하이픈( - )만 사용- 소문자(a-z)로 시작하며, 소문자(a-z) 또는 숫자(0-9)로 끝나야 됨 - 2~63자 입력 가능 |
실험 설명(선택) | 실험 설명이 필요할 경우 입력 - 최대 1,024자 이내로 작성 |
실행
안내
Python 3.8 ~ 3.10 버전을 지원합니다.
실행(Run)은 기계학습 모델 학습을 위한 스크립트의 단일 작업입니다. 실험은 일반적으로 여러 실행을 포함합니다. Kakao i Machine Learning은 모든 실행을 기록하고, 실험에 아래 정보를 저장합니다.
- 실행 메타데이터
- 스크립트에 기록된 메트릭
- 실험에서 자동으로 수집되거나, 사용자가 명시적으로 업로드한 출력 파일
- 실행 전 스크립트를 포함한 디렉토리 스냅샷
실행 구성
실행 제출 시 입력하는 정보는 아래와 같습니다.
표실험 구성구분 | 항목 | 설명 |
---|---|---|
기본 설정 | 실험 | 실행이 속할 실험 - 동일한 실험에 속한 실행들 간의 실행 결과를 자동으로 비교 분석 |
실행 이름 | 실행을 구분 짓는 실행 이름 - 영어 소문자(a-z), 숫자(0-9), 하이픈( - )만 사용 가능- 영어 소문자(a-z)로 시작하며, 소문자(a-z) 또는 숫자(0-9)로 끝나야 됨 - 2~63자 입력 가능 - 워크스페이스 내 다른 실행 이름과 중복 불가 |
|
실행 설명(선택) | 생성하는 실행을 설명하는 텍스트 - 최대 1,024자 이내로 작성 |
|
인스턴스 구성 | 실행 작업을 수행할 인스턴스 타입 - 워크스페이스마다 사용 가능한 인스턴스의 타입이 다를 수 있음 - 실행은 워크스페이스의 학습용 컴퓨팅 자원 쿼터를 점유하며, 쿼터의 여유가 있을 경우에만 신규 실행을 생성할 수 있음 |
|
인스턴스 개수 | 선택한 인스턴스 타입의 개수 - 워크스페이스 쿼터를 초과할 경우, 실행 생성 불가 - 분산 학습은 2개 이상 선택 |
|
이미지 | 실행 작업을 수행할 인스턴스 타입을 구성할 컨테이너 이미지 - KiML에서 제공하는 기본 이미지 또는 사용자가 미리 구성한 커스텀 이미지를 선택할 수 있음 |
|
태그(선택) | 실행에 대한 메타 정보를 관리하기 위한 태그 - 키와 값으로 구성되어 있음 - 키의 검증 규칙 * 영어(A-z), 숫자(0-9), 하이픈( - ), 밑줄(_ )만 사용 가능* 영어(A-z) 또는 숫자(0-9)로 시작해야 함 * 2~63자 입력 가능 - 값의 검증 규칙 * 영어(A-z), 숫자(0-9), 하이픈( - ), 밑줄(_ )만 사용 가능 |
|
실행 구성 | 실행 인풋(선택) | 실행 작업 수행 시 사용할 데이터세트 - 사용자가 사전에 정의한 데이터세트 선택 - 선택한 데이터세트는 실행을 학습하는 동안 /app/input/dataset/{dataset-name} 경로에 마운트됨 |
실행 아웃풋 | 실행 작업의 수행 결과가 저장되는 위치 - 워크스페이스의 default 스토리지에 저장 - 저장 위치: default/experiments/{experiment-id}/runs/{run-name}/outputs |
|
소스 디렉토리 | 모델을 학습할 소스 코드 - 기본값: pwd - 콘솔: tar.gz 압축 파일만 업로드 가능 (파일 크기: 최대 100MB)- 입력 예시 * Linux 또는 Mac 환경: --source-directory ./src * Windows 환경: --source-directory C:\src |
|
명령어 | 사용자가 제출한 소스 코드를 실행하기 위한 스크립트 명령어 | |
- 주의: Kakao i Machine Learning 공공 클라우드 환경에서 실행(Run) 제출 시, 스크립트 명령어에 아래 특수문자가 포함될 경우 오류가 발생할 수 있습니다. 스크립트 명령어는 python 또는 torchrun 으로 시작해야 합니다.* & , \ , ; , | |
||
환경 변수 | 사용자가 제출한 소스 코드에서 참조하기 위한 환경 변수 - KiML 시스템에서 자동으로 삽입하는 예약 환경 변수는 사용할 수 없음 |
실행 특이사항
- Training Job을 지원합니다.
- 실행을 제출할 때, 지정한 실행 이름이 없는 경우는 제출 시간으로 실행 이름이 생성됩니다.
- 실행 제출 시 입력하는 스크립트 명령어는 Python 또는 torchRun만 실행됩니다.
- TensorBoard를 이용하여 같은 실행 지표를 시각화하거나, 실험에 포함된 실행 간에 비교를 할 수 있습니다.
- 실행을 다른 실험으로 옮길 수 없습니다.
- 실행을 모델로 등록할 수 있습니다. 단, 학습이 완료된 실행만 모델로 등록할 수 없습니다.
- 실행 제출 시 빌드가 완료된
Succeeded
또는Registered
상태의 커스텀 이미지만 선택할 수 있습니다. 8A100-64-IB
은 분산 학습 전용 인스턴스 타입입니다. 인스턴스 개수는 2개 이상으로 선택한 후 생성이 가능합니다.- 실행이 잡(Job)을 수행할 때, 컨테이너 프로세스는 UID 1000번 사용자 계정으로 실행됩니다. UID 1000번은 일반 사용자 권한입니다.
- 데이터세트는 등록한 스토리지 디렉토리를 마운트합니다. 해당 디렉토리의 스토리지 권한은 read-only 입니다.
- 학습 결과는 실행 결과를 별도로 저장할 경우
/app/outputs
경로에 저장됩니다. 해당 디렉토리의 스토리지 권한은 read, write 입니다.
주의
- 실행 생성 시, 소스코드 제출을 위한 압축파일 유형은
tar.gz
가능합니다.zip
또는tar
압축파일은 준비 중입니다.- 실행 생성 시, 워크스페이스 학습용 컴퓨팅 자원 쿼터 내에서 인스턴스 구성을 선택할 수 있습니다. 잔여 워크스페이스 쿼터가 있는 경우에만 신규 실행을 생성/제출할 수 있습니다.
- 실행 생성 후, 인스턴스 구성(타입과 개수)을 변경할 수 없습니다.
Initializing
,Running
,Pending
상태의 실행(Run)은 워크스페이스 쿼터를 점유합니다.
실행 상태값
표실행 상태값상태 | 설명 |
---|---|
Pending | 실행 생성 요청 직후 상태 |
Initializing | 실행의 Job이 생성되기 전 준비 상태 |
Running | 요청한 Job이 진행 중인 상태 |
Completed | 요청한 Job이 완료된 상태 |
Stopping | 요청한 Job이 완료되기 전에 취소 요청하여 취소 중인 상태 |
Stopped | 요청한 Job이 완료되기 전에 취소한 상태 |
Failed | 실행이 정상적으로 완료되기 않은 상태 |
Issued | Kakao i Machine Learning에서 일시적으로 오류가 발생한 상태 |
ImagePullBackOff | Docker Image 방식으로 커스텀 이미지를 생성한 경우, Docker Image를 정상적으로 불러오지 못하는 상태 - 주기적으로 이미지 불러오기를 시도하며, 재시도하는 과정에서 Initializing 상태로 변경됨- 비공개 레지스트리에 저장된 Docker Image일 경우, ID/Secret 정보 입력 필수 - 학습용 쿼터는 회수되지 않음 |
실행 이름
표실행 이름 설정항목 | 설명 |
---|---|
실행 이름 | 실행의 이름으로, 실험 내에서 고유해야 함 - 공백 없이 영어 소문자(a-z), 숫자(0-9), 하이픈( - )만 사용- 영어 소문자(a-z)로 시작하며, 소문자(a-z) 또는 숫자(0-9)로 끝나야 됨 - 2~63자 입력 가능 |
실행 설명(선택) | 실행 설명이 필요할 경우 입력 - 최대 1,024자 이내로 작성 |
실행 복사
기존에 생성한 실행과 동일한 정보의 실행을 다시 만들 수 있습니다. 실행을 복사한 후 일부 정보를 수정하여 재학습을 요청할 수 있습니다. 복사한 실행 이름은 copy-of-{원본 실행 이름}
으로 자동 생성되며, 변경 가능합니다
안내
- KiML CLI 명령어로 실행 복사하는 기능은 추후 지원할 예정입니다.
- 소스 코드 파일은 재업로드가 필요합니다.
실행 모니터링
실행 상세 정보에서 실행 및 파드 단위로 컴퓨팅 자원 사용량을 실시간으로 조회할 수 있습니다.
- GPU, GPU Memory Utilization
- vCPU, vCPU Memory Utilization
- Power Consumption
- Network I/O Bandwith
실행 로그
실행 작업 로그를 표준 출력(stdout), 표준 오류(stderr) 방식으로 제공합니다.
- 최대 20MB 크기의 로그를 조회할 수 있습니다. 저장 용량 초과 시, 과거 데이터부터 로그가 삭제됩니다.
- 학습 시 요청한 로그의 양이 많을 경우 로그 짤림 현상이 발생할 수 있습니다. 출력할 로그의 크기를 45MB 이하 수준으로 권장드립니다.
예약 환경 변수
실행(Run)을 수행하기 위해 생성되는 Node(노드)에는 다음과 같은 전용 환경 변수가 정의됩니다. 예약 환경 변수를 설정하여 분산 학습을 실행할 수 있습니다.
표전용 환경 변수프레임워크 | 항목 | 설명 | 예시 값 |
---|---|---|---|
PyTorch | GPU_COUNT | 학습 진행 시 각 인스턴스(노드)에 할당된 GPU의 개수 | 4 |
RANK | 분산 학습이 진행 중인 각 인스턴스(노드)의 순서 번호 | 0 | |
WORLD_SIZE | 학습에 할당된 인스턴스(노드)의 개수 - num_replica 와 동일한 값을 가짐 |
2 | |
MASTER_ADDR | 분산 학습을 진행하는 마스터 노드의 주소 | 101.18.10.225 | |
MASTER_PORT | 분산 학습을 진행하는 마스터 노드의 포트 | 8000 | |
TensorFlow | TF_CONFIG | 분산 학습 진행 시 각 워커의 주소와 역할 등을 정의한 JSON 문자열 |
실행 상세 방법
실행 아웃풋을 저장하는 방법은 다음과 같습니다.
실행 아웃풋 저장
학습한 모델을 저장하기 위해서는 실행 소스코드에 저장 위치를 /app/ouputs
으로 지정해야 합니다. 학습이 완료된 아웃풋은 default 스토리지의 /outputs
경로에 저장됩니다.
코드예제실행 아웃풋 저장
# model save 예제 코드
model.save('/app/outputs')
TensorBoard 이용 방법
TensorBoard에서 실행 학습 결과를 조회하기 위해서는 소스코드에 TensorBoard 로그를 /app/outputs/logs
디렉토리에 저장해야 합니다.
코드예제TensorBoard 로그 저장을 위한 Python 코드
og_dir = os.path.join(args.output_dir, "logs")
log_dir = os.path.join(args.output_dir, "logs")
코드예제TensorBoard 로그 저장을 위한 실행(Run) 스크립트
"python -u mnist.py --data_dir /app/input/dataset/$DATASET --output_dir /app/outputs"
소스코드 디렉토리 지정
CLI에서 --source-directory
파라미터를 지정하지 않고 실행을 제출할 경우, 기본값은 현재 위치 pwd
입니다. 해당 경로에 있는 모든 파일 또는 폴더를 업로드하기 때문에 파일 개수가 많거나 큰 용량의 파일이 있을 경우, 오류가 발생할 수 있습니다.
학습할 소스코드 파일이 있는 폴더(예: src 폴더)를 생성 후, 해당 경로로 이동하거나 소스 디렉토리 위치를 지정하여 실행을 제출하는 것을 권장합니다.
-
src 폴더를 생성합니다.
-
src 폴더에 학습할 소스코드(예: train.py)를 이동합니다.
-
kiml run submit
명령어 실행하여 실행을 제출합니다.a. ~/source 경로로 이동 후
kiml run submit
명령어를 실행합니다.b.
--source-directory
파라미터를 입력하여 src 폴더 경로를 지정합니다.- Linux 또는 Mac 환경 :
--source-directory ./src
- Windows 환경 :
--source-directory C:\src
- Linux 또는 Mac 환경 :
실행 학습 결과 조회 및 다운로드
실행 학습 결과는 자동으로 저장되지 않습니다. 소스코드에 실행 학습 결과가 /app/outputs
경로에 저장하도록 지정해야 합니다. 저장된 학습 결과는 스토리지( default/experiments/{실험 고유 ID}/runs/{실행 이름}/outputs
)에서 조회 및 다운로드할 수 있습니다.
방법 | 상세 방법 |
---|---|
콘솔 | 1. 실험 > 실행 > 아웃풋 탭에서 저장 경로 확인 2. 콘솔 스토리지 메뉴에 접속 후 default 선택 3. 스토리지 정보 > [파일 브라우저] 탭 선택 4. 1번에서 확인한 경로로 이동 5. outputs 폴더 우측 [더보기] 아이콘 클릭 6. 파일/폴더 다운로드 메뉴 선택 |
CLI | 1. kiml login 명령어 실행하여 CLI 로그인2. kiml run desec 명령어를 실행하여 아웃풋 저장 경로 확인3. KiML data download 명령어를 실행하여 스토리지에 저장된 아웃풋 파일 다운로드 가능예) kiml data download default/experiments/{experiment 고유 ID}/runs/{run 이름}/outputs |