#docker #docker-volume #azure-batch
#docker #docker-volume #azure-batch
Вопрос:
Сценарий: у меня есть несколько задач, в которых работают DL
одни и те же модели dataset
. Становится расточительным загружать одно и то же dataset
в каждой задаче, поэтому ищите методы, позволяющие сохранять загруженные данные в разных запусках задач, для которых требуется одно и то же dataset
.
Я исследовал файлы ресурсов и пакеты приложений, однако, насколько я понимаю, они не соответствуют моим требованиям из-за следующего
- Файлы ресурсов загружают данные для каждого запуска задачи и не сохраняются.
- Пакеты приложений имеют ограничение квоты (по умолчанию 20). И они не могут быть созданы из контейнера docker.
В соответствии с возможностями тома docker я могу запускать свои задачи с тем же идентификатором тома, и загруженные данные будут сохраняться в виртуальной машине. Поскольку Azure batch напрямую не предоставляет команду «docker run» для запуска контейнера, есть ли какой-либо другой способ указать использование томов для пакетных задач с использованием python SDK?
Можем ли мы использовать «container_run_options» в TaskContainerSettings для упоминания томов docker?
Редактировать
Я попытался указать volume в TaskContainerSettings, но при попытке записи в подключенный путь я получаю ошибку «отказано в разрешении»
PermissionError: [Errno 13] Permission denied: '/opt/docker/Gy9EKVB728YcVZgn7e2AVuuQ/00000001.jpg'
Ответ №1:
Найден способ использования томов docker.
Во-первых: используйте «container_run_options» в TaskContainerSettings, чтобы указать тома docker.
task_container_settings = batch.models.TaskContainerSettings(
image_name=image_name,
container_run_options=f"-v {<volume_id>}:{<path>}"
)
Это смонтирует том в /mnt/docker/volumes с именем <volume_id> и будет доступен в указанном контейнере.
Второе: запустите задачу в области пула и с повышенными правами администратора. Без этого вы получите ошибку разрешения при попытке записи в путь к подключенному тому в контейнере.
task = batch.models.TaskAddParameter(
id=task_id,
command_line=command,
container_settings=task_container_settings,
user_identity=batchmodels.UserIdentity(
auto_user=batchmodels.AutoUserSpecification(
scope=batchmodels.AutoUserScope.pool,
elevation_level=batchmodels.ElevationLevel.admin)
)
)
Это запустит задачу с правами суперпользователя, чтобы контейнер, созданный задачей, имел доступ к подключенному тому.