본문 바로가기
WIKI 기술 지식 베이스

lakeFS 데이터를 로컬에서 다루기

원문 보기 위키 갱신

lakeFS를 사용하다 보면 데이터를 로컬에서 접근하고 조작해야 하는 시나리오가 있어요. ML 모델 개발이 대표적인 사례인데, 개발 중 데이터를 로컬에 두면 대화형·오프라인 개발이 가능해지고 데이터 접근 지연도 줄어서 실험 속도가 빨라져요. lakeFS는 버전 관리되는 데이터를 로컬로 노출하는 두 가지 방법을 제공해요.

출처: 문서

본문

lakeFS로 작업하다 보면 데이터를 로컬에서 접근하고 조작해야 하는 시나리오가 있어요. 로컬 작업의 예시 사용 사례로 머신러닝 모델 개발을 들 수 있어요. 머신러닝 모델 개발은 동적이고 반복적인 과정이죠. 이 과정을 최적화하려면 실험을 빠르게, 추적하기 쉽게, 재현 가능하게 수행해야 해요. 개발 중에 모델 데이터를 로컬에 두면 대화형·오프라인 개발이 가능해지고 데이터 접근 지연이 줄어들어서 과정이 빨라져요.

lakeFS는 버전 관리되는 데이터를 로컬로 노출하는 2가지 방법을 제공해요

lakeFS Mount

lakeFS Enterprise에서 사용할 수 있어요. 무료 체험을 시작해 보세요.

lakeFS Mount 시작하기

필수 조건:

  • lakeFS Enterprise 또는 lakeFS Cloud가 동작 중인 lakeFS 서버

  • lakectl 명령줄 도구 설치: lakeFS의 공식 CLI이고, lakeFS Mount는 이 위에서 만들어져 있어요.

  • 설정 지침에 따라 lakectl이 lakeFS 서버에 접근하도록 제대로 구성되어 있어야 해요

경로를 로컬 디렉터리로 마운트하기:

  • lakeFS에서 my-experiment라는 새 브랜치를 만드세요. UI로 해도 되고 lakectl로 해도 돼요:
lakectl branch create \
    lakefs://quickstart/my-experiment \
    --source lakefs://quickstart/main
  • 퀵스타트 저장소의 images를 my_local_dir라는 로컬 디렉터리로 마운트하세요
everest mount lakefs://quickstart/my-experiment/images my_local_dir

완료되면 my_local_dir가 지정한 경로로 마운트되어 있을 거예요.

  • my_local_dir가 lakeFS 원격의 올바른 경로와 연결됐는지 확인하세요:
ls -l my_local_dir
  • 디렉터리를 언마운트하려면 그냥 실행하세요:
everest umount ./my_local_dir

그러면 경로가 언마운트되고 로컬 mount-server가 종료돼요.

lakectl local

또는 lakectl local을 사용해 lakeFS 데이터의 일부를 lakeFS 컨테이너 안의 로컬 디렉터리로 가져와서, ML 모델 개발에 쓰는 이미지 데이터셋을 편집할 수도 있어요. lakeFS Mount와 달리 lakectl local은 lakeFS와 로컬 머신 사이에 데이터를 복사해야 해요.

참고 가이드: 머신러닝을 위한 lakeFS lakectl local

lakeFS 데이터의 일부를 로컬 디렉터로 클론하기

  • lakeFS에서 my-experiment라는 새 브랜치를 만드세요. UI로 해도 되고 lakectl로 해도 돼요:
lakectl branch create lakefs://quickstart/my-experiment --source lakefs://quickstart/main
  • 퀵스타트 저장소의 images를 컨테이너 안의 my_local_dir라는 로컬 디렉터로 클론하세요:
lakectl local clone lakefs://quickstart/my-experiment/images my_local_dir
  • my_local_dir가 lakeFS 원격의 올바른 경로와 연결됐는지 확인하세요:
lakectl local list

my_local_dir가 원하는 lakeFS 경로를 추적하고 있다는 확인 메시지가 보일 거예요:

    my_local_dir lakefs://quickstart/my-experiment/images/8614575b5488b47a094163bd17a12ed0b82e0bcbfd22ed1856151c671f1faa53
  • 로컬 환경이 원격 경로와 동기화되어 있는지 확인하세요:
lakectl local status my_local_dir

로컬 환경과 lakeFS 원격 사이에 차이가 없다는 확인 메시지가 이런 식으로 뜰 거예요:

diff 'local:///home/lakefs/my_local_dir' <--> 'lakefs://quickstart/8614575b5488b47a094163bd17a12ed0b82e0bcbfd22ed1856151c671f1faa53/images/'...
diff 'lakefs://quickstart/8614575b5488b47a094163bd17a12ed0b82e0bcbfd22ed1856151c671f1faa53/images/' <--> 'lakefs://quickstart/my-experiment/images/'...

No diff found.

로컬에서 데이터 변경하기

  • 225 KB보다 큰 이미지를 제거해서 데이터셋을 정리하세요:
find my_local_dir -type f -size +225k -delete
  • 로컬 변경 사항과 lakeFS 원격 경로를 비교한 상태를 확인하세요:
lakectl local status my_local_dir

로컬에서 만든 수정 사항을 보여주는 확인 메시지가 이런 식으로 뜰 거예요:

diff 'local:///home/lakefs/my_local_dir' <--> 'lakefs://quickstart/8614575b5488b47a094163bd17a12ed0b82e0bcbfd22ed1856151c671f1faa53/images/'...
diff 'lakefs://quickstart/8614575b5488b47a094163bd17a12ed0b82e0bcbfd22ed1856151c671f1faa53/images/' <--> 'lakefs://quickstart/my-experiment/images/'...

╔════════╦══════════╦═════════════════════╗
║ SOURCE ║ CHANGE   ║ PATH                ║
╠════════╬══════════╬═════════════════════╣
║ local  ║ modified ║ axolotl.png         ║
║ local  ║ removed  ║ duckdb-main-02.png  ║
║ local  ║ removed  ║ empty-repo-list.png ║
║ local  ║ removed  ║ repo-contents.png   ║
╚════════╩══════════╩═════════════════════╝

로컬 변경 사항을 lakeFS로 밀어 올리기

로컬 환경에서 이미지 데이터셋 편집을 마쳤다면, 개선된 데이터셋이 공유되고 버전 관리되도록 변경 사항을 lakeFS 원격으로 밀어 올릴 거예요.

  • 로컬 변경 사항을 lakeFS에 커밋하세요:
lakectl local commit -m 'Deleted images larger than 225KB in size and changed the Axolotl image' my_local_dir

브랜치에서 로컬 변경이 포함된 커밋을 보게 될 거예요:

  • 변경 내역을 시각적으로 확인하려고 my-experiment 브랜치를 main 브랜치와 비교하세요:

Bonus Challenge

자, 이로써 lakeFS 퀵스타트가 막을 내려요. 아직 재미가 너무 많아서 멈출 수 없다면, 여기 연습 문제가 하나 있어요.

이 퀵스타트 처음의 요구 사항을 올바르게 구현해 보세요. 즉, 해당 브랜치에 denmark-lakes.parquet을 쓰고, 이걸 main으로 성공적으로 머지하는 거예요. main 브랜치의 내용을 나열하는 방법을 찾아보고, 다음과 같이 보이는지 확인하세요:

object          2023-03-21 17:33:51 +0000 UTC    20.9 kB         denmark-lakes.parquet
object          2023-03-21 14:45:38 +0000 UTC    916.4 kB        lakes.parquet

← lakeFS에서 Actions와 Hooks 사용하기 lakeFS 더 알아보기 →

더 알아보기 (Learn more)

공식 문서의 자세한 내용은 https://docs.lakefs.io/quickstart/work-with-data-locally/에서 확인하실 수 있어요.