AI算力平台基础设施架构设计
2024-09-27 本文已影响0人
sknfie
概述
AI算力平台基础设施采用k8s及OAP相关技术,实现云原生的AI最佳实践。
背景
AI训练使用过程中需要面临的问题:
- gpu资源利用率不足
- 异构算力环境,区分cpu/gpu等类型
- 超大数据量必须使用分布式
- 个人代码和环境都依赖了固定的机器,机器的回收,损坏,裁撤,磁盘不足等事件频繁,花费很大的代价
- gpu训练中,优先考虑通过扩容提升效率,而忽视利用率的优化
因此,需要提供如下解决方案:
- 统一管理底层算力,最大程度上提高资源的利用率
- 租户间算力自动均衡,任务等待时长不超过5分钟
- 支持边缘集群模式,利用边缘设备资源,避免数据同步消耗大量资源
- 自动配置任务的启动资源,避免不合理的资源需求
AI算力平台的优势
- 环境隔离
- 集群化自动化管理
- 计算资源(CPU/GPU)自动调度
- 成熟的生态体系
- crd/operator便捷的api方式管理
k8s
crd
使用crd来管理Kubeflow、p8s、Argo、istio、volcano等资源。
scheduler
k8s的调度包含很多方面:节点选择,亲密度,污点,还有其他过滤打分的优选和预选机制。
主要使用场景是在不同pipeline的任务同时发起时,希望每台机器都能被均匀的使用,而不是过度集中在其中数台服务器上。
coredns
CoreDNS是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS具备丰富的插件集,在集群层面支持自建DNS、自定义hosts、CNAME、rewrite等需求。
因此在内网部署,需要在pod中会有内网域名的使用,往往需要在pod配置内网的dns解析服务器。
分布式存储
为了减少不必要的数据传输,避免用户在AI训练时,数据文件在不同系统中间传输。因此,提供如下解决方案:
- 数据隔离:pvc挂载会自动添加用户目录
- 组目录模式:支持共用分布式存储,满足团队协作
- 多存储挂载:每个项目可以挂载多个pvc,应用不同的数据处理训练场景,如低性能cfs和高性能ssd ceph
- 解耦分布式存储:通过pvc绑定到pv,或者挂载到主机(/data/k8s/)
- 磁盘爆炸:平台有存储的监控功能,不再使用的大文件目录会告警删除;
- 磁盘不足:存储的扩缩容是弹性的
- 其他类型的挂载:比如hostpath,configmap等:
pvc挂载:会自动将pvc下的$username子目录,挂载到容器目录的$username子目录下面
hostpath挂载: 会将主机目录挂载到容器目录,一般用于多人共享编辑同一个目录使用
configmap挂载:会将configmap挂载到容器目录,一般用于将特殊配置文件挂载到容器
内存挂载: 会将内存挂载到容器,一般用于处理k8s 共享内存的问题