Mar*_*cka 0 caching ccache singularity-container
我正在寻找优化奇点 HPC 容器构建时间的方法。我知道通过逐层构建它们可以节省一些时间。但仍然有优化的空间。
我感兴趣的是使用/缓存主机系统上有意义的任何内容。
我做了一些实验,但在任何一点上都没有成功。
到目前为止我发现了什么:
缓存
我在容器中安装 ccache 并指示构建系统使用它。我知道因为我正在使用singularity buildsudo 运行,所以缓存将位于/root. 但运行构建后,/root/.ccache却是空的。我验证了生成的 CMake 构建文件,它们肯定使用了 ccache。
我什至创建了一个测试配方,其中包含%post
touch "$HOME/.ccache/test"
Run Code Online (Sandbox Code Playgroud)
但测试文件没有出现在主机系统上的任何地方(不在/root我用户的家中)。构建步骤是否挂载容器支持的目录而/root不是主机的根目录?
使用 ccache 还需要做些什么吗?
git
人们建议运行例如 git-cache-http-server (/sf/answers/3055053571/)并使用git config --global url."http://gitcache:1234/".insteadOf https://.
由于奇点可以读取主机文件系统的部分内容,我认为甚至可以有一种方法让它在没有代理程序的情况下工作。但是,如果主机 git 存储库不在$HOMEor内部/tmp,奇点如何在构建期间访问它们?singularity build没有--bind标志来指定其他安装目录。使用%files配方中的部分听起来效率很低 - 每次运行构建时都要复制所有内容。
易于
人们建议使用例如squid-deb-proxy(https://gist.github.com/dergachev/8441335)。同样,由于奇点能够读取主机文件系统文件,我想只利用主机的/var/cache/apt. 但/var默认情况下并没有挂载到容器上。/var/cache/apt那么同样的问题又来了——如何在容器构建期间挂载。总体而言这是一个好主意吗?鉴于主机和容器都基于相同版本的 Ubuntu 和架构,这不会损坏主机的 APT 缓存吗?
或者奇点本身是否做了一些聪明的 APT 缓存?我刚刚注意到它在 25 秒内下载了 420 MB 的软件包,这在我的连接上是可能的,但考虑到 ubuntu 镜像的标准速度,可能性不大。
编辑:我在奇异性存储库上创建了一个问题: https: //github.com/hpcng/singularity/issues/5352。
据我所知,从定义文件构建时没有缓存奇点构建的机制。您可以缓存基础映像的下载,但仅此而已。
有一个关于这个问题的GitHub 问题,Singularity 的一位主要开发人员给出了以下回复:
您可以从磁盘上的现有容器构建 Singularity 容器。因此,您可以构建基础容器并保存它,然后修改 def 文件以从现有容器构建,以节省原型设计的时间。
但由于 Singularity 不创建层,因此实际上没有办法像 Docker 那样实现这一点。
关于你的问题,有一点:
我知道通过逐层构建它们可以节省一些时间
奇点没有层的概念,因此这不适用于此处。Docker 使用层,并且这些层被缓存。
构建 Singularity 映像时我通常遵循的工作流程是首先从 Dockerfile 创建 Docker 映像,然后将其转换为 Singularity 映像。Docker 构建步骤具有缓存,因此这可能对您有用。
# Build Docker image
docker build --tag my_image:latest .
# Convert to Singularity format
sudo singularity build my_image.sif docker-daemon://my_image:latest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |