Перемещение хранилища метаданных для кластерных заданий с помощью snakemake

Я использую snakemake для отправки заданий из файловой системы AFS в очередь HTCondor. Подача начинается нормально. Задания отправлены и успешно завершены. Но после определенного момента отправка вылетает со следующей ошибкой:

OSError: [Errno 27] File too large: '/afs/cern.ch/work/a/avenkate/private/MyKstTauTau/.snakemake/metadata/cm9vdDovL2Vvc2xoY2IuY2Vybi5jaC8vZW9zL2xoY2IvdXNlci9hL2F2ZW5rYXRlL0tzdFRhdVRhdS9Cc0JrZ01DL1ByZXNlbC8yMDE2X01VLzIwMjBfMDQvMzY1OTMyLzM2NTkzMjE4Ny9udHVwbGVfVE0ucm9vdA=='

Когда я смотрю на эту ошибку, я понимаю из https://sites.google.com/a/stanford.edu/rcpedia/how-do-i/why-do-i-keep-getting-errno-27-file-too-large, что это связано с AFS, а не snakemake. Кажется, это ограничение на количество файлов в каталоге в AFS (само сообщение об ошибке вводит в заблуждение. Размер файла метаданных указан в байтах. Но имена файлов длинные).

Поэтому я хотел бы знать, есть ли способ обойти эту проблему с накоплением файлов метаданных. У меня есть 10268 файлов в моем каталоге метаданных, когда происходит сбой, и все они из одного запуска snakemake.

Возможно ли, чтобы snakemake не хранил файлы метаданных локально, а скорее во временном каталоге любого узла, на котором выполняется задание? Я вижу в параметрах командной строки, что мы можем указать --shadow-prefix, чтобы указать snakemake, где хранить теневой каталог. Есть ли аналогичная функциональность для метаданных?

Буду признателен за любой вклад по этому поводу. Моя команда отправки

snakemake     --cluster 'condor_qsub -V -l procs={threads}' --forceall    --latency-wait 30     --rerun-incomplete     --max-jobs-per-second 100     --printshellcmds     --restart-times 0     --local-cores 8     --keep-going     -j 100     -s Snakefile_Data   --shadow-prefix $TMPDIR/MyKstTauTau.snakemake```

person Arvind    schedule 20.05.2020    source источник


Ответы (1)


Я никогда не использовал AFS, но похоже, что он работает аналогично slurm. Я предполагаю, что эти файлы метаданных - это стандартный вывод и стандартный поток заданий. Вы должны иметь возможность перенаправить, где хранятся stdout и stderr, с помощью -o и -e в соответствии с этим справочная страница.

Таким образом, что-то вроде этого должно заставить snakemake (фактически AFS) не создавать ни один из этих файлов:

snakemake ... --cluster "condor_qsub -o /dev/null -e /dev/null ..."

изменить:

Таким образом, метаданные не являются стандартным выводом и стандартным потоком от condor, моя проблема. Я не могу придумать «настоящее» решение, но вот два варианта, которые вы можете попробовать:

  1. Просто очистите метаданные с помощью snakemake --cleanup-metadata. Если вам повезет, есть много вещей из предыдущих запусков, которые можно удалить, и это решит проблему!
  2. Используйте меньше параллельных работ. Хотя 100 - это не так много, для каждого задания отслеживаются определенные метаданные. Таким образом, выполнение меньшего количества заданий будет означать меньше файлов метаданных.
person Maarten-vd-Sande    schedule 22.05.2020
comment
Привет, Мартен, Спасибо, что нашли время разобраться в этом. Под метаданными я имею в виду именно папку .snakemake / metadata. Эта папка, по-видимому, содержит информацию, относящуюся к запущенным процессам, и множество файлов (с очень длинными именами файлов, как в моем сообщении об ошибке) накапливаются в этой папке, в результате чего AFS достигает определенного предела и вызывает ошибку. На самом деле я не уверен, куда condor помещает файлы stdout и stderr прямо сейчас, но я учту вашу точку зрения, когда я захочу их переместить. - person Arvind; 23.05.2020
comment
@Arvind, я отредактировал свой ответ. Я не могу придумать настоящего решения, но, возможно, это поможет. Удачи! - person Maarten-vd-Sande; 23.05.2020
comment
@ Maarten-vd-Saande, очистка метаданных была бы решением, если бы не тот факт, что в моем случае использования у меня было ›10 000 заданий за один запуск snakemake, и, таким образом, было создано так много файлов метаданных. Ваше второе предложение - это то, для чего я реструктурировал свой код, выполняя меньше параллельных задач. Спасибо еще раз! - person Arvind; 24.05.2020