こんにちは。正確には、279個のファイルを一度にダウンロードしようとしています。それぞれはBAMサイズです(〜90GB)。私が作業しているクラスタには複数のノードがあり、幸いにも一度に複数のインスタンスを割り当てることができます。
このような状況では、wget
バッチファイル(バラより以下の例)独立した実行のために各ダウンロードを別々のノードに割り当てます。
バッチファイル.txt
<https_link_1> -O DNK07.bam
<https_link_2> -O mixe0007.bam
<https_link_3> -O IHW9118.bam
.
.
原則として、これにより速度が速くなるだけでなく、実行失敗も防止できます。なぜなら、この実行の停止時間は24時間であり、すべてのファイルを1台のコンピュータにダウンロードするのに十分長くないからです。
私のBASHスクリプトは次のとおりです。
#!/bin/bash
#
#SBATCH --nodes=279 --ntasks=1 --cpus-per-task=1
#SBATCH --time=24:00:00
#SBATCH --mem=10gb
#
#SBATCH --job-name=download
#SBATCH --output=sgdp.out
##SBATCH --array=[1-279]%279
#
#SBATCH --partition=<partition_name>
#SBATCH --qos=<qos_type>
#
#SBATCH --account=<user_account>
#NAMES=$1
#d=$(sed -n "$SLURM_ARRAY_TASK_ID"p $NAMES)
wget -i sgdp-download-list.txt
ご覧のとおり、私はarray job
(動作しているかどうかわからない)使用を検討しています。あるいは、279個のノードを割り当てることを検討しており、SLURMが各ダウンロードを別々のノードに送信するのに十分スマートであることを願っています(わかりません... .. .)。効果的な方法を知っているなら、どんな提案でも歓迎します。よろしくお願いします!
答え1
wget
SLURMにリストとして送信できるように、コマンドを複数のコマンドに展開します。
while IFS= read -r url; do
printf 'wget "%s"\n' "$url"
done < sgdp-download-list.txt > wget.sh
または、最初にコマンドが欠落しているリストがある場合(あなたの例で提案されているように)、以下を使用してくださいsgdp-download-list.txt
。wget
wget
sed 's/^/wget /' sgdp-download-list.txt > wget.sh
その後、wget.sh
課題として提出してください。
答え2
フレームワークチャレンジ
25TBのダウンロードについて話しています。ノードを取得することが心配の中で最も少ないことがわかります。同じリモートサイトにいる場合、リモートサイトにもCPUの問題がある可能性があります。さらに、ネットワーク帯域幅も問題です。パイプラインからこのダウンロードをインポートしようとすると、インポートするノードの数は実際には重要ではありません。パイプラインが制限になります。
しかし、wgetは特にCPUをあまり使用しません。 CPUに関する限り、1つのノードで10個のプログラムを並列に実行することは問題になりません。
これが定期的なアクティビティである場合は、デルタをダウンロードできることを確認することをお勧めします。
選ぶ
ユーズネットに関する古いジョークがあります。誰かがロサンゼルスからサンフランシスコに毎日大量のデータを送信するための最良の方法は何ですか?答え:アップ。ネットワーク速度は増加しましたが、ボリュームも増加しました。 Amazonはこの点に留意しています。データをロードするボックスを出荷してから、再配送してクラウドに入れることができます。
答え3
@terdonさん、@David Gさん、こんにちは。
回答が遅すぎてすみません。最後に、クラスタのテクニカルサポートでは、データ移動ノードを使用してリンクが期限切れになるまでダウンロードを継続する一時的な方法をお勧めします。
その後、再生成してプロセスを再起動します。全体的に最速の処理ではなかったのですが(1週間ほどかかります)、ダウンロードされるデータの量が多くて悪くはありませんでした!