在 clearml 代理中的 docker 中安装 S3 存储桶
Posted
技术标签:
【中文标题】在 clearml 代理中的 docker 中安装 S3 存储桶【英文标题】:Mounting an S3 bucket in docker in a clearml agent 【发布时间】:2021-08-02 09:51:24 【问题描述】:在将用作 ClearML 代理的 docker 映像中安装 S3 容器的最佳做法是什么?我可以想到 3 种解决方案,但目前都无法使用:
-
使用prefabbed configuration in ClearML,特别是CLEARML_AGENT_K8S_HOST_MOUNT。为此,S3 存储桶将使用 rclone 单独安装在主机上,然后重新映射到 docker。这似乎只适用于 Kubernetes 而不是 Docker - 因此不起作用。
使用指定的here 安装s3fuse。问题是它可以与存储在 ClearML 浏览器会话中的 S3 存储桶密码一起使用吗?这似乎也很复杂,需要自定义 docker 镜像,更不用说以 --privileged 或类似方式运行 docker 镜像了。
使用 1.0 release notes 中指定的“docker_args 和 docker_bash_setup_script 参数到 Task.create()”将参数传递给 docker。这将类似于 (1),但参数将针对 bind-mounting the volume。我没有看到太多关于如何为此目的使用此新功能的文档或示例。
【问题讨论】:
【参考方案1】:我建议您查看网关后面的Storage gateway S3,您可以使用 NFS、EFS 或 S3 存储桶。
阅读更多:https://aws.amazon.com/storagegateway/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc
有多种方法可以做到这一点。您也可以使用 CSI 驱动来连接 S3。
https://github.com/ctrox/csi-s3
如果您可以使用 rclone,它是一个不错的选择,它会将数据同步到 POD 主机系统,因为如果存在大文件,由于文件大小和网络延迟可能需要一些时间。
个人建议 S3是对象存储,所以如果您期待进行文件操作,例如写入文件或压缩文件,根据我的个人经验可能需要一些时间。
请记住,s3 不是文件系统,而是对象存储 - 而 安装是一个非常有用的功能 - 我不会利用 除了文件读取或创建之外的任何内容 - 不要尝试附加文件, 不要尝试使用文件系统技巧
如果是这种情况,我建议对容器使用 NFS 或 SSD。
如果我们寻找 s3fs-fuse,它具有 分段上传 和 MD5 和本地缓存等优势。
您可以编写自己的脚本最简单的方法,该脚本将通过 HTTP 与 S3 存储桶的目录同步到本地目录,否则 Storage gateway S3 是不错的选择。
Amazon S3 文件网关提供无缝连接到云的方式 为了将应用程序数据文件和备份映像存储为持久 Amazon S3 云存储中的对象。 Amazon S3 文件网关提供 SMB 或基于 NFS 的本地缓存访问 Amazon S3 中的数据。
【讨论】:
很遗憾,我同意。我让系统在 S3 上运行,但后来我意识到我确实需要附加文件,这些文件使用基本的 S3 存储桶崩溃了。我最终过渡到了 Google 云端硬盘【参考方案2】:我能够获得另一个完全可以工作的选项,即在 WSL 中安装一个驱动器,然后将其传递给 Docker。让我们开始吧:
为什么不在 Windows 本身中托管,为什么要在 WSL 中进行 rclone?
在 WSL cannot access drives mounted through winfsp 上运行的 Docker(rclone 使用什么)在 Windows 中在 ClearML 中挂载驱动器的步骤:
您可以在 WSL 中安装 rclone,docker 可以访问该挂载 创建文件夹/data/my-mount
(这需要在/data
- 我不知道为什么,我无法通过谷歌搜索找到它,但我发现了它here)
您可以将配置文件放在 windows 中(使用--config
选项)。
注意:ClearML 不支持挂载路径中的空格,尽管 docker 支持。因此,您的路径必须是 /data/my-mount
而不是 /data/my mount
。有一个bug that I opened about this。
您可以通过调用 docker 并挂载文件来测试挂载。
示例:docker run -it -v \\wsl$\Ubuntu\data:/data my-docker-image:latest ls /data/my-mount
注意:您必须挂载 /data 而不是 /data/my-mount,否则您可能会收到此错误:docker: Error response from daemon: error while creating mount source path
现在,您可以在C:\Users\Myself\clearml.conf
中设置 clearml.conf 文件,这样:
default_docker:
# default docker image to use when running in docker mode
image: "my-docker-image:latest"
# optional arguments to pass to docker image
arguments: ["-v","\\wsl$\Ubuntu\data:/data", ]
请注意,您也可以在 WSL 之外运行 clearml-agent,然后只需要指定 ["-v","/data:/data", ]
。
在 cmd 中运行 clearml 代理:clearml-agent daemon --docker
【讨论】:
以上是关于在 clearml 代理中的 docker 中安装 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章
ClearML 如何在 AWS Sagemaker 中更改 clearml.conf 文件