Nydus 在约苗平台的容器镜像加速实践

containerd的本地CLI工具ctr命令教程 ctr,不过 ctr 的功能没有 docker 完善,。接下来我们就先简单介绍下ctr的使用。直接输入ctr注意:如何查看command的命令选项呢?(直接回车或者加上-h都行) 阅读详情

在这里插入图片描述

文 | 向申
约苗平台运维工程师 关注云原生领域

本文字数 9574阅读时间24分钟

本文是来自向申同学的分享,介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。

Nydus 是蚂蚁集团,阿里云和字节等共建的开源容器镜像加速项目,是 CNCF Dragonfly 的子项目,Nydus 在 OCI Image Spec 基础上重新设计了镜像格式和底层文件系统,从而加速容器启动速度,提高大规模集群中的容器启动成功率。详情文档请参考如下地址:

Nydus 官方网站:https://nydus.dev/
Nydus Github:https://github.com/dragonflyoss/image-service

PART.1
容器镜像的概念

  1. 容器镜像

容器镜像有一个官方的类比,“生活中常见的集装箱”,虽然拥有不同的规格,但箱子本身是不可变的(Immutable),只是其中装的内容不同。

对于镜像来说,不变的部分包含了运行一个应用软件(如 MySQL )所需要的所有元素。开发者可以使用一些工具(如 Dockerfile)构建出自己的容器镜像,签名并上传到互联网上,然后需要运行这些软件的人可以通过指定名称(如 example.com/my-app)下载、验证和运行这些容器。

  1. OCI 标准镜像规范

在 OCI 标准镜像规范出台之前,其实有两套广泛使用的镜像规范,分别是 Appc 和 Docker v2.2,但“合久必分,分久必合”,有意思的是两者的内容已经在各自的发展中逐步同化了,所以 OCI 组织顺水推舟地在 Docker v2.2 的基础上推出了 OCI Image Format Spec,规定了对于符合规范的镜像,允许开发者只要对容器打包和签名一次,就可以在所有的容器引擎上运行该容器。

这份规范给出了 OCI Image 的定义:

This specification defines an OCI Image, consisting of a manifest, an Image Index (optional), a set of filesystem layers, and a Configuration.

  1. 容器的工作流程

在这里插入图片描述

一个典型的容器工作流程是从由 Developers 制作容器镜像开始的(Build),然后上传到镜像存储中心(Ship),最后部署在集群中(RUN)。

PART.2
OCI 镜像格式

通常所说的镜像文件其实指的是一个包含了多个文件的“包”,“包”中的这些文件提供了启动一个容器所需要的所有需要信息,其中包括但不限于,容器所使用的文件系统等数据文件,镜像所适用的平台、数据完整性校验信息等配置文件。当我们使用 Docker pull 或者 Nerdctl pull 从镜像中心拉取镜像时,其实就是在依次拉取该镜像所包含的这些文件。

Nerdctl 依次拉取了一个 Index 文件、一个 Manifest 文件、一个 Config 文件和若干个 Layer 数据文件。实际上,一个标准的 OCI 镜像通常就是由这几部分构成的。

其中,Layer 文件一般是 tar 包或者压缩后的 tar 包,其包含着镜像具体的数据文件。这些 Layer 文件会共同组成一个完整的文件系统(也就是从该镜像启动容器后,进入容器中看到的文件系统) 。

Config 文件是一个 JSON 文件。其中包含镜像的一些配置信息,比如镜像时间、修改记录、环境变量、镜像的启动命令等等。

Manifest 文件也是一个 JSON 文件。它可以看作是镜像文件的清单,即说明了该镜像包含了哪些 Layer 文件和哪个 Config 文件。

下面是一个 Manifest 文件的典型例子:

"schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "config": {
   "mediaType": "application/vnd.oci.image.config.v1+json",
   "digest": "sha256:0584b370e957bf9d09e10f424859a02ab0fda255103f75b3f8c7d410a4e96ed5",
   "size": 7636
 },
  "layers": [
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:214ca5fb90323fe769c63a12af092f2572bf1c6b300263e09883909fc865d260",
    "size": 31379476
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:50836501937ff210a4ee8eedcb17b49b3b7627c5b7104397b2a6198c569d9231",
    "size": 25338790
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:d838e0361e8efc1fb3ec2b7aed16ba935ee9b62b6631c304256b0326c048a330",
    "size": 600
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:fcc7a415e354b2e1a2fcf80005278d0439a2f87556e683bb98891414339f9bee",
    "size": 893
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:dc73b4533047ea21262e7d35b3b2598e3d2c00b6d63426f47698fe2adac5b1d6",
    "size": 664
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:e8750203e98541223fb970b2b04058aae5ca11833a93b9f3df26bd835f66d223",
    "size": 1394
  }
 ]
}

Index 文件也是一个 JSON 文件。它是可选的,可以被认为是 Manifest 的 Manifest。试想一下,一个 tag 标识的镜像,比如 Docker.io/library/nginx:1.20 ,会针对不同的架构平台 (比如 Linux/amd、Linux/arm64 等等) 有不同的镜像文件,每个不同平台的镜像文件都有一个 Manifest 文件来描述,那么我们就需要有个更高层级的文件来索引这多个 Manifest 文件。

比如,Docker.io/library/nginx:1.20 的 Index 文件就包含一个 Manifests 数组,其中记录了多个不同平台的 Manifest 的基本信息:

{
 "manifests": [
 {
   "digest": "sha256:a76df3b4f1478766631c794de7ff466aca466f995fd5bb216bb9643a3dd2a6bb",
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "platform": {
     "architecture": "amd64",
     "os": "linux"
  },
   "size": 1570
 },
 {
    "digest": "sha256:f46bffd1049ef89d01841ba45bb02880addbbe6d1587726b9979dbe2f6b556a4",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
      "architecture": "arm",
      "os": "linux",
      "variant": "v5"
   },
   "size": 1570
 },
 {
    "digest": "sha256:d9a32c8a3049313fb16427b6e64a4a1f12b60a4a240bf4fbf9502013fcdf621c",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
       "architecture": "arm",
       "os": "linux",
       "variant": "v7"
   },
   "size": 1570
 },
 {
    "digest": "sha256:acd1b78ac05eedcef5f205406468616e83a6a712f76d068a45cf76803d821d0b",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
       "architecture": "arm64",
       "os": "linux",
       "variant": "v8"
   },
   "size": 1570
 },
 {
    "digest": "sha256:d972eee4f12250a62a8dc076560acc1903fc463ee9cb84f9762b50deed855ed6",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
       "architecture": "386",
       "os": "linux"
   },
   "size": 1570
 },
 {
    "digest": "sha256:b187079b65b3eff95d1ea02acbc0abed172ba8e1433190b97d0acfddd5477640",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
       "architecture": "mips64le",
       "os": "linux"
   },
    "size": 1570
 },
 {
    "digest": "sha256:ae93c7f72dc47dbd984348240c02484b95650b8b328464c62559ef173b64ce0d",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
      "architecture": "ppc64le",
      "os": "linux"
   },
    "size": 1570
 },
 {
    "digest": "sha256:51f45f5871a8d25b65cecf570c6b079995a16c7aef559261d7fd949e32d44822",
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "platform": {
       "architecture": "s390x",
       "os": "linux"
  },
   "size": 1570
  }
 ],
 "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
 "schemaVersion": 2
}

PART.3
OCI 镜像所面临的问题

在这里插入图片描述

  1. 启动容器慢

我们注意到镜像层需要全部堆叠后,容器才能看到整个文件系统视图,所以容器需要等到镜像的每一层都下载并解压之后才能启动。有一篇 FAST 论文研究分析[1] 说镜像拉取占了大约容器 76% 的启动时间,但却只有 6.4% 的数据是会被容器读取的。这个结果很有趣,它激发了我们可以通过按需加载的方式来提高容器启动速度。另外,在层数较多的情况下,运行时也会有 Overlay 堆叠的开销。

一般来说容器启动分为三个步骤:

下载镜像;
解压镜像;
使用 Overlayfs 将容器可写层和镜像中的只读层聚合起来提供容器运行环境。

  1. 较高的本地存储成本

每层镜像是由元数据和数据组成的,那么这就导致某层镜像中只要有一个文件元数据发生变化,例如修改了权限位,就会导致层的 Hash 发生变化,然后导致整个镜像层需要被重新存储,或重新下载。

  1. 存在大量相似镜像

镜像是以层为基本存储单位,数据去重是通过层的 Hash,这也导致了数据去重的粒度较粗。从整个 Registry 存储上看,镜像中的层与层之间,镜像与镜像之间存在大量重复数据,占用了存储和传输成本。

PART.4
Nydus 镜像解决方案

Nydus 镜像加速框架是 Dragonfly[2](CNCF 孵化中项目)的子项目。它兼容了目前的 OCI 镜像构建、分发、运行时生态。Nydus 运行时由 Rust 编写,它在语言级别的安全性以及在性能、内存和 CPU 的开销方面非常有优势,同时也兼具了安全和高可扩展性。

在这里插入图片描述

  1. Nydus 基础架构

Nydus 主要包含一个新的镜像格式,和一个负责解析容器镜像的 FUSE 用户态文件系统进程。

在这里插入图片描述

  1. Nydus 工作流程

在这里插入图片描述

Nydus 镜像格式并没有对 OCI 镜像格式在架构上进行修改,而主要优化了其中的 Layer 数据层的数据结构。

Nydus 将原本统一存放在 Layer 层的文件数据和元数据 (文件系统的目录结构、文件元数据等) 分开,分别存放在 “Blob Layer” 和 “Bootstrap Layer” 中。并对 Blob Layer 中存放的文件数据进行分块 (Chunk) ,以便于懒加载 (在需要访问某个文件时,只需要拉取对应的 Chunk 即可,不需要拉取整个 Blob Layer) 。

同时,这些分块信息,包括每个 Chunk 在 Blob Layer 的位置信息等也被存放在 Bootstrap Layer 这个元数据层中。这样,容器启动时,仅需拉取 Bootstrap Layer 层,当容器具体访问到某个文件时,再根据 Bootstrap Layer 中的元信息拉取对应 Blob Layer 中的对应的 Chunk 即可。

  1. Nydus 优势

容器镜像按需下载,用户不再需要下载完整镜像就能启动容器。
块级别的镜像数据去重,最大限度为用户节省存储资源。
镜像只有最终可用的数据,不需要保存和下载过期数据。
端到端的数据一致性校验,为用户提供更好的数据保护。
兼容 OCI 分发标准和 artifacts 标准,开箱即可用。
支持不同的镜像存储后端,镜像数据不只可以存放在镜像仓库,还可以放到 NAS 或 者类似 S3 的对象存储上。
与 Dragonfly 的良好集成。

PART.5
Nydus 在约苗生产实际运用

约苗平台作为国内领先的疾病预防信息与服务平台,以疫苗预约服务为核心,提供包括疫苗预约、疾病防控科普、“宫颈癌&乳腺癌”筛查预约等专业、全面的疾病预防信息与服务。

截止 2023 年 2 月约苗平台累计注册用户 3700 万+ 人,覆盖 28 个省及直辖市, 200+ 地级市,关联全国社区公共卫生服务机构 4000+ 家,提供疫苗预约&订阅服务 1.1 亿 + 次。

约苗业务全部基于 Kubernetes 进行微服务构建,在 Kubernetes 平台上已经平稳运行了超过 4 年时间,并且紧随 Kubernetes 的版本迭代及时更新。约苗的集群规模超过 60 个 Node 节点,目前相关服务容器 POD 已经超过了 1000+,同时每天更有上万个临时 Cronjob 类型的 POD 进行创建和销毁。对平台的运维发布的效率有较高的要求。

  1. 问题

Kubernetes 拉取镜像时间非常慢,在沿用 OCI 镜像时通过观察,镜像拉去时间可达 30s。

  1. 容器启动慢

通过线上观察,一个 POD 从创建到准备就绪需要等待 30s 甚至更多,甚至节点没有缓存,时间将会更久。

  1. 更新迭代块

在更新迭代中,每次批量更新多个服务,迭代周期短而频繁,在更新多个服务时镜像仓库压力大。

随着以上问题的产生,经过多方面的调研以及相关测试,公司决定采用开源项目 Nydus 进行对当前业务优化。

PART.6
Nydus 部署实践

Nydus 镜像加速,可以直接对接 OCI 镜像,同时 Containerd 也支持 Nydus 插件,识别 Nydus 镜像,一般在微服务场景下,使用 CICD ,我们需要在 Docker 打包镜像上部署 Nydus 转换镜像的服务,镜像转换后直接会在 Harboar 仓库生成 Nydus 的镜像,我们这里是用的 CICD 使用的 Jenkins,这里我就直接把服务部署在 Jenkins 的物理机上。

  1. 下载相关组件

下载链接:https://github.com/dragonflyoss/image-service/releases

cd /nydus-static
sudo install -D -m 755 nydusd nydus-image nydusify nydusctl nydus-overlayfs /usr/bin
  1. OCI 镜像转换 Nydus
nydusify convert --source dockerharboar/nginx:1.2 --target dockerharboar/nginx:1.2-nydus

注意:

Source 这里表示源 Docker-Harboar 仓库的镜像,这个镜像必须私有仓库已经存在。
Target 这里表示将源仓库镜像转换为 Nydus 镜像。

当使用这条命令后,镜像仓库在同一个目录层级会生成两份镜像,一份源 OCI 镜像,一份 Nydus 镜像。

PART. 7
Nydus 对接 K8s 集群

K8s 集群使用的运行时为 Containerd ,而Containerd 也支持使用插件 Nydus Snapshotter 来识别 Nydus 镜像,同时在使用 Nydus 功能时, Nydus 也是支持原生的 OCI 镜像,只是没有按需加载相关功能。

  1. K8s 集群节点部署 Nydus

官方说明:https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md

注意:要使用 Nydus 功能,K8s 的每个 Node 节点都需要部署 Nydus Snapshotter,除开 K8s-Master 节点。

下载安装包:

https://github.com/dragonflyoss/image-service/releases
https://github.com/containerd/nydus-snapshotter/releases

tar -xf nydus-snapshotter-v0.5.1-x86_64.tgz
tar -xf nydus-static-v2.1.4-linux-amd64.tgz

安装相关软件

sudo install -D -m 755  nydusd nydus-image nydusify nydusctl nydus-overlayfs /usr/bin
sudo install -D -m 755 containerd-nydus-grpc /usr/bin

创建必要目录

mkdir -p /etc/nydus  && mkdir -p /data/nydus/cache  && mkdir -p $HOME/.docker/

创建nydus配置文件

sudo tee /etc/nydus/nydusd-config.fusedev.json > /dev/null << EOF
{
  "device": {
    "backend": {
      "type": "registry",
      "config": {
        "scheme": "",
        "skip_verify": true,
        "timeout": 5,
        "connect_timeout": 5,
        "retry_limit": 4
      }
    },
    "cache": {
      "type": "blobcache",
      "config": {
        "work_dir": "/data/nydus/cache"
      }
    }
  },
  "mode": "direct",
  "digest_validate": false,
  "iostats_files": false,
  "enable_xattr": true,
  "fs_prefetch": {
    "enable": true,
    "threads_count": 4
  }
}
EOF


增加docker-harboar认证
sudo tee $HOME/.docker/config.json << EOF
{
  "auths": {
    "docker-harboarxxx": {
      "auth": "xxxxxx"
    }
  }
}
EOF
增加docker-harboar认证
sudo tee $HOME/.docker/config.json << EOF
{
  "auths": {
    "docker-harboarxxx": {
      "auth": "xxxxxx"
    }
  }
}
EOF
chmod 600 $HOME/.docker/config.json
docker-harboarxx  #私有仓库地址
auth 里是 base64 编码的 user:pass
  1. 启动 Nydus 服务
cd /data/nydus
nohup /usr/bin/containerd-nydus-grpc --config-path /etc/nydus/nydusd-config.fusedev.json --log-to-stdout &
  1. 验证 Containerd 是否支持 Nydus
验证nydus是否支持
ctr -a /run/containerd/containerd.sock plugin ls | grep nydus
  1. 修改 Containerd 配置支持 Nydus
containerd配置文件新增
[proxy_plugins]
  [proxy_plugins.nydus]
    type = "snapshot"
    address = "/run/containerd-nydus/containerd-nydus-grpc.sock"
[plugins."io.containerd.grpc.v1.cri".containerd]
   snapshotter = "nydus"
   disable_snapshot_annotations = false
  1. 重启 Containerd
sudo systemctl restart containerd

PART.8
最终数据测试结果

使用原生 OCI 镜像

在这里插入图片描述

使用 Nydus 镜像

在这里插入图片描述

POD 从 Create 到 Ready:OCI -> 20s
POD 从 Create 到 Ready:Nydus -> 13s

目前业务镜像尺寸并不大,大约 200MB,使用 Nydus 已有提升效果,在使用超大镜像的场景,例如 AI 计算等,Nydus 能带来的加速效果会非常的明显。

PART.9
总结与未来期望

Nydus 是来自 CNCF 的优秀开源项目,更进一步说,约苗也将继续对该项目进行更多投入,并与社区展开深入合作,使得约苗平台变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Nydus 一定会在云原生生态中扮演重要角色。

相关链接

[1] 《Fast Distribution With Lazy Docker Containers》

https://www.usenix.org/conference/fast16/technical-sessions/presentation/harter
[2] Dragonfly
https://github.com/dragonflyoss/Dragonfly2

了解更多…

Nydus Star 一下✨:
https://github.com/dragonflyoss/image-service

Dragonfly 发布 Nydus 容器镜像加速服务 Dragonfly 通过引入 P2P 网络有效提升了容器镜像大规模分发的效率。 阅读详情

相关推荐

Nydus 容器镜像加速服务 - 架构设计与技术文档

Nydus 是一个高性能容器镜像加速服务,由 Rust 语言实现。它通过在 RAFS(Registry Acceleration File System)格式上实现内容寻址文件系统,显著提升容器启动速度、降低存储和网络带宽消耗。核心优势:快速启动:秒级容器启动,毫秒级函数计算代码包加载按需加载:以 chunk 为单位按需下载镜像数据节省资源:chunk 级别数据去重,跨层/跨镜像降低存储、传输和内存成本端到端安全:数据完整性验证,可检测供应链攻击。

Jeacean的博客 436

ctr镜像导入报错ctr: content digest sha256:xxxxxx not found

现象: 直接导入j镜像可能会出现类似于 ctr: content digest sha256:xxxxxx not found 解决办法: 拉取镜像、导出镜像时,都加上--all-platforms 时,最后在用ctr i import nginx.tar.gz

任我行的博客 7180

Kaggle | 总奖池超200万美金的数学竞赛AIMO2冠军方案

••••结论1:通过结合高质量大规模数据集、工具集成推理和生成式选择方法,可以构建在挑战性数学问题上达到最先进水平的语言模型。本文的方法在 AIMO-2 竞赛中的胜利以及在多个数学基准上的 SOTA 结果验证了这一策略的有效性。结论2:发布 OpenMathReasoning 数据集、OpenMath-Nemotron 模型和代码是社区的宝贵财富。

hxshine的博客 1198

[containerd] ctr push镜像时提示:ctr: content digest xxxxxx not found

[containerd] ctr push镜像时提示:ctr: content digest xxxxxx not found

展望、进击 5384

ICCompiler II实战:从NDM生成到APR流程的完整避坑指南

本文是一份针对ICCompiler II(ICC II)后端物理实现流程的实战避坑指南。文章详细解析了从NDM库生成、设计初始化、布局规划到时钟树综合与布线的完整APR流程,重点分享了各环节的常见陷阱、精细化配置命令与调试经验,旨在帮助工程师高效达成PPA目标,确保设计一次成功。

p4q5r6s7t的博客 533

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机

本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。

weixin_42613501的博客 454

Containerd 的镜像和容器管理

注意:直接导入镜像可能会出现类似"ctr: content digest sha256:xxxxxxx not found"的错误,因此在拉取和导出镜像时,都要指定" --all-platforms "参数再导入镜像。5. 启动静态容器,启动task,即表时在容器中运行了进程,即为动态容器。3. 查看任务列表:当容器运行起来的时候才会产生任务。

NancyLCL的博客 4541

双重机器学习 stata教程 手把手教学

双重机器学习(DDML)的stata教程

weixin_59030591的博客 1万+

kubeadm 部署kubernetes 1.26.1集群 Calico BGP ToR配置

完成内核升级、系统配置、部署容器运行时Containerd、安装crictl客户端命令、安装 kubeadm、kubelet 和 kubectl。备注:coredns Pending、节点NotReady 是因为没有安装CNI插件,下面步骤进行安装calico CNI讲述。由于使用了Calico ToR 网络模式每次新加入的节点都要修改calico node节点as number号。kubelet需要指定 --container-runtime-endpoint=检查BGP 连接状态。

不忘初心,方得始终 3161

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 846

Win11系统下Abaqus2022与VS2022+oneAPI2023环境配置全攻略(附VUMAT子程序避坑指南)

本文详细指导在Windows 11系统下,为Abaqus 2022配置Visual Studio 2022与Intel oneAPI 2023的Fortran编译环境,以支持VUMAT等用户子程序开发。内容涵盖软件安装顺序、环境变量关联、快捷方式修改及关键验证步骤,并提供了首个VUMAT子程序的实战编写与模型验证方法,帮助用户高效搭建稳定可靠的仿真开发平台。

pytorch8learner的博客 319

蚂蚁安全科技 Nydus 镜像加速实践

ZOLOZ[1]是蚂蚁集团旗下的全球安全风控平台,通过业内领先的生物识别、大数据分析和人工智能技术,为用户和机构提供安全又便捷的安全风控解决方案。ZOLOZ 已为中国、印尼、马来西亚、菲律宾等 14 个国家和地区的 70 余家合作伙伴提供数字化转型过程中的安全风控技术支持。目前,已经覆盖金融、保险、证券、信贷、电信、公众服务等领域,累计服务用户超 12 亿。

金融级分布式架构 6271

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3203

Nydus | 容器镜像基础

Nydus | 容器镜像基础

金融级分布式架构 1018

C#上位机+国产PLC+AI:构建自主可控的智能生产线解决方案

全栈国产化智能产线方案并非遥不可及,基于成熟的国产硬件、丰富的.NET生态、快速发展的国产大模型,完全可以搭建出稳定可靠且具备智能能力的生产系统。落地建议采用三步走策略:基础国产化阶段:替换PLC与上位机,实现基础监控与控制功能,解决卡脖子问题,快速验证国产化方案稳定性数据沉淀阶段:完善数据采集与存储,建立设备台账、故障库、工艺库,积累高质量领域数据智能升级阶段:引入国产大模型与知识库,落地故障诊断、工艺优化、预测性维护等智能应用,持续提升产线效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 525

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

为什么选择Nydus?揭秘容器镜像加速的8大核心优势

Nydus作为Dragonfly镜像服务,为容器镜像提供了快速、安全且便捷的访问方式。在容器技术日益普及的今天,镜像的拉取速度、存储效率和安全性成为影响容器部署效率的关键因素。本文将深入剖析Nydus的8大核心优势,帮助你理解为什么它能成为容器镜像加速的理想选择。 ## 1. 突破性的镜像拉取速度 🚀 传统容器镜像拉取往往需要等待完整镜像下载完成,这在大型镜像或网络条件不佳时会严重影响部署效

gitblog_00442的博客 1076

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务

镜像对容器部署的挑战 在容器的生产实践中,偏小的容器镜像能够很快地部署启动。当应用的镜像达到几个 GB 以上的时候,在节点上下载镜像通常会消耗大量的时间。Dragonfly 通过引入 P2P 网络有效提升了容器镜像大规模分发的效率。然而,用户还是必须等待镜像数据完整下载到本地,然后才能创建自己的容器。我们希望进一步缩减镜像下载的时间,让用户能够更快地部署容器应用。同时,如何更好地保护用户数据,也是容器行业近年来的重要关注点。 为此,我们为 Dragonfly 项目引入了一个容器镜像加速服务 Nydus。N.

阿里巴巴云原生的博客 1168

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Nydus:加速容器启动的利器

Nydus 是由 Dragonfly 团队开发的一款高性能容器镜像服务,旨在通过优化容器镜像的加载和分发,显著提升容器的启动速度、降低网络带宽和存储成本,并增强数据完整性。Nydus 实现了基于 RAFS 格式的内容寻址文件系统,是对当前 OCI 镜像规范的重大改进。 Nydus 的核心优势在于其能够实现秒级的容器启动速度,尤其是在处理大型 OCI 镜像时,其性能提升尤为明显。通过 Nydus,

gitblog_00781的博客 1194

Nydus —— 下一代容器镜像的探索实践

容器镜像是云原生的基础设施之一,作为容器运行时文件系统视图基础,从它诞生到现在,衍生出了镜像构建、存储、分发到运行时的整个镜像生命周期的各种生态。然而,虽然镜像生态众多,但自它诞生以来,镜像设计本身并没有多少改进。这篇文章要探讨的就是对容器镜像未来发展的一些思考,以及 Nydus 容器镜像的探索和实践。...

金融级分布式架构 893

Nydus 镜像扫描加速

镜像扫描的原因与内容容器镜像是当前容器/软件分发的基础,里面包含了容器隔离环境以及软件执行环境的相关内容。因此保障其安全性变得十分重要。镜像扫描即是要扫描镜像中的所有内容,及时发现可能包含的安全漏洞或者隐私泄露。1. 安全漏洞。包括系统软件包和应用软件库中可能存在的安全漏洞。可以通过比对镜像中这些库/软件包的来源、版本等与 CVE 数据库中报告的漏洞的包的来源、版本来定位可能存在的安全漏洞。2. 配置。包括镜像运行的环境配置和镜像中相关内容组合可能带来的问题。

BASK2311的博客 782

容器镜像基础(nydus)

包括 nydus 的基本概念、架构和容器镜像加速使用方法。

分享观点和经验,欢迎交流。 1663

容器启动加速-nydus

Nydus是一个镜像加速器,主要通过容器启动时懒加载镜像提高启动速度, 大镜像可以秒级启动,后续的读写通过COW方式。以下是nydus的几个标签: - Nydus是蚂蚁、阿里云、字节等共建的开源容器镜像加速项目 - CNCF孵化的项目Dragonfly中的一个子项目 - 新的镜像格式,不同于oci - 良好的生态,兼容containerd、k8s、harbor、buildkit -- 从构建、存储、部署、到CI集成,有丰富的解决方案

Moolight_shadow的专栏 3620

Nydus 镜像加速插件迁入 Containerd 旗下

文|葛长伟(花名:川朗)蚂蚁集团技术专家负责容器镜像加速项目 Nydus 的开发和维护专注于容器镜像存储、持久存储和文件系统领域本文 1597字 阅读4分钟前言Nydus今年 1 月 ,Containerd 社区通过投票接收 Nydus-Snapshotter 成为 Containerd 社区的子项目。这是继 ttrpc-rust 之后,蚂蚁容器团队再次向 Con...

金融级分布式架构 1070
上一篇: Nydus 在约苗平台的容器镜像加速实践
下一篇: DLRover:蚂蚁开源大规模智能分布式训练系统
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值