
AI 模型的成功严重依赖于高质量的数据,数据处理任务通常具有生命周期短、资源需求爆发性强、依赖关系复杂的特点。腾讯云容器服务 TKE 支持 Argo Workflows 等主流云原生工作流引擎,结合高性能云存储 CFS Turbo 和 Goosefs,通过容器化任务轻松编排复杂的数据预处理管道。
人工智能模型的性能上限往往由数据质量决定。无论是监督学习中的标注数据、强化学习中的环境交互数据,还是大语言模型预训练所需的语料库,数据的采集、清洗、转换和特征工程等环节构成了 AI 项目中最耗时的工作流。一个典型的数据处理流程可能包含数十个步骤:从原始数据的下载和解压,到格式转换和质量校验,再到特征提取和数据增强,最后将处理好的数据送入训练环节。
这些数据处理的各个环节之间存在着复杂的依赖关系。某些步骤必须按顺序执行,前一步的输出是后一步的输入;而另一些步骤则可以并行执行,例如对多个数据分片同时进行预处理。传统的数据处理方式往往依赖手工编写的脚本和定时任务来管理这些依赖关系,这种方式在数据规模较小时尚可应付,但当数据量和处理步骤增长到一定规模后,就会面临调度混乱、错误恢复困难、资源利用率低等问题。
容器化为数据处理带来了全新的解决方案。每个处理步骤可以封装为独立的容器镜像,运行在 Kubernetes 集群中按需分配的计算资源上。这种模式使得数据处理任务具备了弹性伸缩的能力——当有大量数据需要处理时,可以自动创建更多的 Pod 并行执行;处理完成后,资源自动释放回归资源池。TKE 支持的在离线混部能力进一步提升了资源利用效率,允许数据处理这类离线任务与在线推理服务共享同一集群的基础设施。
Argo Workflows 是 CNCF 毕业项目,专为 Kubernetes 设计的开源工作流引擎。它将每个处理步骤定义为一个 Kubernetes 的原生资源对象,通过 YAML 文件声明整个工作流的结构和执行逻辑。这种声明式的方式带来了多重优势:工作流定义可以像代码一样进行版本控制,团队成员可以通过 Git 协作和审查变更,历史版本的追溯和回滚也变得非常简单。
在工作流定义中,用户可以通过 Steps 或 DAG 两种方式来描述任务之间的依赖关系。Steps 方式以串行的步骤列表来表达执行顺序,适合线性的处理流程。DAG 方式则通过有向无环图来描述更复杂的依赖关系,支持多分支并行执行和条件分支。对于 AI 数据处理中常见的多路并行预处理场景,DAG 模式能够直观地表达各步骤之间的依赖拓扑。
数据处理流水线的各个步骤之间通常需要传递数据和参数。Argo Workflows 提供了完善的参数机制,上游步骤的输出可以作为下游步骤的输入参数。这些参数既可以是简单的字符串值,也可以是复杂的 JSON 对象,满足了不同场景下的数据传递需求。
制品 Artifact 管理是 Argo Workflows 的另一项核心能力。每个步骤可以将输出文件注册为制品,指定存储后端如 S3、OSS 或其他兼容的对象存储服务。下游步骤通过声明对上游制品的依赖,Argo 会自动处理文件的传输和挂载。这种机制使得数据在不同处理阶段之间的流转变得透明且可靠,无需手动管理中间文件的存储位置和访问权限。
生产环境中的数据管道必须具备足够的容错能力。Argo Workflows 提供了步骤级别和工作流级别的自动重试机制,支持指数退避策略以避免在暂时性故障下频繁重试造成的资源浪费。超时控制功能可以防止单个任务无限期挂起而占用集群资源。熔断与限流机制通过 parallelism 参数控制并发执行的步骤数量,避免突发的大量 Pod 创建对集群造成冲击。
CronWorkflow 功能允许按照 Cron 表达式定时触发工作流执行,替代了传统的 cron 守护进程。这对于需要定期更新的数据处理任务特别有用,例如每日的用户行为数据汇总或每周的模型重训练数据准备。
数据处理的性能很大程度上取决于存储 I/O 的能力。TKE 集成了高性能的云存储方案,包括 CFS Turbo 并行文件系统和 Goosefs 分布式文件系统。CFS Turbo 提供了每秒两太字节的集群吞吐能力和单客户端每秒五十吉字节的访问速度,IOPS 达到千万级别,延迟低至六十微秒。这样的性能指标能够满足大规模数据处理对存储带宽的苛刻要求。
通过 CSI 插件,这些存储系统可以无缝挂载到 Kubernetes Pod 中,就像使用本地文件系统一样简单。数据处理任务的容器只需声明需要的存储卷,Kubernetes 调度器会自动将其调度到能够访问该存储的节点上。对于需要在多个步骤间共享大量中间数据的场景,共享存储避免了数据在网络上的反复传输,显著提升了整体处理效率。
并非所有的数据处理都是 CPU 密集型的。图像预处理、视频解码、音频特征提取等任务可以从 GPU 加速中获益。TKE 深度集成的 qGPU 共享技术允许将 GPU 资源精细化切分给多个数据处理任务使用。对于只需要少量 GPU 算力的轻量级处理步骤,可以与其他任务共享同一张 GPU 卡,最大化硬件资源的利用率。
在 Argo Workflows 的工作流定义中,可以为特定的步骤声明 GPU 资源请求。调度器会将这些步骤分配到配备 GPU 的节点上执行,而其他不需要 GPU 的步骤则可以在普通节点上运行。这种细粒度的资源调度确保了昂贵的 GPU 资源只被真正需要的任务占用。
数据处理任务通常是批量的、非实时的,这使其成为在离线混部的理想候选。TKE 支持将数据处理的离线任务与在线推理服务混合部署在同一集群中。当在线业务的负载较低时,离线任务可以获得更多的资源;当在线业务出现流量高峰时,系统会优先保障在线服务的资源需求,必要时可以驱逐低优先级的离线任务。
这种混部模式大幅降低了数据处理的边际成本。企业无需为峰值需求单独维护一套专用的离线计算集群,而是充分利用在线业务闲置的资源来完成数据处理工作。配合超级节点的竞价计费模式,数据处理的成本可以进一步降低。
在 TKE 集群中安装 Argo Workflows 可以通过 Helm Chart 一键完成:
# 创建命名空间
kubectl create namespace argo
# 通过 Helm 安装 Argo Workflows
helm install argo-workflows argo/argo-workflows \
--namespace argo \
--set server.authMode=server \
--set server.extraArgs="{--auth-mode=server}"安装完成后,通过端口转发访问 Argo UI:
kubectl -n argo port-forward svc/argo-workflows-server 2746:2746以下是一个完整的 AI 数据预处理 Workflow 示例,包含数据下载、格式转换和质量校验三个步骤:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: data-pipeline-
namespace: default
spec:
entrypoint: data-pipeline
arguments:
parameters:
- name: dataset-url
value: "https://example.com/data/raw.tar.gz"
- name: output-path
value: "/data/processed"
templates:
- name: data-pipeline
dag:
tasks:
- name: download
template: download-data
arguments:
parameters:
- name: url
value: "{{workflow.parameters.dataset-url}}"
- name: convert
template: convert-format
dependencies: [download]
arguments:
parameters:
- name: input-path
value: "{{tasks.download.outputs.parameters.output-path}}"
- name: validate
template: validate-quality
dependencies: [convert]
- name: download-data
inputs:
parameters:
- name: url
outputs:
parameters:
- name: output-path
valueFrom:
path: /tmp/output-path.txt
container:
image: python:3.11-slim
command: [sh, -c]
args:
- |
mkdir -p /data/raw && cd /data/raw && \
wget -O data.tar.gz "{{inputs.parameters.url}}" && \
tar -xzf data.tar.gz && \
echo "/data/raw" > /tmp/output-path.txt
volumeMounts:
- name: data-volume
mountPath: /data
resources:
requests:
cpu: "1"
memory: 2Gi
- name: convert-format
inputs:
parameters:
- name: input-path
container:
image: python:3.11-slim
command: [python, -c]
args:
- |
import os, json
# 数据格式转换逻辑
input_dir = "{{inputs.parameters.input-path}}"
output_dir = "/data/converted"
os.makedirs(output_dir, exist_ok=True)
for f in os.listdir(input_dir):
if f.endswith('.csv'):
# 转换为 Parquet 格式
pass
volumeMounts:
- name: data-volume
mountPath: /data
resources:
limits:
nvidia.com/gpu: "1"
- name: validate-quality
container:
image: python:3.11-slim
command: [python, -c]
args:
- |
# 数据质量校验逻辑
# 检查缺失值、异常值、数据分布等
pass
volumeMounts:
- name: data-volume
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Gi提交工作流到 TKE 集群:
kubectl create -f data-pipeline.yaml对于大规模数据集的处理,建议使用 CFS Turbo 作为共享存储后端。首先创建静态 PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-cfs-turbo-data
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Ti
csi:
driver: com.tencent.cloud.csi.cfsturbo
volumeHandle: pv-cfs-turbo-data
volumeAttributes:
proto: lustre
rootdir: /cfs
fsid: "<FSID>"
host: "<MOUNT_IP>"
path: /ai-data
storageClassName: ""
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-cfs-turbo-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Ti
volumeName: pv-cfs-turbo-data
storageClassName: ""在 Workflow 中引用 PVC:
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: pvc-cfs-turbo-data对于需要定期执行的数据更新任务,可以使用 CronWorkflow:
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: daily-data-pipeline
namespace: default
spec:
schedule: "0 2 * * *" # 每天凌晨 2 点执行
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
workflowSpec:
workflowTemplateRef:
name: data-pipeline-template
arguments:
parameters:
- name: dataset-url
value: "https://example.com/data/daily-latest.tar.gz"工作流提交后,可以通过以下命令查看运行状态:
# 查看所有工作流
kubectl get workflows
# 查看特定工作流的详细状态
kubectl get workflow data-pipeline-xxxx -o yaml
# 实时查看日志
kubectl logs -f workflow-workflowname-step-nameArgo UI 也提供了可视化的 DAG 图,可以直观地看到每个步骤的执行状态、耗时和依赖关系,方便快速定位失败环节。
AI 模型的性能上限由数据质量决定,而高效的数据处理管道是保障数据质量的基础设施。本文介绍了如何利用 Argo Workflows 在 TKE 上构建自动化的 ETL 流水线——从声明式的工作流编排、参数传递与制品管理,到高性能存储挂载、GPU 加速和在离线混部成本优化,再到完整的实操部署流程,形成了一套从理论到实践的技术方案。
通过容器化改造,数据处理任务获得了弹性伸缩的能力,资源利用率显著提升;通过 Argo Workflows 的编排,复杂的依赖关系变得清晰可控;通过 TKE 的在离线混部和超级节点竞价实例,数据处理的边际成本大幅降低。这套组合能力帮助企业将数据准备的效率提升到一个新的水平,让 AI 训练不再受限于数据管道的瓶颈。
用 Argo Workflows + TKE 构建自动化 ETL 流水线,让数据准备不再是 AI 训练的瓶颈 → https://cloud.tencent.com/product/tke
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。