← 학습 카테고리

Learn

Spark

84개 모듈 · 현재 65번째

Spark 모듈 65/84 spark-learn-65

ML Pipeline 모델 영속화 — 언어 경계를 넘나드는 save/load

Spark MLlib 모델 영속화 및 CrossValidator/TrainValidationSplit 공식 문서 종합 (웹 리서치, 2026) — Apache Spark 공식 문서(ml-pipeline.html, ml-tuning.html) Apache Spark 공식 문서 ML Pipelines — Persistence

이 모듈을 다 읽으면

  • MLWriter/MLReader가 어떤 형식으로 파이프라인을 저장하는지 설명할 수 있다
  • 언어 간 호환성과 버전 간 하위 호환성이 왜 실무적으로 중요한지 설명할 수 있다

spark-learn-07에서 다룬 MLlib Pipeline(fit/transform으로 학습된 모델)을 전제로, 그 학습된 파이프라인을 디스크에 저장해두고 나중에(또는 다른 언어의 애플리케이션에서) 다시 불러와 쓸 수 있게 해주는 영속화 메커니즘을 정리한다.

MLWriter/MLReader — save/load와 overwrite

학습된 파이프라인이나 모델은 MLWriter의 save(경로) 메서드로 저장하고, MLReader의 load(경로) 메서드로 다시 불러온다. 이미 그 경로에 뭔가 저장돼 있으면 기본적으로는 실패하는데, overwrite를 체이닝(예: pipeline.write.overwrite().save(경로))하면 기존 내용을 덮어쓸 수 있다. PipelineModel의 저장 결과물은 메타데이터를 담은 JSON 파일과, 계수 같은 실제 모델 데이터를 담은 Parquet 파일로 구성된다.

핵심 포인트

  • MLWriter.save(경로)로 저장, MLReader.load(경로)로 불러오기 — 기본은 기존 경로 존재 시 실패, overwrite() 체이닝으로 덮어쓰기 가능
  • PipelineModel 저장 결과물: 메타데이터(JSON) + 실제 모델 데이터(계수 등, Parquet 형식)

언어 경계를 넘는 호환성 — 저장은 Scala로, 로딩은 Python으로

MLWriter/MLReader로 저장된 모델은 어떤 언어(Scala, Java, Python, R)로 저장됐는지와 무관하게 다른 언어에서도 불러와 쓸 수 있다 — 예를 들어 Scala 배치 작업으로 학습한 모델을 Python 서빙 애플리케이션에서 그대로 로드하는 식의 구성이 가능하다. 저장 포맷 자체가 언어 종속적이지 않고 공용 JSON/Parquet 구조라 이런 상호운용성이 성립한다.

핵심 포인트

  • 저장 포맷이 언어 종속적이지 않아, 어떤 언어로 저장했든 다른 언어에서 로드 가능 — Scala로 학습, Python으로 서빙하는 구성이 가능

버전 간 하위 호환 — 예전에 저장한 모델을 최신 Spark에서도

MLlib은 ML 영속화에 대해 하위 호환성을 유지한다 — 어떤 Spark 버전에서 모델이나 파이프라인을 저장했다면, 이후 버전에서도 그걸 다시 불러와 쓸 수 있어야 한다는 게 공식 방침이다. 이는 프로덕션에서 Spark를 업그레이드하더라도 과거에 학습해둔 모델 자산을 계속 활용할 수 있게 해주는 실무적으로 중요한 보장이다.

핵심 포인트

  • MLlib은 ML 영속화의 버전 간 하위 호환을 공식 방침으로 유지 — 옛 버전에서 저장한 모델을 최신 Spark에서도 로드 가능
  • Spark 업그레이드 시에도 과거에 학습해둔 모델 자산을 계속 활용할 수 있게 해주는 실무적 보장