6P by GN⁺ 6일전 | ★ favorite | 댓글 1개
  • Meta가 공개한 OpenZL은 구조화된 데이터에 대해 무손실 압축을 제공하는 새로운 오픈소스 압축 프레임워크로, 데이터 형식을 인식하여 효율적인 변환 과정을 수행
  • 각 파일 형식마다 다른 변환 단계를 적용하지만, 모든 파일을 단일 범용 디컴프레서로 해독 가능하도록 설계됨
  • 압축기에 데이터 구조를 명시적으로 전달하여 변환 과정을 최적화하고, 학습된 압축 구성(config) 을 통해 속도와 압축률 간의 다양한 균형점을 선택할 수 있음
  • Meta 내부의 Managed Compression 시스템과 연동되어, 데이터 변화에 맞춰 자동 재학습 및 갱신이 가능한 점이 특징
  • 구조가 명확한 데이터셋에서 높은 성능을 보여 데이터센터 처리 효율을 개선하고, 압축 생태계를 단일 디코더로 단순화할 가능성을 제시

OpenZL 개요

  • OpenZL은 Meta가 공개한 포맷 인식형 데이터 압축 프레임워크로, 구조화된 데이터를 위해 특화된 압축 효율을 제공함
    • 데이터의 형식을 명시적으로 알려주면, 내부의 변환 그래프를 통해 데이터의 규칙성과 반복성을 찾아 더 효율적으로 압축함
  • Zstandard의 후속 개념으로, 포맷별 최적화 압축의 성능과 단일 실행 파일의 유지보수성을 결합한 구조
    • Zstandard는 데이터센터에서 속도와 압축률을 동시에 충족하며 큰 도약을 이뤘으나, 알고리듬의 일반화로 인한 점진적 개선 한계가 존재
  • 구조화된 데이터에선 일반 압축법보다 형태에 맞춘 맞춤식 압축이 비율과 속도 모두에서 유리함
  • 하지만, 각 파일 포맷마다 전용 압축/복원기를 구축·운영하는 부담이 큼
  • OpenZL은 개별 맞춤 압축기의 성능과 단일 바이너리 운용의 간편성을 동시에 추구

구조 기반 압축 방식

  • 일반적인 압축기가 데이터를 추측 기반으로 처리하는 반면, OpenZL은 데이터 구조를 명시적 입력으로 제공받음
    • 사용자는 Simple Data Description Language (SDDL) 을 통해 데이터의 형태(행, 열, 열거형, 중첩 구조 등)를 기술할 수 있음
    • 이 정보를 바탕으로 OpenZL은 오프라인 학습(트레이너)을 통해 최적의 변환 시퀀스(Plan) 를 생성함
    • 이후 압축 시 이 Plan을 기반으로 실제 디코딩 그래프(Resolved Graph) 를 만들어 프레임에 내장함

예시: SAO 데이터 압축

  • Silesia Compression Corpus의 SAO 파일을 예시로, OpenZL은 각 필드를 분리해 동질적 데이터 스트림으로 변환 후 개별 최적화를 수행
    • X축 좌표(SRA0)는 정렬 성향이 있어 델타(delta) 변환 적용
    • Y축 좌표(SDEC0)는 범위 제한을 활용해 transpose 변환
    • 나머지 필드는 낮은 고유값 수에 따라 tokenize 변환으로 사전 기반 압축 수행
  • 결과적으로 zstd 대비 2배 이상의 압축률더 빠른 속도(340 MB/s) 를 기록함

자동 압축기 생성과 학습 과정

  • OpenZL의 트레이너는 데이터 샘플을 기반으로 자동으로 압축 전략을 탐색 및 학습
    • 학습 과정: describe(SDDL) → train(Plan 생성) → compress(그래프 내장) → decode(단일 바이너리로 복원)
    • 컨트롤 포인트(control points) 를 사용해 런타임 시점에서 통계 정보를 기반으로 최적의 경로를 선택함
    • 새 플랜을 적용해도 기존 데이터는 그대로 복호화 가능, 역호환성 유지

단일 디컴프레서의 장점

  • OpenZL은 어떤 포맷으로 압축했더라도 단일 디컴프레서 바이너리로 복원 가능함
    • 보안 및 안정성 검증을 한 번만 수행하면 전체 시스템에 적용 가능
    • 디컴프레서 업데이트 시, 모든 과거 데이터에도 성능 향상 효과 적용
    • 운영 단순성플릿 전체 일관성 확보
    • 여러 포맷을 동시에 관리하면서도 하위 호환성 유지

성능 비교 결과

  • 다양한 데이터셋에서 zstd, xz 등 범용 압축기 대비 더 높은 압축률과 속도 달성
    • SAO: 2.06배 압축률, 1200 MB/s 복원 속도
    • ERA5(수치 데이터): 같은 시간 내 더 높은 압축률, 또는 같은 압축률에서 더 빠른 속도
    • Parquet, CSV 데이터셋에서도 포맷 인식 기반으로 맞춤형 최적화 가능
  • 단, 텍스트 기반처럼 구조가 없는 데이터에는 효과가 제한적이며 zstd로 폴백하여 최소 성능 보장
  • 압축률/압축 속도/복원 속도 3축에서 다양한 조합을 선택할 수 있으며, 전통 압축기의 “레벨” 조절과는 다른 유연성 제공

데이터 진화와 자동 재훈련

  • Meta의 Managed Compression과 연계되어 데이터 포맷 변경 시 자동으로 압축 플랜을 재학습
    • 주기적으로 샘플링, 평가 후 더 나은 플랜이 발견되면 자동 업데이트
    • 디컴프레서는 동일하게 유지되어 운영 리스크 최소화

오픈소스 생태계 참여와 향후 방향

  • OpenZL은 벡터, 테이블, 트리 구조 데이터에 적합하며, 시계열·ML 텐서·데이터베이스 테이블 등에서 뛰어난 효율을 보임
  • 구조가 없는 텍스트(예: enwik, dickens 등)에는 zstd 적용
  • 향후 계획:
    • 시계열 및 격자 데이터용 변환 라이브러리 확장
    • SDDL의 중첩 데이터 표현력 강화
    • 자동 압축기 탐색기의 성능 및 안정성 향상
  • 커뮤니티 참여 방법:
    • 공식 OpenZL 사이트GitHub 저장소에서 예시, 문서 참고 가능
    • 새로운 데이터 포맷 테스트 및 Plan 제안
    • C/C++ 엔진 최적화, 새 변환 추가, 벤치마크 기여 가능

결론

  • OpenZL은 포맷 인식 기반 압축을 표준화하면서도, 기존 생태계를 단일 디코더 중심으로 통합할 수 있는 새로운 접근
  • Meta는 이를 통해 데이터센터 전반의 압축 효율, 속도, 유지보수성을 동시에 개선하고자 함
Hacker News 의견
  • 최근 HN의 유전체 데이터 압축 글(링크)을 보고 OpenZL 이야기를 참으려고 애를 많이 썼음, 데이터에 정말 간단한 변환만 해도 압축 효율을 크게 올릴 수 있음을 제대로 보여주는 사례임, OpenZL도 내부적으로 이런 변환을 쉽게 할 수 있음(SDDL 활용)
    • 그 글이 바로 떠올랐음, 혹시 거기서 언급된 특수 압축기와 OpenZL을 비교해본 경험이 있는지 궁금함, 예시로 Grace Blackwell의 2.6Tbp 661k 데이터셋은 미생물 유전체 벤치마크에서 고전이고, Karel Břinda의 MiniPhy 방식은 이걸 2.46TiB에서 27GiB(압축률 91)까지 줄임, 비슷한 결과가 가능할지 궁금함
    • 일반적인 유전체 포맷(fa, fq, sam, vcf)에서 벤치마크 결과를 보고 싶음, 특히 nanopore 데이터에의 적용 가능성이 궁금함, FAST5/POD5 저장이 까다로워서 유용한 데이터를 많이 잃고 있음
    • [0] 글 작성자임, 참아줘서 축하하고 잘했음, 꼭 써보고 싶음, fasta 압축기 트레이닝에 대해 OpenZL 가이드(링크) 외에 추가적으로 조언할 점 있는지 궁금함
  • 조금 관련된 이야기로 최근 F3 파일 포맷 관련 토론(링크)이 있었는데, 여기도 decompressor 코드를 WASM으로 임베딩해 포맷 인지 압축이 가능함, F3의 주동기는 미래 호환성이지만 맞춤형 압축 알고리즘을 쓸 수 있음, 접근 방식이 OpenZL이랑 완전히 다르고, OpenZL의 의존성도 훨씬 가벼운 편임(SDDL compiler/runtime만 필요)
    • zpaq도 이미 15년간 임베디드 decompressor 기능이 있었는데 언급이 없어 아쉬움
    • 압축 파일에 실행 가능한 코드 포함하면 바이러스 취약점이 커지는 게 아닌지 걱정됨
  • 정말 꽤 좋은 툴이 나옴에 놀람, 훨씬 일찍 나왔어야 했다고 생각함, 데이터 컨테이너 구조를 제대로 파악하면 중복제거 효율이 엄청 올라감, BSD-3-Clause 라이선스에 깔끔한 C++ 구현, 문서화도 훌륭함, 더 많은 파일 포맷이 추가되는 발전이 기대됨
    • 파일 포맷 특성화는 기존에도 있었던 방법(예: 7-Zip의 x86 opcode prefilter, ZPAQ의 specialized decoder bytecode 임베딩)이지만 OpenZL의 실제 구현, 데이터 기술 방식, 트레이닝 시스템은 인상적임
  • 내가 이해한 게 맞으면, SDDL로 데이터 구조를 기술하면 압축기가 각 부분에 맞는 최적 압축 전략을 세울 수 있는 것 같음, 정말 멋져 보임, 커스텀 포맷 압축에 일반적인 프레임워크로 발전할 수 있으면 좋겠음
    • 맞음! SDDL(링크)은 no-code로 이런 일을 할 수 있는 툴킷을 제공함, 기능은 아직 제한적이지만 앞으로 확장 예정임, 그 전에는 C++나 Python으로 직접 포맷 파서도 만들 수 있음, 참고로 이 코드는 압축기 측에만 필요하고, 디컴프레서는 포맷 무관하게 작동함
  • 이 툴은 seekable compression을 지원하는지 궁금함
  • 문서 보며 AI가 imhex, Kaitai 같은 기존 기술 설명을 얼마나 잘 SDDL로 변환해줄지 궁금함, 이 방법이면 좋은 스키마를 금방 모을 수 있을 것 같음
    • 이런 툴들이 있는지 처음 알았는데, 진짜 SDDL로 전환 가능할 듯, 꼭 확인해볼 계획임
  • Meta의 Nimble은 OpenZL(pre-OSS 버전)이 네이티브로 통합되어 있고, 매우 큰 이점을 보고 있음
    • 컬럼 기반 데이터 포맷의 백엔드 압축은 OpenZL과 찰떡임, 압축 대상 데이터가 i64나 float 같은 숫자라는 걸 알면 Zstandard보다 바로 큰 이점이 나옴
  • 로그 데이터(스키마 미확정된 JSON 로그)에 OpenZL이 적합한지 궁금함, 로그 압축 툴 개발 중임(링크)
  • Non-Linear Compression(비선형 압축)은 예전에 조금 아이디어를 갖고 시도해봤으나 멀리 가진 못했음(링크), 이런 시도를 봐서 매우 반가움, 공유 감사함
  • 진짜 미쳤을 정도로 흥미로워 보임, 오늘 저녁에 대용량 CSV에 꼭 시도해 볼 예정임
    • 사용 경험 알려주면 좋겠음, OpenZL은 원래 Meta 내부 사용 목적으로 개발함, 최근엔 외부 사용자도 쉽게 쓸 수 있도록 많은 노력을 기울임, 피드백 환영함