Scripts Python paralelos em uma máquina remota

1

Semelhante a this thread, eu tenho uma máquina remota com 8 núcleos que eu quero usar para executar scripts em paralelo (1 script por núcleo de cada vez).

No entanto, não tenho vários scripts bash, mas um único script Python3 que desejo executar com entradas diferentes. Eu tentei parallel python3 -c main.py input* , parallel -j 100% python3 -c main.py ::: input* e parallel python3 main.py input* mas nada funcionou.

A mensagem de erro exata é:

parallel: Error: -g has been retired. Use --group.
parallel: Error: -B has been retired. Use --bf.
parallel: Error: -T has been retired. Use --tty.
parallel: Error: -U has been retired. Use --er.
parallel: Error: -W has been retired. Use --wd.
parallel: Error: -Y has been retired. Use --shebang.
parallel: Error: -H has been retired. Use --halt.
parallel: Error: --tollef has been retired. Use -u -q --arg-sep -- and --load for -l.

Eu não entendo como isso está relacionado à minha entrada. Eu não usei nenhuma dessas opções.

Sou razoavelmente novo e inexperiente com o Unix e não consegui fazê-lo funcionar sozinho ou com o googling. Qualquer ajuda é apreciada. Eu tenho que escrever um script de shell para me ajudar com isso?

    
por CGFoX 01.12.2016 / 10:34

3 respostas

2

O problema foi, na verdade, como o paralelismo foi instalado na máquina remota (executando o mais novo Ubuntu). Eu encontrei um tópico resolvendo meu problema: Execute sudo rm /etc/parallel/config após a instalação no Ubuntu para se livrar da configuração que causou minhas mensagens de erro.

O comando que uso para executar meu script python com entradas diferentes em paralelo é: parallel -j 100% python3 main.py ::: inputs*

No entanto, obrigado a todos que ajudaram!

    
por 01.12.2016 / 20:55
0

Você pode fazer isso atribuindo cada script a um núcleo específico usando taskset Primeiro você precisa obter o ID do processo para seu script com ps aux | grep <scriptname, input> ou usando pgrep -f <scriptname, input> , em seguida, passá-lo para taskset como este taskset -pc 0 $pid , isso atribuirá o processo ao núcleo 1. para mais informações sobre taskset link

    
por 01.12.2016 / 10:46
0

Não tenho certeza de onde você está recebendo sua mensagem de erro. Normalmente a sintaxe seria

parallel -j 100% python3 -c main.py ::: input*

Por exemplo, se você tiver apenas 2 arquivos inputa, inputb , isso é executado em paralelo

python3 -c main.py inputa
python3 -c main.py inputb

Se você tem 8 núcleos de CPU e, digamos, 10% de arquivosinput*, o argumento -j 100% faz com que o paralelismo execute apenas 8 comandos de uma só vez no início. Quando um terminar, o próximo comando será executado até que todos os 10 sejam concluídos. Nós confiamos no agendamento normal do Linux para atribuir cada comando a uma cpu separada.

    
por 01.12.2016 / 14:32