Olá, estou tentando baixar um grande número de arquivos de uma vez; 279 para ser mais preciso. Estes são BAM grandes (~ 90 GB) cada. O cluster onde estou trabalhando possui vários nós e felizmente posso alocar várias instâncias de uma vez.
Dada esta situação, gostaria de saber se posso usar wget
um arquivo em lote ( veja o exemplo abaixo) para atribuir cada download a um nó separado para realizar de forma independente.
arquivo_batch.txt
<https_link_1> -O DNK07.bam
<https_link_2> -O mixe0007.bam
<https_link_3> -O IHW9118.bam
.
.
Em princípio, isso não só irá acelerar as coisas, mas também evitar que a execução falhe, já que o tempo de espera para esta execução é de 24h, e não será suficiente baixar todos esses arquivos em uma única máquina consecutivamente.
Esta é a aparência do meu script 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
Como você pode ver, eu estava pensando em usar um array job
(não tenho certeza se funcionará); alternativamente, pensei em alocar 279 nós esperando que o SLURM fosse inteligente o suficiente para enviar cada download para um nó separado (não tenho certeza...). Se você conhece uma maneira de fazer isso de forma eficiente, qualquer sugestão é bem-vinda. Desde já, obrigado!
Expanda o comando em vários
wget
comandos para poder enviá-los ao SLURM como uma lista:Ou, se
sgdp-download-list.txt
for apenas uma lista dewget
comandos faltando nowget
início (que é o que seu exemplo sugere), basta usar:Em seguida, envie o
wget.sh
como o trabalho.Desafio de quadro
Você está falando de 25 Terabytes de download. Acho que você descobrirá que a busca de nós é a menor de suas preocupações. Se eles vierem do mesmo site remoto, o site remoto também poderá ter problemas de CPU. Mais importante ainda, a largura de banda da rede é um problema. Se você está tentando fazer esse download através de um pipe, não importa quantos nós você está puxando - o pipe será o limite.
Dito isto, o wget não consome muita CPU. Executar 10 em paralelo em um nó não deve ser um problema em termos de CPU.
Se esta for uma atividade regular, recomendo ver se você pode baixar deltas.
Alternativa
Há uma velha piada da Usenet. Alguém perguntou qual a melhor forma de enviar diariamente uma grande quantidade de dados de Los Angeles para São Francisco. A resposta: UPS . As velocidades da rede aumentaram, mas o seu volume também. A Amazon leva isso a sério: ela pode enviar a você uma caixa para carregar os dados e depois devolvê-los para colocá-los na nuvem.
Olá @terdon e @David G.,
Desculpe pelo atraso na resposta. No final, o suporte técnico do cluster me recomendou uma abordagem ad hoc usando nós de movimentação de dados com os quais eu poderia fazer download continuamente até que os links expirassem.
Então, simplesmente tive que regenerá-los e iniciar o processo novamente. No geral, não foi o processo mais rápido (demorou cerca de uma semana), mas considerando a enorme quantidade de dados baixados, também não foi tão ruim!