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를 구동할 수 있음.