저는 기계 학습 프로젝트를 위해 수백만 개의 이미지(지금까지 1,500만 개 이상)가 포함된 데이터 세트를 만들었는데, 이는 500GB 이상의 저장 공간을 차지합니다. Macbook Pro에서 생성했지만 DGX1(GPU 클러스터)로 전송하고 싶습니다. 빠른 외부 SSD(raid0의 2x nvme)에 복사한 다음 해당 드라이브를 로컬 터미널에 직접 연결하고 네트워크 스크래치 디스크에 복사하는 것이 더 빠를 것이라고 생각합니다. 24시간 넘게 외장 드라이브에 cp-ing을 했기 때문에 더 이상 확신할 수 없습니다.
처음에는 Finder GUI를 사용하여 복사해 보았습니다(나쁜 생각입니다!). 더 작은 데이터 세트(2M 이미지)의 경우 7zip을 사용하여 일부 아카이브를 만듭니다. 이제 MacOS에서 터미널을 사용하여 cp를 통해 파일을 복사합니다.
나는 노력했다 cp /path/to/dataset /path/to/external-ssd
.
Finder는 복사를 위한 "준비" 단계에서 오랜 시간이 걸리기 때문에 확실히 최선의 방법은 아닙니다.
7zip을 사용하여 데이터 세트를 보관하면 "파일" 전송 속도가 빨라졌지만 파일을 추출하는 데는 4일(!)이 걸렸고 데이터 세트는 훨씬 더 작았습니다.
명령줄 cp를 사용하면 시작은 빠르지만 느려지는 것 같습니다. 활동 모니터는 디스크에 6-8k IO를 표시합니다. 아마도. iostat는 적어도 무작위 검사 중에 14-16MB/s 사이의 속도를 보고합니다. 24시간이 지났는데 아직 절반도 끝나지 않았습니다.
더 좋은 방법이 있나요?
내 목적으로는 rsync가 cp보다 나은지 확실하지 않습니다. 원격 서버에서 로컬 컴퓨터로 파일을 복사하는 방법은 무엇입니까?
답변1
데이터 보관은 파일 전송 속도 측면에서 좋은 선택입니다. 그러나 이러한 이미지가 대부분 JPEG인 경우 데이터는 이미 압축되어 있으므로 데이터를 압축하여 파일 크기를 1% 또는 2% 늘리는 데 CPU 시간을 낭비하게 됩니다.
tar
(사용자가 요청하지 않는 한 ;-) 파일을 압축하지 않고 함께 압축하기만 하면 되기 때문에 시도해 볼 수 있습니다.네트워크 설정이 허용하는 경우 시도해 볼 만한 또 다른 방법은 랩톱에서 웹 서버를 시작하고 대상 호스트에서 다운로드하는 것입니다. 이는 "노트북에서 외부 미디어로 복사" + "외부 미디어에서 대상으로 복사" 프로세스를 단일 단계 프로세스로 단순화합니다. 나는 이것을 (Linux 머신들 사이에서) 여러 번 연습했고 훌륭하게 작동했습니다.
이것은 매우 상세합니다.여기. 주요 단계는 다음과 같습니다.
송신 측에서:
- 공유하려는 파일이 포함된 디렉토리로 CD를 이동하세요.
- Python을 사용하여 웹 서버를 시작합니다.
- Python 2 사용: python -m SimpleHTTPServer 포트
- Python 3 사용: python -m http.server 포트
수신측에서는 파일이 다음 위치에 위치합니다.http://발신자IP:포트. 파일을 쉽게 검색할 수 있습니다.wget -c http://senderIp:port/yourArchiveName