Polyaxon
Polyaxon
Polyaxon은 머신러닝 워크플로를 오케스트레이션하기 위한 오픈소스 MLOps 플랫폼이에요. Kubernetes를 기반으로 동작하며, 소규모 실험부터 대규모 분산 학습까지 데이터 사이언티스트와 ML 엔지니어가 실험을 재현 가능하고 반복 가능하게, 그리고 언어·프레임워크에 구애받지 않고 실행·추적·관리할 수 있게 도와줘요. CLI, SDK, 추적(tracking) API, 대시보드를 모두 제공해요.
출처: 문서
본문
핵심 기능
강력한 워크스페이스 (Powerful workspace)
Polyaxon은 인터랙티브한 워크스페이스를 제공해요. 여기에는 명령줄 인터페이스(CLI), SDK와 클라이언트, 광범위한 추적 API, 시각화와 고급 인사이트를 제공하는 대시보드, 계보(lineage)와 기원(provenance) 추적, 커스텀 대시보드·시각화 생성 기능, 고급 검색·쿼리 인터페이스가 포함돼요. 모든 운영의 로그를 통일된 방식으로 관리하고 스트리밍해 주며, Jupyter Notebook·Jupyter Lab, Tensorboard, VSCode, Streamlit·Voila·Papermill 등과 통합돼요. 네이티브 Kubeflow 스케줄링과 Celery executor를 지원하고, 컨테이너를 빌드하는 로직도 내장돼 있어요.
재현 가능한 결과 (Reproducible results)
Polyaxon은 실험을 재현 가능하고, 이식 가능하며, 반복 가능하게 만들어 줘요. 이를 위한 핵심이 Polyaxonfile이라는 포장(packaging) 형식이에요. Polyaxonfile은 의존성, 입력, 출력, 아티팩트, 환경, 그리고 Kubernetes에 스케줄링할 운영(operation)의 런타임을 포장하는 명세(specification)예요. 소스 코드, 파라미터, 데이터, 메트릭, 태그, 로그를 추적하는 광범위한 추적 API를 제공하며, 각 실험의 상태·메트릭·하이퍼파라미터·소스 코드·데이터·시각화·아티팩트·사용 리소스를 자동으로 문서화해요.
개발자 친화적인 API
Polyaxon의 핵심은 자기 자신을 소비하는(self-consuming) RESTful JSON API예요. 클라이언트와 프론트엔드가 분리되어 있어서, 완전히 headless로 사용하고 자체 프론트엔드나 클라이언트를 직접 만들 수도 있어요. 성능과 확장성(복제·동시성)에 중점을 두고 설계됐어요.
대규모 확장 (Massive scale)
Polyaxon API와 스케줄러를 수평 확장하기 쉽고, Polyaxon 에이전트(agent)를 통해 워크로드를 여러 네임스페이스와 클러스터에 걸쳐 확장할 수 있어요.
내장 플로우 엔진 (Built-in Flow engine)
Polyaxon은 워크플로와 DAG를 작성할 수 있는 플로우 엔진을 제공해요. 큐잉, 라우팅, 캐싱, 동시성·병렬 처리를 지원하고, 팀 관리·ACL·RBAC 규칙과 네이티브로 통합되며, Kubeflow Operator, 하이퍼파라미터 튜닝, Ray 등 ML 워크로드를 네이티브로 지원해요.
실험 관리와 파이프라인 (Experimentation & Automation)
실험 관리 도구로는 데이터 처리와 ML 모델 학습, Notebook·Tensorboard 실행, 앱·대시보드 실행, 클라우드 네이티브 오퍼레이터를 이용한 분산 작업 실행, 메트릭·아티팩트 추적, 결과 분석·시각화 등이 있어요. 자동화 도구로는 DAG, 하이퍼파라미터 튜닝, 병렬 실행, 스케줄, 액션, 훅, 이벤트를 활용한 자동화를 지원해요.
설치 및 사용 예시
Minikube에 로컬 클러스터를 배포하고 실험을 실행하는 예시를 볼게요. 먼저 Helm 차트 레포지토리를 추가해요:
helm repo add polyaxon https://charts.polyaxon.com
아티팩트 저장소로 host_path를 사용하려면 다음과 같은 기본값을 설정할 수 있어요:
artifactsStore:
name: tmp_artifacts_store
kind: host_path
schema: {"hostPath": "<VALID-MACHINE-PATH>", "mountPath": "/artifactsStore"}
Minikube에 기본 설정으로 Polyaxon을 배포해요:
polyaxon admin deploy -t minikube
모든 디플로이먼트가 준비될 때까지 기다려요:
kubectl get deployment -n polyaxon -w
로컬호스트에서 Polyaxon UI를 노출해요:
polyaxon port-forward -t minikube
새 프로젝트를 만들고 실험을 실행해요:
polyaxon project create --name=quick-start --description='Polyaxon quick start examples.' --tags=examples
polyaxon run --url=https://raw.githubusercontent.com/polyaxon/polyaxon-quick-start/master/experimentation/simple.yaml -l
위 명령의 -l 플래그는 실험 시작 후 로그를 스트리밍하겠다는 뜻이에요. 결과를 보려면 Tensorboard를 시작할 수 있어요:
polyaxon run --hub tensorboard:single-run -P uuid=UUID -w
대시보드에서 결과를 확인하려면:
polyaxon dashboard -y
Experiment tracking (추적 API)
Polyaxon 추적(tracking)은 머신러닝 코드를 실행할 때 파라미터, 코드 버전, 메트릭, 출력을 기록하기 위한 고수준 API예요. Polyaxon 배포 환경뿐 아니라 다른 플랫폼·환경에서도 사용할 수 있고, 기록된 정보는 Polyaxon UI나 Tensorboard에서 시각화·비교할 수 있어요. 추적은 파라미터(키-값), 이벤트·메트릭(수치 값), 아티팩트(이미지·오디오·모델·데이터 파일 등)를 기록해요.
클러스터 안에서 실행할 때는 이름·설명·태그·상태·코드 참조 등이 자동으로 기록되므로 직접 호출할 필요가 없어요. 직접 추적하려면 두 가지 방식이 있어요. 추적 클라이언트를 쓰는 방식과 추적 모듈을 쓰는 방식이에요:
from polyaxon.tracking import Run
experiment = Run()
experiment.log_...
from polyaxon import tracking
tracking.init()
tracking.log_...
Polyaxonfile은 YAML, JSON, Python로 작성할 수 있고(일부는 Go, TypeScript, Java), version과 kind라는 두 가지 정보로 파싱돼요:
version: 1.1
...
핵심 원시 요소(primitive)는 Component(환경과 런타임을 정의하는 개별적이고 반복 가능한 자급자족 액션)와 Operation(파라미터·커넥션을 전달하고 런 환경을 패치해 Component를 실행하는 방식)이에요.