2011-03-17 2 views
7

약 1.5GB의 HDF5 파일이 약 500 개 있습니다.많은 수의 HDF5 파일 연결하기

각각의 파일은 7 개의 복합 (int, double, double) 데이터 세트 및 가변 개수의 샘플 인 정확한 구조를가집니다.

이제 각 데이터 세트를 연결하여이 모든 파일을 연결하여 결국 7 개의 데이터 세트가있는 750GB 파일 하나가 생성됩니다.

현재 나는 h5py 스크립트를 실행하고 있습니다 :

  • 순서에 열려있는 모든 파일 무제한 최대의 오른쪽 데이터 세트와 HDF5 파일을 만듭니다 샘플 수 (무엇
  • 확인 이 변수로)
  • 데이터를 추가 글로벌 파일의 크기를 조정

이것은 분명히 많은 시간이 걸립니다. 개선에 대한 제안이 있으십니까?

클러스터에서 작업 중이므로 병렬로 HDF5를 사용할 수 있지만 충분하지 않습니다. C 프로그래밍을 직접 프로그래밍하여 도구를 작성해야합니다.

+0

한 쌍의 파일을 병합 할 가능성이 있습니다 귀하의 클러스터; 문제를 250 개의 3GB 파일, 125 개의 6GB 파일 등으로 줄입니다. 나중에 병합 할 때 부분적으로 병합 된 파일이 시간을 절약 할 수있는 경우에만 도움이됩니다. – sarnold

+0

@sarnold NERSC의 호퍼를 연구 중이며 이론적 인 I/O 속도는 25GB/s이고 파일 시스템은 완전히 병렬이며 MPI I/O를 지원합니다. –

+0

한 번에 3 또는 4 개의 파일을 읽고 다시 쓰려고 생각했지만 가장 좋은 방법은 어떻게 든 mpi I/O를 이용하는 c 유틸리티입니다. –

답변

8

나는 각 단계에서 크기를 조정할 때 대부분의 시간이 파일 크기 조정에 소요되었다는 것을 알게되었으므로 이제는 내 모든 파일을 골라서 길이가 가변적입니다.

그런 다음 전체 길이를 모든 파일의 합계로 설정하는 글로벌 h5 파일을 만듭니다.

이 단계가 끝나면 모든 작은 파일의 데이터로 h5 파일을 채 웁니다.

이제 각 파일 당 약 10 초가 걸리므로 훨씬 많은 시간이 걸리기 전에 2 시간 이내에 완료되어야합니다.

1

나는 이것이 나를 괴롭히는 배지를 얻는다. 그러나 최근에이 분야에서 나에게 도움이되는 것들이있다.

줄리아에서 이것은 몇 초가 걸립니다.

  1. 는 (많이가있는 경우 한 번에 이렇게 떠들썩한 파티를 사용할 수 있습니다) 루프에서
  2. 하는 txt 파일의 각 라인을 읽고 사용하는 모든 HDF5 파일 경로를 나열하는 txt 파일을 만듭니다 label$i = h5read(original_filepath$i, "/label")
  3. CONCAT 모든 라벨 라벨 = [라벨 라벨 $의 i]는
  4. 가 그럼 그냥 쓰기 : 당신이 그룹이나 더 복잡한 HDF5 파일이있는 경우 h5write(data_file_path, "/label", label)

같은 수행 할 수 있습니다.

1

Ashley의 답변이 저에게 효과적이었습니다.

# concatenate_HDF5.jl 
using HDF5 

inputfilepath=ARGS[1] 
outputfilepath=ARGS[2] 

f = open(inputfilepath) 
firstit=true 
data=[] 
for line in eachline(f) 
    r = strip(line, ['\n']) 
    print(r,"\n") 
    datai = h5read(r, "/data") 
    if (firstit) 
     data=datai 
     firstit=false 
    else 
     data=cat(4,data, datai) #In this case concatenating on 4th dimension 
    end 
end 
h5write(outputfilepath, "/data", data) 
:
ls -rt $somedirectory/$somerootfilename-*.hdf5 >> listofHDF5files.txt 

하나 개의 파일에 여러 개의 파일을 연결하는 줄리아 스크립트를 작성 :

만들기 텍스트 파일이 떠들썩한 파티에 연결하는 파일 목록 : 여기 줄리아 그녀의 제안의 구현입니다

다음을 사용하여 위의 스크립트 파일을 실행하십시오.

julia concatenate_HDF5.jl listofHDF5files.txt final_concatenated_HDF5.hdf5