Я хочу передать файл, содержащий список команд, в gnu -rallel при использовании замещающих строк (например, {%}
).
К сожалению, если используются замещающие строки, gnu -rallel интерпретирует команды в файле как аргументы для /bin/bash
.
Вот что я хочу сделать:
parallel -j 8 'CUDA_VISIBLE_DEVICES=$(({%} - 1)) {}' < commands.txt
где содержание commands.txt
равно:
/path/to/binary -arg1 a -arg2 1.0
/path/to/binary -arg1 a -arg2 1.1
...
/path/to/binary -arg1 z -arg2 9.9
Однако возникает следующая ошибка:
/bin/bash: /path/to/binary -arg1 a -arg2 1.0: command not found
Я надеялся, что GNU Parallel запустится:
CUDA_VISIBLE_DEVICES=0 /path/to/binary -arg1 a -arg2 1.0
Назначение переменной среды CUDA_VISIBLE_DEVICES
- заставить каждый процесс работать на другом GPU (по умолчанию все процессы выполняются на одном GPU). Если бы мне не нужно было CUDA_VISIBLE_DEVICES
, следующий код работал бы отлично:
parallel -j 8 < commands.txt
Как мне обойти это?