在 clearml 代理中的 docker 中安装 S3 存储桶

Mounting an S3 bucket in docker in a clearml agent

在将用作 ClearML 代理的 docker 图像中安装 S3 容器的最佳做法是什么?我可以想到 3 种解决方案,但目前无法使任何一种工作:

  1. 使用prefabbed configuration in ClearML, specifically CLEARML_AGENT_K8S_HOST_MOUNT. For this to work, the S3 bucket would be mounted separately on the host using rclone然后重新映射成docker。这似乎只适用于 Kubernetes 而不是 Docker - 因此不会起作用。
  2. 使用指定的 s3fuse 挂载 。问题是它能否与存储在 ClearML 浏览器会话中的 S3 存储桶秘密一起使用?这似乎也很复杂,需要自定义 docker 图像,更不用说 运行 将 docker 图像作为 --privileged 或类似图像。
  3. 使用“docker_args 和 docker_bash_setup_script 参数传递给 Task.create()”将参数传递给 docker,如 1.0 release notes. This would be similar to (1), but the arguments would be for bind-mounting the volume 中指定的那样。我没有看到太多关于如何为此使用此新功能的文档或示例。

我建议您查看网关后面的 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 是对象存储,所以如果您希望进行文件操作,如写入文件或 zip 文件,根据我个人的经验,可能需要一些时间来进行操作.

Remember that s3 is NOT a file system, but an object store - while mounting IS an incredibly useful capability - I wouldn't leverage anything more than file read or create - don't try to append a file, don't try to use file system trickery

如果是这种情况,我会建议对容器使用 NFSSSD

而如果我们寻找 s3fs-fuse 它有自己的优势 分段上传 和 MD5 和本地缓存等

您可以编写自己的脚本的最简单方法,该脚本将通过 HTTP 与 S3 存储桶的目录同步到本地目录,否则 Storage gateway S3 是不错的选择。

Amazon S3 File Gateway provides a seamless way to connect to the cloud in order to store application data files and backup images as durable objects in Amazon S3 cloud storage. Amazon S3 File Gateway offers SMB or NFS-based access to data in Amazon S3 with local caching.

我能够完全使用另一个选项,即在 WSL 中安装一个驱动器,然后将其传递给 Docker。让我们开始吧:

为什么不在 Windows 本身中托管,为什么在 WSL 中进行 rclone?

在 Windows 的 ClearML 中安装驱动器的步骤:

  • 您可以在 WSL 中安装 rclone,并且 docker 可以访问挂载
    • 创建文件夹 /data/my-mount(这需要在 /data 中 - 我不知道为什么,我无法通过 Google 搜索找到,但我找到了关于它 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