Есть ли способ открыть предварительно созданный контейнер Сингулярности с файлами в моем текущем каталоге?

#docker #tensorflow #machine-learning #singularity-container

Вопрос:

Я использую предварительно построенный контейнер сингулярности для Tensorflow ML в удаленном кластере. Я открываю контейнер сингулярности, расположенный в /cvmfs/unpacked.cern.ch/registry.hub.docker.com/fnallpc/ команде, как показано ниже

 singularity run --nv --bind `readlink $HOME` --bind `readlink -f ${HOME}/nobackup/` 
--bind /cvmfs /cvmfs/unpacked.cern.ch/registry.hub.docker.com/fnallpc/fnallpc-docker:tensorflow-latest-devel-gpu-singularity
 

Это хорошо открывает изображение сингулярности, и команда работает.

Теперь у меня есть несколько файлов, которые мне нужны в среде Tensorflow, но когда я открываю изображение, очевидно, что файла нет. Есть ли способ использовать файлы в моем рабочем каталоге (для которого требуется среда Tensorflow), когда я открываю контейнер Singularity? Интересно, есть ли команда для совместного открытия изображения и файлов в моем рабочем каталоге, чтобы у меня был доступ к этим файлам, находясь в образе контейнера.

Комментарии:

1. вы запускаете образ локально или он запускает запуск на удаленном кластере?

2. Я запускаю изображение локально

Ответ №1:

И ваш $HOME , и текущий каталог по умолчанию монтируются автоматически. Однако автоматическое монтирование может завершиться без сбоев, если путь не существует внутри контейнера. например, вы выполняете из /cluster/storage/somepath /cluster , но внутри контейнера сингулярности его нет. То же самое может произойти, если $HOME это где-то странно, но встречается гораздо реже.

Явное использование --bind не имеет этой проблемы. Добавление --bind "$PWD" должно позаботиться об этом.

Вы можете быстро проверить, что вы выполняете там, где ожидаете singularity exec --bind "$PWD" image.sif pwd . Рабочий каталог внутри контейнера совпадает с каталогом за пределами контейнера (если он доступен), возвращаясь к $HOME тому, если $PWD он недоступен, и / если $PWD ни $HOME один из них не доступен внутри изображения.