TL;DR
- Sprocket은 Rust 기반 오픈소스 바이오인포매틱스 워크플로 엔진으로, 로컬에서 개발한 WDL 분석을 HPC나 클라우드로 옮겨 2만 개 이상 동시 작업을 목표로 실행함.
sprocket lint,sprocket format, Visual Studio Code 확장과sprocket.nvim으로 WDL 문서 검증·형식 정리·편집기 진단을 수행함.- 로컬 Docker 백엔드에서 입력값을 생성·검증하고 워크플로를 실행한 뒤, 설정을 바꿔 Slurm·LSF의 Apptainer 백엔드나 TES로 옮김.
- 실행별 입력·출력·로그·작업 시도를 디렉터리와 SQLite 기록으로 보존하고, 호출 캐시로 성공한 작업을 재사용함.
- GitHub Action, Python 라이브러리
sprocket-bio, Rust 크레이트wdl, 실험 단계 REST API 서버로 도구를 확장함.
하나의 도구로 WDL 워크플로의 전 과정을 처리함
- Sprocket은 성능과 효율을 강조하는 오픈소스 바이오인포매틱스 워크플로 엔진임.
- 분석을 로컬에서 만들고 테스트하고 실행한 뒤, HPC나 클라우드로 옮겨 수천 개의 병렬 워크플로를 처리하는 흐름을 제공함.
- WDL 1.3 예제는
say_hello작업에서 문자열 입력greeting을 받아echo명령으로 출력하고, 컨테이너로ubuntu:latest를 지정함. sprocket run example.wdl --target say_hello greeting="Hello"명령으로 해당 작업을 실행함.
검증
sprocket lint는 실행 전에 문서를 검증하고 문제가 있는 정확한 줄을 가리키며 수정 방법을 제안함.- 유효하지 않은 WDL은 0이 아닌 종료 코드를 반환하므로 같은 검사를 지속적 통합(CI)에 적용할 수 있음.
sprocket format은 모든 파일의 형식을 일관되게 유지함.- 예시 진단에는 변경 가능한 컨테이너 태그
ubuntu:latest를 SHA256 값으로 교체하라는 안내와 사용되지 않는 입력color경고가 포함됨.
편집
- Visual Studio Code 확장은 Sprocket의 언어 서버인
sprocket analyzer를 실행하고, 편집 중 검증 및 린트 문제를 표시함. - 확장 기능에는 WDL 구문 강조와 코드 조각도 포함됨.
- 진단 예시에는 사용되지 않는
color입력, 작업과 워크플로의meta및parameter_meta섹션 누락, 변경 가능한 컨테이너 태그가 포함되며 각 항목에 줄·열 위치와 수정 안내가 표시됨. - Neovim에서는
sprocket.nvim을 사용할 수 있음.
로컬에서 실행
- 먼저 개인 컴퓨터에서 워크플로를 작성하고 실행하고 디버깅한 뒤 클러스터로 옮기는 흐름임.
sprocket inputs는 워크플로가 요구하는 입력 템플릿을 작성하고,sprocket validate는 입력값을 검사하며,sprocket run은 로컬 Docker 백엔드에서 실행함.sprocket run example.wdl --target main name="World"실행 결과에는main.messages값으로Hello, World!,Hallo, World!,Hej, World!가 포함됨.
확장
- 코드를 바꾸지 않고 설정을 변경해 클러스터로 이동하는 방식임.
sprocket.toml에서 Apptainer를 사용하는 Slurm 또는 LSF 클러스터나 작업 실행 서비스(TES) 서버를 지정함.- 워크플로에 필요한 경우 입력과 출력을 클라우드 저장소로 이동함. 지원 저장소는 Amazon S3, Azure Blob Storage, Google Cloud Storage임.
- 동시 작업 2만 개 이상을 목표로 설계됨.
- Slurm·Apptainer 백엔드 예시는 파티션
gpu, 작업당 최대 CPU 64개, 메모리 96GB를 지정함. 해당 백엔드는 실험 단계임. - LSF·Apptainer 백엔드 예시는 대기열
standard, 작업당 최대 CPU 64개, 메모리 96GB를 지정함. 해당 백엔드는 실험 단계임. - TES 백엔드는 서버 URL과 입력·출력 클라우드 저장소 URL을 지정함.
실행 재현
- 각 실행은 입력, 출력, 로그, 모든 작업 시도를 포함하는 자체 디렉터리를 가지며, 실행 기록은 SQLite 데이터베이스에 저장됨.
- 출력 구조에는 SQLite 출처 기록 데이터베이스
sprocket.db, 실행별inputs.json,outputs.json,output.log, 작업 호출별 디렉터리가 포함됨. - 선택적으로 출력 인덱스를 둘 수 있으며
_latest심볼릭 링크는 가장 최근 실행 시점을 가리킴. - 호출 캐시를 켜면 실패 후 다시 실행할 때 이미 성공한 작업을 재사용함.
확장 도구
- Sprocket GitHub Action으로 모든 풀 리퀘스트의 WDL을 린트할 수 있으며, 예시 설정은
TrailingComma와ContainerUri규칙을 제외함. - Python에서 WDL을 분석할 때는
sprocket-bio를, Rust에서는wdl크레이트를 사용할 수 있음. - 실험 단계 Sprocket 서버는 REST API로 실행을 제출하며, 허용 파일 경로와 포트를 지정해 시작함.
- 예시 요청은
http://localhost:8080/api/v1/runs에 WDL 파일 경로와name입력값을 JSON으로 전달함. - Sprocket 서버는 실험 단계이며 변경될 수 있음.
Sprocket이 워크플로를 실행하는 방식
- WDL 기반 워크플로에서 Sprocket은 상위 제어부 역할을 함.
- 아래 계층의 Crankshaft는 언어에 종속되지 않는 실행 엔진으로 작업 제출, 실행, 결과 보고를 처리함.
- CWL, Nextflow, Snakemake 같은 다른 언어의 상위 제어부도 Crankshaft를 구동할 수 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요