何百万もの画像をMacosから外部ドライブ、Ubuntuサーバーに移動/コピーします。

何百万もの画像をMacosから外部ドライブ、Ubuntuサーバーに移動/コピーします。

私は、機械学習プロジェクトのために、数百万の画像(これまで1,500万以上)を含むデータセットを作成しました。 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〜16 MB / sの速度を報告します。 24時間が過ぎたが、まだ半分も終わっていない。

もっと良い方法がありますか?

私の目的では、rsyncがcpより良いかどうかはわかりません。 リモートサーバーからローカルコンピュータにファイルをコピーする方法は?

答え1

  1. データアーカイブはファイル転送速度の点で良い選択です。ただし、これらの画像がほとんどJPEGの場合、データはすでに圧縮されているため、データを圧縮してファイルサイズを1%または2%増やすのにCPU時間を無駄にします。tar(ユーザーが要求しない限り;-)ファイルを圧縮せずに一緒に圧縮するだけでよいので、試してみることができます。

  2. ネットワーク設定が許可されている場合に試すもう1つの方法は、ラップトップからWebサーバーを起動してターゲットホストからダウンロードすることです。これは、「ノートブックから外部メディアにコピー」+「外部メディアからターゲットにコピー」プロセスを単一ステッププロセスに簡素化します。私はこれを(Linuxマシンの間で)何度も練習し、うまくいきました。

これは非常に詳細です。ここ。主なステップは次のとおりです。

送信側から:

  1. 共有したいファイルを含むディレクトリにCDを移動します。
  2. Pythonを使用してWebサーバーを起動します。
    • Python 2の使用:python -m SimpleHTTPServerポート
    • Python 3の使用:python -m http.serverポート

受信側では、ファイルは次の場所にあります。http://発信者IP:ポート。ファイルを簡単に検索できます。wget -c http://senderIp:port/yourArchiveName

関連情報