我可以在基于容器的 Azure 批处理池中使用 docker 卷吗

Can I use docker volumes in container based Azure batch pools

场景:我在同一个 dataset 上有多个任务 运行ning DL 个模型。在每个任务中下载相同的 dataset 变得很浪费,因此寻找允许跨需要相同 dataset.[=16= 的不同任务 运行 持久保存下载数据的方法]

我探索了 ResourceFilesApplicationPackages,但是根据我的理解,它们不符合我的要求,原因如下

  1. ResourceFiles 下载每个任务的数据 运行 并且不会持久化。
  2. ApplicationPackages 有配额限制(默认为 20)。而且它们不能从 docker 容器中创建。

根据 docker 卷功能,我可以 运行 我的任务使用相同的卷 ID,下载的数据将保留在 VM 中。 由于 Azure 批处理不直接公开 运行 容器的“docker 运行”命令,是否有任何其他方法可以使用 [=53= 为批处理任务指定使用卷] SDK?

我们可以使用 TaskContainerSettings 的“container_run_options”来提及 docker 卷吗?

编辑

我尝试在 TaskContainerSettings 中指定卷,但在尝试写入挂载路径时,出现权限被拒绝错误

PermissionError: [Errno 13] Permission denied: '/opt/docker/Gy9EKVB728YcVZgn7e2AVuuQ/00000001.jpg'

找到了使用 docker 卷的方法。

首先: 使用 TaskContainerSettings 的“container_run_options”来提及 docker 个卷。

    task_container_settings = batch.models.TaskContainerSettings(
        image_name=image_name,
        container_run_options=f"-v {<volume_id>}:{<path>}"
    )

这将在 /mnt/docker/volumes 中安装一个名为 的卷,并且可以在上述的容器中访问。

第二个:运行 池范围内的任务和提升的管理员权限。否则,您将在尝试写入容器中的挂载卷路径时出现权限错误。

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)
                )
            )

这将 运行 具有 root 权限的任务,以便由该任务旋转的容器可以访问已安装的卷。