惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
T
Threatpost
L
LINUX DO - 热门话题
Google Online Security Blog
Google Online Security Blog
I
InfoQ
大猫的无限游戏
大猫的无限游戏
博客园_首页
爱范儿
爱范儿
有赞技术团队
有赞技术团队
V
Visual Studio Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Jina AI
Jina AI
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CERT Recently Published Vulnerability Notes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
K
Kaspersky official blog
L
LangChain Blog
G
GRAHAM CLULEY
B
Blog RSS Feed
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
雷峰网
雷峰网
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Vercel News
Vercel News
T
Tor Project blog
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
W
WeLiveSecurity
T
Threat Research - Cisco Blogs

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
模型研发周期中的数据存储
微信公众号 · 2024-05-26 · via 陈少文的网站

1. 基于对象存储的数据交付

如上图,在模型研发过程中,主要涉及三个子平台,分别是:

  • 数据平台

数据平台主要负责数据相关的管理,比如: 数据接入、数据处理,最终生成训练所需的数据。

数据平台将原始数据存储到对象存储中,在处理时,从对象存储中获取数据,进行处理,完成之后存储到对象存储中。

  • 训练平台

训练平台主要负责模型的训练,比如: 提供模型的开发环境,支持模型的分布式训练。

训练平台会给算法同学提供一个带有 AI 算力卡的 Jupyer 环境,以支持算法同学的线上开发和调试。他们将代码存储在实时性高的存储设备中,通过挂载的方式访问 checkpoint、模型等文件。

启动大型分布式训练任务时,数据会被逐层预热直至 AI 算力卡的显存中,然后训练模型,最终得到模型。

  • 推理平台

推理平台主要负责模型的上线、流量的管理,比如: 模型的量化、模型的转换、模型的部署等。

推理平台从对象存储中获取模型,开启工作流,部署模型并实现推理流量的治理。

数据平台、训练平台、推理平台通常有不同的技术负责人,不能强求各平台使用统一的数据定义、使用的规范。

因此这里强调的是数据交付,我们只需要定义好数据交付,至于各个平台内部如何实现,选择怎样的挂载方式、加速组件等,都由各个平台自己决定。

从成本、性能、交付便捷性等方面考虑,基于对象存储的数据交付是一个非常好的选择。很多数据湖方案的底层也是基于对象存储。

2. 数据平台

虽然 AI 加速卡擅长数据处理,但数据平台通常并不会使用这些昂贵的设备对数据进行处理。

AI 任务主要占用的是 AI 算力卡资源。在我们线上的集群中,GPU、NPU 卡的显存使用率经常能达到 90%,但节点上的 CPU、Memory 资源使用率却只有 10% 左右。

而加速计算节点又是高配的机器,它们的通常配备了几百 GB、甚至几个 TB 的 Memory,200 核心起步的 CPU 计算能力。这意味着,在加速计算节点上,我们还有大量的资源可用。

数据平台的工作负载非常适合与 AI 任务进行混合部署。

如上图,数据平台的存储主要分为两类:

  • 持久存储,比如录入的数据、训练需要的数据等
  • 临时存储,比如处理数据过程中加速的数据、支撑数据集全文检索的 ES 存储卷等

3. 训练平台

如上图,在训练的过程中主要涉及三个存储交互:

  • 算法开发,存储算法同学的代码

代码是小文件,同时对实时性要求比较高,不适合存储在 JuiceFS 中,可以采用 NFS 存储,通过不同目录进行隔离区分个人和团队。

  • 训练数据,存储训练数据

训练数据的特征时,小文件特别多,对元数据的访问速度要求比较高,可以采用 JuiceFS 多区企业版。

  • 模型数据、Checkpoint 数据

存储 Checkpoint 时,训练任务处于暂停状态。Checkpoint 的存储速度会影响训练的效率。

模型数据、Checkpoint 数据的暂存,也应该采用 JuiceFS,但可以降级为单区的企业版或者社区版。

训练完成之后,我们应该设置一个归档任务,将训练过程中的模型、数据等数据存储到对象存储中。

JuiceFS 应该作为一种临时存储,作为加速层,不应该长时间存储数据。

4. 推理平台

我们通常在一个区域训练,但是需要在多个区域进行推理。

进行多区推理的原因可能有:

  • 上层服务在多云部署,需要就近推理
  • 单个云的 AI 算力卡资源不足
  • 多云高可用

但这也带来了新的问题,模型怎样在多个云区域进行分发。

如上图,模型的原始数据应该存储在对象存储上,通过公网或者专线进行模型的跨云分发。比如,从阿里云的 OSS 同步模型数据到腾讯云的 COS,公有云的对象存储同步速度比较快。

在每个区域中,借助 JuiceFS 单区企业版或者社区版,将模型加载到 JuiceFS 通过 PVC 挂载到集群的推理 Pod 中,实现模型的推理。

在同一个区域中的多个 Kubernetes 集群,可以共用一个 JuiceFS 存储。