YAML은 사람이 읽을 수 있는 데이터 직렬화 언어로, 구성 파일과 데이터가 저장되거나 전송되는 애플리케이션에 자주 사용됩니다. 단순성과 가독성을 위해 설계된 YAML은 모델, 학습 프로세스 및 배포 파이프라인과 관련된 복잡한 구성을 관리하기 위해 인공지능(AI) 및 머신 러닝(ML) 에서 특히 유용합니다. 간단한 구문 덕분에 AI/ML 워크플로우를 더 쉽게 이해하고 유지 관리하며 재현할 수 있습니다.
YAML의 주요 기능
YAML은 사람의 가독성을 우선시합니다. 그 구조는 다음과 유사하게 들여쓰기에 크게 의존하여 계층 구조를 나타냅니다. Python과 유사한 들여쓰기를 사용하여 XML이나 JSON과 같은 형식에 비해 깔끔한 파일을 생성합니다. 주요 특징은 다음과 같습니다:
- 사람이 읽기 쉬운 구문: 대괄호나 태그를 최소한으로 사용하여 파일을 쉽게 읽고 편집할 수 있습니다.
- 들여쓰기를 통한 구조: 탭이 아닌 공백을 사용하여 중첩된 구조를 정의하여 명확성을 높입니다.
- 데이터 구조 지원: 스칼라(문자열, 숫자, 부울), 목록(시퀀스), 사전(매핑/키-값 쌍)과 같은 일반적인 데이터 유형을 기본적으로 지원합니다.
- 댓글: 를 사용하여 댓글을 추가할 수 있습니다.
#
기호를 사용하여 파일 내 문서를 표시합니다. - 다용도성: 다양한 구성 요구에 적합한 복잡한 데이터 구조를 표현할 수 있습니다.
공식 YAML 사양에서 구조에 대해 자세히 알아볼 수 있습니다.
AI 및 ML 애플리케이션에서의 YAML
YAML 파일은 프로젝트 라이프사이클의 다양한 측면을 정의하고 관리하는 데 널리 사용되며, 구성과 코드를 분리하여 일관성과 협업을 촉진하는 등 AI 및 ML 환경에서 널리 사용되고 있습니다. 주요 적용 분야는 다음과 같습니다:
- 모델 구성: 레이어, ReLU 또는 SiLU와 같은 활성화 함수, 연결 등 신경망(NN)의 아키텍처를 정의합니다. 다음과 같은 프레임워크 PyTorch 및 TensorFlow 와 같은 프레임워크는 모델 구성에 YAML을 사용하는 경우가 많습니다. 예를 들어 Ultralytics YOLO 모델과 같은 YOLOv8 및 YOLO11와 같은 모델은 YAML 파일을 사용하여 백본 및 탐지 헤드를 포함한 모델 구조를 지정합니다.
- 데이터 세트 정의: 학습 데이터, 유효성 검사 데이터, 클래스 이름 및 기타 데이터 세트별 매개변수에 대한 경로를 지정합니다. 이는 COCO 또는 VOC와 같은 데이터 세트를 사용하는 개체 감지와 같은 작업에 일반적으로 사용됩니다. Ultralytics 데이터 세트 정의에 YAML 파일을 광범위하게 사용합니다.
- 교육 파이프라인 구성: 하이퍼파라미터 및 설정 지정 모델 트레이닝 프로세스. 여기에는 다음과 같은 매개 변수가 포함됩니다. 배치 크기, 학습률의 수 epochs, 최적화 알고리즘 (예 Adam), 그리고 데이터 증강 전략. 예시: YAML 파일은 다음을 지정할 수 있습니다.
epochs: 100
, batch_size: 16
, learning_rate: 0.001
를 클릭하고 무작위 뒤집기나 회전과 같은 증강 기술을 나열할 수 있습니다. 이를 통해 연구자와 엔지니어는 훈련 실험을 쉽게 추적하고 수정할 수 있습니다. - MLOps 파이프라인: 머신 러닝 운영(MLOps) 플랫폼에서 워크플로우 정의. Kubeflow 파이프라인 및 MLflow 프로젝트와 같은 도구는 데이터 전처리부터 모델 배포 및 모니터링에 이르는 ML 파이프라인의 단계 순서를 설명하기 위해 YAML을 사용합니다.
- 배포 구성: 리소스 요구 사항과 같은 모델 배포를 위한 설정을 지정합니다(예 CPU/GPU 할당), 스케일링 매개변수 및 환경 변수 등의 설정을 지정하며, 종종 Docker와 같은 컨테이너화 기술과 함께 사용됩니다. 예시: 예: Kubernetes 클러스터에 대한 배포 YAML은 엔드포인트를 제공하는 모델의 복제본 수, 메모리 제한 및 사용할 Docker 이미지를 정의할 수 있습니다. 관련 설정은 Ultralytics Docker 빠른 시작을 참조하세요.
YAML과 다른 형식 비교
YAML은 다른 데이터 직렬화 형식과 비슷한 용도로 사용되지만, 뚜렷한 특징이 있습니다:
- YAML과 JSON(JavaScript 객체 표기법) 비교: 둘 다 사람이 읽을 수 있고 유사한 데이터 구조를 지원합니다. JSON은 문자열 주위에 따옴표를 사용하고 중괄호를 사용해야 하는 등 더 엄격합니다.
{}
및 괄호 []
. YAML은 들여쓰기와 최소한의 구문을 사용하기 때문에 복잡한 구성에 더 가독성이 높은 것으로 간주되는 경우가 많습니다. 그러나 JSON은 웹 API에 더 널리 사용됩니다. 자세한 내용은 다음에서 확인할 수 있습니다. JSON.org. - YAML과 XML(확장 가능한 마크업 언어) 비교: XML은 마크업 언어입니다. W3C 태그(
<tag>...</tag>
)를 사용하여 요소를 정의합니다. YAML 및 JSON보다 더 장황합니다. 문서 구조화 및 유효성 검사에는 강력하지만(예를 들어 데이터 어노테이션), 일반적으로 가독성이 가장 중요한 구성 파일에는 YAML의 깔끔한 스타일에 비해 XML이 덜 선호됩니다.
사람의 가독성에 중점을 둔 YAML은 AI/ML 프로젝트의 구성 파일에 탁월한 선택이며, 특히 ML 라이프사이클을 간소화하는 Ultralytics HUB와 같은 플랫폼 내에서 관리를 간소화하고 협업을 개선합니다.