대량의 (이진) 데이터의 버전 제어를 처리하는 방법


46

저는 지구 물리학 박사 학위를 받았으며 많은 양의 이미지 데이터 (수백 GB, 수만 개의 파일)를 다루고 있습니다. 나도 svngit상당히 잘 함께 쉽게 작업 할 수있는 기능과 함께 프로젝트 역사를 소중히 디스크 손상에 대한 보호를 갖게. 내가 찾아 git도 일관된 백업을 가진 매우 유용하지만 난 그 자식 효율적 이진 많은 양의 데이터를 처리 할 수없는 것을 알고있다.

석사 연구에서 비슷한 크기의 데이터 세트 (이미지)를 작업했으며 다른 서버 / 장치의 다른 버전을 추적하는 데 많은 문제가있었습니다. 네트워크를 통해 100GB를 확산시키는 것은 실제로 재미가 없으며 많은 시간과 노력이 들었습니다.

나는 과학의 다른 사람들도 비슷한 문제가있는 것으로 알고 있지만 좋은 해결책을 찾지 못했습니다.

기관의 저장 기능을 사용하고 싶기 때문에 "덤"서버를 사용할 수있는 것이 필요합니다. 또한 휴대용 하드 디스크에 추가 백업을하고 싶습니다. 가능하면 네트워크를 통해 수백 GB를 전송하지 않기를 원하기 때문입니다. 따라서 둘 이상의 원격 위치를 처리 할 수있는 도구가 필요합니다.

마지막으로, 다른 연구원이 사용할 수있는 것이 정말로 필요하므로 매우 간단 할 필요는 없지만 몇 시간 안에 배울 수 있습니다.

나는 많은 다른 솔루션을 평가했지만 아무도 그 법안에 맞지 않는 것 같습니다.

  • svn 은 다소 비효율적이며 스마트 서버가 필요합니다.
  • hg bigfile / largefile 은 하나의 리모컨 만 사용할 수 있습니다
  • git bigfile / media 는 하나의 리모컨 만 사용할 수 있지만 매우 효율적이지 않습니다.
  • 다락방 에 통나무 나 다른 능력이없는 것 같습니다
  • bup 은 정말 좋아 보이지만 작동하려면 "스마트"서버가 필요합니다

나는 git-annex(그리고 훨씬 더) 필요한 모든 일을 시도 했지만 사용하기가 어렵고 잘 문서화되지 않았습니다. 나는 그것을 며칠 동안 사용해 왔으며 머리를 감쌀 수 없었으므로 다른 동료가 관심을 가질 것 같지 않습니다.

연구자들은 대규모 데이터 세트를 어떻게 처리하고 다른 연구 그룹은 무엇을 사용합니까?

분명히, 나는 주로 특정 연구자들만이 아니라 다른 연구자들이이 상황을 어떻게 다루는 지에 관심이있다. 거의 모든 사람 이이 문제를 겪어야하는 것처럼 보이지만 해결 한 사람은 모르겠습니다. 원본 데이터의 백업을 유지하고이 버전 관리 기능을 모두 잊어야합니까? 다른 사람들이하는 일입니까?


1
@scaaahu 나는 이것이 반드시 소프트웨어 질문이라고 생각하지 않는다; 적절한 대답은 워크 플로 또는 도구와 시스템의 조합을 설명 할 수도 있습니다. (어쨌든, 다른 곳에서 주제를 다루는 것은 여기서 질문을

2
이미지 데이터로 인한 데이터 손상을 막기 위해 체크섬 파일을 모든 파일과 md5 체크섬으로 다시 계산하는 스크립트를 정기적으로 실행합니다. 그런 다음 체크섬 파일은 git에 보관됩니다. 이제 체크섬이 변경되면 git diff로 즉시 볼 수 있습니다. 또한 어떤 파일이 제거 및 추가되었는지 확인할 수 있습니다. 예를 들어 데이터 손상의 징후가있는 경우 정규 백업을 사용하여 이전 버전을 복원 할 수 있습니다. 완벽하지는 않지만 아무것도 아닌 것보다 낫습니다.

1
@ JukaSuomela 매우 큰 데이터 세트가있을 때 합리적인 질문이라고 생각합니다. 데이터 세트가 자주 변경되면 백업 버전 제어로 사용되는 경우 많습니다 .

1
나는이 질문 을 학계에 특정한 것이 아닌 데이터 / 데이터베이스를 다루기 때문에 주제를 벗어난 주제로 마무리하려고 투표하고 있습니다 . 질문은 훌륭하고 (IMHO)는 DataScience.SE 또는 (아마도) Databases.SE로 옮겨야합니다.
Piotr Migdal

1
@Johann 데이터 과학자는 배경이 다릅니다. 예를 들어, 광산은 양자 역학에 있습니다. 여기서 중요한 요점은 다음과 같습니다. 1. StackExchange는 소위 보트 질문을 권장하지 않습니다.
Piotr Migdal

답변:


12

내가 사용하고있는 것은 일종의 하이브리드 솔루션입니다.

  • 원시 데이터 백업
  • 워크 플로우의 자식
  • 워크 플로 + 처리 된 데이터의 수동 스냅 샷 (예 :
    • 표준 전처리
    • 정말 시간이 많이 걸리는
    • 출판을 위해

변경 사항을 검토하는 데 걸리는 시간이 너무 길어 결국에는 돈을 지불하지 않기 때문에 대량의 이진 데이터에 대한 전체 개정 내역을 갖는 것이 거의 불가능하다고 생각합니다. 반자동 스냅 샷 절차 (결과적으로 다른 스냅 샷에 변경되지 않은 데이터를 복제하지 않음으로써 일부 디스크 공간을 절약하기 위해)가 도움이 될 수 있습니다.


글쎄, 나는 find . -type f -print0 | xargs -0 md5sum > checksums.md5체크섬을 계산하고 체크섬을 확인 md5sum -c checksums.md5하고 체크섬을 버전 제어하는 ​​데 사용하고있다. 다른 위치 / 다른 머신의 데이터를 확인하는 데 도움이됩니다. 우리가 지금 할 수있는 최선 인 것 같습니다
Johann

데이터를 수정하여 항상 파일 이름을 변경하면 좋은 해결책이 될 수 있습니다. 그렇지 않으면 rsync원래 데이터의 on (사본) 을 사용하여 데이터 자체를 확인하는 것이 좋습니다 . 신경 과학에서 흔한 또 다른 가능성은 (때로는 문서화가 잘되어 있지 않기 때문에 많이 좋아하지는 않지만) nipype python 패키지를 사용하는 것입니다. 관리자는 분석 중간 단계의 이진 데이터 캐시를 자동으로 관리합니다.
norok2

@norok 당신은 훌륭한 일반적인 프레임 워크를 설명했습니다. DVC 도구에서 비슷한 것을 구현했습니다. 아래 답변을 살펴보십시오. 귀하의 의견에 감사드립니다.
Dmitry Petrov

9

저는 매우 큰 합성 생물학 데이터 세트와 비슷한 문제를 처리했습니다. 여기서 수많은 GB의 유세포 분석 데이터가 수많은 수천 개의 파일에 분산되어 있으며 여러 기관의 여러 단체에서 일관되게 유지해야합니다.

svn 및 git과 같은 일반적인 버전 제어는 이러한 유형의 데이터 세트에 맞게 설계되지 않았기 때문에이 상황에서는 실용적이지 않습니다. 대신 "클라우드 스토리지"솔루션, 특히 DropBoxBittorrent Sync를 사용하게되었습니다.. DropBox는 최소한의 기본 로깅 및 버전 제어를 수행하고 서버를 관리한다는 이점이 있지만 상용 서비스라는 단점은 대용량 스토리지 비용을 지불해야하며 게시되지 않은 데이터를 상업용 저장고; 많은 비용을 지불 할 필요가 없으므로 실행 가능한 옵션입니다. Bittorrent Sync는 인터페이스가 매우 유사하지만 자체 스토리지 서버에서 직접 실행하며 버전 제어 기능이 없습니다. 둘 다 프로그래머의 영혼을 다치게했지만 지금까지 공동 작업자와 내가 찾은 최고의 솔루션입니다.


Dropbox의 인기있는 오픈 소스 버전 인 OwnCloud가 있습니다. 그래도 시도하지 않았습니다.

9

Amazon S3 버킷의 버전 관리를 사용 하여 10-100GB의 10-100GB를 관리했습니다. 전송 속도가 느릴 수 있으므로 압축 및 전송을 병렬로 수행하거나 EC2에서 계산을 실행하는 데 도움이되었습니다. BOTO의 라이브러리는 좋은 파이썬 인터페이스를 제공합니다.



6

우리는 실제 데이터 파일을 버전 관리하지 않습니다. 이진 형식 대신 CSV로 저장하더라도 원하지 않습니다. 으로 리카르도 M.는 말했다, 우리는 10M 행 데이터 세트에 우리의 시간 검토 행 단위 변경을 지출하지 않을거야.

대신 처리 코드와 함께 메타 데이터를 버전 제어합니다.

  • 수정일
  • 파일 크기
  • 행 수
  • 열 이름

이를 통해 VCS에 스트레스를주지 않으면 서 데이터 파일이 변경 되었는지 와 변경된 내용 (예 : 추가 / 삭제 된 행, 새 / 이름 바뀐 열)에 대한 아이디어를 알 있습니다.


5

이것은 매우 일반적인 문제입니다. 대학을 위해 연구 프로젝트를했을 때와 지금은 산업 데이터 과학 프로젝트에서이 고통을 겪었습니다.

이 문제를 해결하기 위해 오픈 소스 도구 인 DVC 를 만들고 최근에 출시했습니다 .

기본적으로 Git의 코드와 로컬 디스크 또는 클라우드의 데이터 (S3 및 GCP 스토리지)를 결합합니다. DVC는 데이터와 코드 간의 종속성을 추적하고 종속성 그래프 (DAG)를 작성합니다. 프로젝트를 재현 할 수 있도록 도와줍니다.

DVC 프로젝트는 쉽게 공유 할 수 있습니다-데이터를 클라우드에 동기화 (dvc sync 명령), Git 리포지토리를 공유하고 클라우드의 데이터 버킷에 대한 액세스를 제공하십시오.

"몇 시간 안에 배울 수있는"-좋은 지적입니다. Git에 익숙하다면 DVC에 문제가 없어야합니다. 세 가지 명령 만 배우면됩니다.

  1. dvc init처럼 git init. 기존 Git 리포지토리에서 수행해야합니다.
  2. dvc import-데이터 파일 (소스)을 가져옵니다. 로컬 파일 또는 URL
  3. dvc run-워크 플로 단계와 같은 단계 dvc run python mycode.py data/input.jpg data/output.csv. DVC는 단계 간의 종속성을 자동으로 도출하고 DAG를 빌드하여 Git에 유지합니다.
  4. dvc repro-데이터 파일을 재현하십시오. 예 : vi mycode.py-코드를 변경 한 다음 dvc repro data/output.csv파일 (및 모든 종속성)을 재현합니다.

클라우드 및 기본 S3 또는 GCP 기술을 통해 데이터를 공유하려면 몇 가지 추가 DVC 명령을 학습해야합니다.

DVC 튜토리얼은 최고의 출발점입니다- "데이터 버전 관리 : 반복 기계 학습"


1
큰 이진 파일 (대부분 비디오) 만 저장하는 데 사용할 수 있습니다. ML은 목표가 아닙니다. 목표는 큰 바이너리 파일을 저장할 저장소를 갖는 것입니다. Repo에는 캐싱, 선택적 체크 아웃 / 풀 (예 : perforce) 및 파일 / 디렉토리 잠금 메커니즘이 있어야합니다. 그런 목적에 적합합니까?
hemu

1
@hemu 예. DVC는 ML 기능이없는 기본 대용량 데이터 파일 시나리오 (ML 파이프 라인 및 재현성)에 적합합니다. Git 시맨틱으로 인해 Perforce-Lock 시맨틱이 지원되지 않습니다. 대신 파일 별 체크 아웃을 사용하십시오.
Dmitry Petrov


0

내 프로젝트 DOT : Distrubuted Object Tracker 저장소 관리자를 살펴볼 수 있습니다.
개인 용도의 바이너리 파일 용 매우 간단한 VCS입니다 (협업 없음).
체크섬 및 블록 중복 제거에 SHA1을 사용합니다. 완전한 P2P 동기화.
하나의 고유 한 기능 : 풀 / 푸시 용 임시 일회용 TCP 서버.
전송을 위해 SSH를 사용할 수도 있습니다.

아직 출시되지 않았지만 좋은 출발점이 될 수 있습니다.
http://borg.uu3.net/cgit/cgit.cgi/dot/about/


0

hangar을 사용해보십시오 . 데이터 버전 제어 세계에서 비교적 새로운 선수이지만 블롭의 버전을 지정하는 대신 텐서의 버전을 지정하여 정말 좋은 일을합니다. 문서가 시작하기에 가장 좋은 장소 여야합니다. 데이터가 텐서로 저장되므로 ML 코드 내에서 직접 사용할 수 있어야합니다. 이제 격납고에는 PyTorch 및 Tensorflow 용 데이터 로더가 있습니다. 격납고를 사용하면 제로 비용 분기, 병합, 역사를 통한 시간 여행과 같은 git의 모든 이점을 얻을 수 있습니다. 격납고에서 복제에 대한 좋은 특징 중 하나는 부분 복제를 할 수 있다는 것 입니다. 즉, 원격에 10TB의 데이터가 있고 모델 프로토 타이핑에 100MB 만 필요한 경우 전체 복제 대신 부분 복제를 통해 100MB 만 가져올 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.