突发性任务资源利用率提升
综合计算成本降低
单任务 TB 级数据处理稳定性
月之暗面是一家专注于人工智能技术研发与应用的创新型企业,其核心产品 Kimi 依托自研的大语言模型,为用户提供了高效、精准的 AI 智能助手服务。Kimi 凭借多轮对话、长文本理解、跨领域推理等能力,广泛应用于 AI 搜索、数据分析、内容生成等场景,受到海量专业用户和企业的欢迎。
月之暗面作为基础模型创业公司,为了加速大模型的训练迭代,在模型数据预处理方面,需要高性价比、弹性灵活的 CPU 和 GPU 算力满足模型迭代的业务需求。
数据作为大模型训练过程中的重要素材,对于提升模型性能、优化模型效果有着重要作用,高质量的数据对于月之暗面这样的大模型公司来说至关重要。模型数据预处理需要对海量的文本和多模态数据清洗,数据类型包括了文本、图片、音频及视频等多种格式。在用户原有的架构下,数据预处理任务均基于自建的 Ray 和 Spark 框架开展,经过一段时间的验证和运行,遇到了如下痛点问题及挑战:
大规模集群的稳定性挑战:大规模 Spark/Ray 集群稳定性较差,难以保障 TB 级数据预处理任务的稳定执行。
资源弹性效率低:在面对突发任务或数据量波动时,计算资源无法快速按需扩缩,导致计算资源浪费或任务延迟。例如,在处理小规模数据时,集群资源可能过度分配;而在大规模任务突发时,又无法及时扩容,严重影响处理任务的及时性。因此,月之暗面团队希望具备短任务按需极致弹性的能力,以更好地适应动态变化的工作负载。
缺少可观测体系和灵活调度机制:使用数据的业务方涉及不同方向的团队或小组,需要进行资源分配和任务优先级配置,以保证高优先级任务的稳定运行。但由于缺少任务级别的监控能力,难以实时观测任务进度、资源使用情况,导致无法及时调整调度策略,进一步影响了集群整体运行效率。
针对月之暗面在大规模集群稳定性、资源弹性效率、可观测与灵活调度等方面的痛点需求,阿里云给出了以阿里云容器服务 Kubernetes 版(ACK)为核心、对 Ray 和 Spark 任务进行深度优化的解决方案。
通过 ACK 的全托管免运维,解决了大规模集群的稳定性问题。同时充分发挥 ACK 在极致弹性和多样算力方面的关键能力,实现了任务的按需极致弹性伸缩。此外,借助 ACK 集成的可观测工具和灵活调度机制,月之暗面实现了任务级别的监控和资源动态分配,满足了不同业务团队对任务优先级的灵活调度需求。该方案为月之暗面带来了显著的效率提升,并大幅优化了成本投入。
KubeRay 托管方案
阿里云 ACK 服务提供了托管的 KubeRay 组件,并在开源社区版本的基础上进行了稳定性优化。用户无需自己安装和维护开源的 KubeRay,只需要关心如何使用 RayCluster,RayJob 等 CRD 资源与自己的业务或者工作流引擎结合即可,极大简化了用户维护的工作投入。KubeRay 在 ACK 集群中快速部署能力,也广泛服务于各类数据科学家、ML 工程师、平台工程师及开发人员等。
Spark-Operator 托管方案
Spark Operator 基于 K8s 中常见的 Operator 模式,定义了 SparkApplication 和 SchedulerSparkApplication 两种 CRD(自定义资源),允许用户通过编写 YAML 资源清单来提交 Spark 作业,而无需手动构造冗长的 spark-submit 提交命令,因此广泛应用于各类数据预处理任务中。
为了满足用户对 Spark on 容器集群的需求,阿里云 ACK 应用市场提供了 ack-spark-operator 组件。用户无需自行维护 Spark Operator,即可快速构建起 Spark 计算集群。此外,ack-spark-operator 组件相比于开源 spark-operator,还具备了以下多项优势:
添加了对阿里云其他组件的集成,例如 ack-kube-queue 作业排队功能。
Spark Operator 通过 webhook 补足了原生 Spark 不支持的 K8s 特性,包括:driver/executor 的 tolerations、nodeSelector、数据卷挂载等能力。
集成了 airflow/argo 等工作流编排框架。
方便使用 Git 等版本控制系统对 Spark 作业 YAML 清单文件进行版本化管理。
使用 Zeppelin 进行交互式 Spark 作业开发
随着数据开发工作的持续进行,数据处理的范围和团队成员也迎来了快速增长。数据探索效率差、开发作业交互性缺失等问题开始逐一显现。为了解决这些问题,阿里云提供 Zeppelin 在 ACK 中一键部署的能力,支持月之暗面持续高效的处理数据。
Apache Zeppelin 是一款大数据交互式分析和可视化的 Notebook 工具,可以用于实现数据的接入、发现、转换、分析和可视化等能力。其前端提供了丰富的可视化图形库,后端以解释器(Interpreter)这种插件结构扩展的方式,集成了 Spark、Flink、JDBC、Markdown、Shell 等各种常见的解释器。这使得数据分析人员可以很方便地使用 SQL 在 Zeppelin Notebook 中进行数据开发。
使用 ACS 弹性资源及 BestEffort,实现经济、高效运行 Spark
在处理大规模数据时,合理调配计算资源至关重要。在月之暗面数据团队日常的 Spark 作业中,计算资源涵盖了 ECS 固定实例、ACS 弹性资源以及 ACS BestEffort 算力,可以根据需求灵活选择。
阿里云容器计算服务 ACS(Alibaba Cloud Container Compute Service,ACS)为 Kubernetes 提供了基础的容器 Pod 运行环境,通过将 Spark 作业中的 driver 和 executor pod 动态调度至 ACS,实现了 Serverless Spark 作业执行。同时,每个 ACS 容器实例依托轻量级虚拟化安全沙箱技术进行完全隔离,确保容器实例间互不干扰。
在部分任务场景中,月之暗面大量采用了 ACS BestEffort 算力,不仅确保了任务的高效执行,还有效地节省了计算成本。BestEffort 算力是一种灵活的资源调度策略,特别适合短时间运行的 Job 任务以及具备高扩展性和容错率的无状态应用。
将 Spark 作业部署在 ACS 上 还具有以下显著优势:
超大容量:集群无需额外配置即可获得最多 5 万 Pod 容量,无需提前规划。
秒级弹性:可在极短时间内创建出数千个 Pod 以交付大量算力,无需担心业务高峰期间 Pod 创建时延受到影响。
节约成本:Pod 按需创建,按量计费,不会由于资源闲置造成资源浪费,并且能够支持 Spot 实例,充分节省成本。
使用对象存储 OSS 助力大规模数据处理
海量算力需要与高效的数据存储和读取能力相匹配,才能真正实现大规模数据处理的高效执行。阿里云 OSS 凭借卓越的高性能、高可用和稳定性优势,在月之暗面的大规模数据预处理场景中,为海量数据的存储与快速处理提供了可靠的保障。
在实际任务中,OSS 支持了极高的并发处理能力和带宽需求,QPS 最高可达数十万、OSS 内网 Tbps 级读写带宽,有力地应对了海量数据高并发的读写请求,确保数据处理流程顺畅无阻。
月之暗面团队使用阿里云 OSS 的资源池流控组能力,实现了 Bucket 级别带宽调整,通过对不同请求者按需灵活调配带宽,保障在高负载时段,关键服务与计算密集型任务优先获取充足资源。此外,通过配置流控事件,在触及预设阈值时,会迅速向任务管理员发送通知,全方位守护了数据处理任务的稳定运行。
在数据的安全保障方面,依赖阿里云 OSS 的多版本控制功能,月之暗面团队还实现了对文件内容变化的追溯,避免数据丢失问题。通过开启 OSS 文件版本控制能力,针对数据文件的覆盖和删除操作将会以历史版本的形式保存下来。在遇到数据误删除或文件被覆盖的情况时,OSS 的多版本控制功能支持将存储在 Bucket 中的对象恢复至任意时刻的历史版本,从而有效地保障数据的完整性和可用性。
ACK 深度集成 Prometheus 监控能力
在实际应用场景中,用户通过提交 RayJob 来创建 RayCluster,以完成对数据集的处理任务。在此过程中,对 RayCluster 的性能监测至关重要。原生 RayCluster 虽然提供了用于查看指标(metric)信息的 dashboard,但用户需要手动部署开源的 Prometheus 和 Grafana,这种方式难以确保组件的稳定性,并且缺乏专业运维人员的支持。
Ray on ACK 方案深度集成了阿里云 Prometheus 的监控能力,为 RayCluster 量身定制了监控大盘。用户只需安装 ack-prometheus 组件以及相应的 ACK Pod Monitor 和 Service Monitor 资源,便可迅速收集 RayCluster 的 metric 数据,并通过专门的 RayCluster 监控大盘进行直观展示。
借助于云产品的紧密集成,Ray on ACK 方案为用户提供了高可用的 RayCluster 监控能力,极大地简化了运维流程,提升了生产环境中的稳定性和可靠性。
ACK Spark/Ray History Server 构建作业监控能力
Spark/Ray 均提供了功能丰富的 Web UI,用于对作业的执行情况进行监控展示,用户可以通过 Web UI 很方便地查看作业的运行情况,包括了正在运行和已经完成的 Jobs、每个 Job 的提交时间、执行时间和详细进度等关键信息。
ACK 应用市场提供了 ack-spark/ray-history-server 组件,支持 HDFS、OSS、OSS-HDFS 作为日志存储后端。月之暗面团队在各类作业中将事件日志写入到 OSS,再通过在 History Server 中配置相同的 OSS 路径,就可以快速解析该日志并在 Web UI 中呈现。
日志服务 SLS 统一 ECS/ACS Pod 日志收集
在容器集群运行 Spark 作业时,日志分散在不同 Pods 中,导致日志管理复杂。月之暗面团队借助阿里云日志服务(SLS),充分发挥其一站式日志采集、加工及查询分析能力,实现了对 Spark 日志的高效管理。
Spark 业务日志分为事件日志、引擎日志和业务日志。事件日志通过特定 SDK 写入 OSS,供 Spark History Server 解析渲染;引擎日志和业务日志则同时输出至控制台和指定文件,用于后续查询分析。
由于 Spark 作业同时使用 ECS 和 ACS 资源,而两者日志收集方式不同,通过创建 SLS 提供的 AliyunConfig 资源,可以轻松统一 ECS/ACS Pod 的日志收集配置,进一步提升了日志管理的便捷性和效率。
月之暗面通过这一系列方案,极大地简化了日志收集和分析流程,使得开发人员能够专注于业务逻辑的优化,而无需花费大量时间在日志管理上。统一的日志收集配置提高了月之暗面的系统稳定性和可靠性,为海量数据的预处理提供了坚实基础。
通过阿里云全托管容器化方案的实施,月之暗面在数据处理能力、资源利用效率和运维管理维度实现了全方位升级:
稳定性跃升:基于 ACK 全托管的 Ray/Spark 组件,单任务 TB 级数据处理稳定性达到 99.95%,故障定位时效提升 60%,保障了模型训练数据供给的连续性。
大幅提升弹性效率:通过 ECS+ACS 混合弹性架构,短任务资源供给时间缩短至秒级,突发性任务资源利用率提升 3 倍,综合计算成本降低 45%。
资源管理精细化:结合 OSS 的资源池流控能力与优先级调度策略,高优先级任务 SLA 达标率提升至 99%+,资源冲突率下降 95%。
全链路可观测:Prometheus+SLS 的云原生监控体系,实现全链路指标可视化,异常检测响应速度提升 50%,日志分析效率提高 40%。