LAS 数据处理的核心资源是队列:它承载所有算子 / 脚本运行所需的 CPU、GPU 与内存;开发机、任务管理、工作流三者都以队列为底座,各自解决"调试、批量执行、复杂调度"三个阶段的问题。本文为您介绍 LAS 数据处理四个核心模块——队列、开发机、任务管理、工作流——之间的依赖关系与协同方式。
LAS 数据处理的核心模块(开发机 / 任务管理 / 工作流)依赖底层队列,并从外部资源读取脚本、镜像、数据与算子模板。
四个模块的分工与依赖关系如下:
模块 | 解决的问题 | 与其他模块的关系 |
|---|---|---|
队列(Queue) | 提供 CPU / GPU 计算资源 | 被开发机、任务、工作流共享消费;分为 独占队列(EMR Serverless) 和 计算队列(LAS 队列) 两类,官方推荐独占队列 |
开发机(DevBox) | 交互式调试算子代码 | 运行在指定队列上,读取 TOS / 镜像仓库 / 数据集;代码调通后再迁移到任务管理批量执行 |
任务管理(Task) | 提交批量 / 周期性任务 | 选择队列消费资源;支持 Daft / Python / Spark 三种任务类型;可从算子广场获取算子模板与环境变量清单 |
工作流(Workflow) | 多任务 DAG 编排与调度 | 把多个任务组织成有依赖关系的 DAG,触发时依次向队列提交任务实例 |
从创建队列到查看结果的完整链路,含调试与调度旁支(Daft / Python / Spark),通常按下面 6 步展开:
主链路:创建队列 → 创建开发机 → 上传代码到 TOS → 创建任务 → 提交到队列执行 → 查看任务实例;上方旁支为三种触发方式,下方虚线为参数迭代闭环。
下面以 LAS 算子广场提供的离线算子「视频关键帧抽取」为例,串联上面提到的所有模块,演示如何把一个算子跑到队列上。
注意
当选用 自定义镜像 时,任务暂不支持运行在独占队列(EMR Serverless 队列)上;此时需切换到 LAS 计算队列。
参照算子广场中「视频关键帧抽取」的示例代码,把脚本另存为 test.py,示意结构如下(实际以算子广场为准):
# test.py —— 视频关键帧抽取离线算子示例 import os import daft # 1. 从环境变量读取算子广场约定的参数 input_uri = os.getenv("INPUT_URI") # 输入视频目录,例如 tos://your-bucket/videos/ output_uri = os.getenv("OUTPUT_URI") # 关键帧输出目录 frame_rate = float(os.getenv("FRAME_RATE", "1.0")) # 抽帧频率(帧/秒) model_path = os.getenv("MODEL_PATH", "/mnt/data/keyframe_model") # 2. 用 Daft 读取视频,调用关键帧抽取算子 df = daft.read_video(input_uri) df = df.with_column( "keyframes", df["video"].apply_udf("keyframe_extract", fps=frame_rate, model=model_path), ) # 3. 结果写回 TOS df.write_parquet(output_uri)
把 test.py 上传到与 LAS 同区域的 TOS 桶,落到约定路径:
tosutil cp ./test.py tos://test/test.py
本文示例统一使用 tos://test/test.py 作为脚本地址、/test/ 作为任务内挂载路径;实际使用请替换成你自己的桶名与目录。
进入 LAS 控制台 > 数据处理 > 任务管理 > 创建任务,按以下要点填写基本信息与环境信息:
配置项 | 示例值 |
|---|---|
名称 |
|
任务类型 | Daft(多模态大数据首选;若脚本较轻量也可选 Python) |
镜像 | 内置镜像:选择 LAS 官方 Daft 镜像;或使用算子广场推荐的自定义镜像 |
存储路径挂载 | 挂载类型 TOS,源路径 |
挂载完成后,任务启动时容器内的 /test/test.py 就直接指向 TOS 上的脚本;后续任何脚本改动只需重传 TOS,不用重新创建任务。
打开 LAS 算子广场「视频关键帧抽取」页面,把「环境变量」区块里列出的键值原样填到任务的 环境变量 表单里。以本示例为例(实际以算子广场为准):
Key | Value(示例) |
|---|---|
|
|
|
|
|
|
|
|
注意
环境变量的 Key 大小写必须与算子广场保持完全一致,脚本内 os.getenv("...") 才能读到值;如果 Value 里包含空格或特殊字符,建议使用文本模式集中粘贴,避免 KV 单行输入被截断。
在 入口命令 中填入实际的执行语句。既然脚本已经挂到 /test/test.py,最直白的写法是:
python /test/test.py
在页面右侧的 资源 区域,选择 Step 1 中准备好的队列(例如 las-gpu-queue-a),并按需设置 Driver / Executor 的 CPU、内存与 GPU 数量。确认无误后点击 执行,任务实例会立刻进入队列排队。
任务每被触发一次,就会在「任务实例」页产生一条记录。可以从三个维度确认执行情况:
Running / Succeeded / Failed;失败时鼠标悬停可看到简短原因。任务成功后,抽取结果会按 OUTPUT_URI 写回 TOS;用 tosutil ls tos://your-bucket/keyframes/ 或对象存储控制台确认产物文件即可。
跑通首个实例后,通常还需要根据业务规模做一轮调整。常见的调参方向如下:
调整维度 | 典型场景 | 调整位置 |
|---|---|---|
脚本参数 | 切换抽帧算法、加后处理逻辑 | 修改 |
环境变量 | 切换输入 / 输出桶、调节抽帧频率 | 任务详情 > 编辑 > 环境变量 |
资源规格 | 视频量增大后需要更多 GPU / 更大内存 | 点击「执行」时,在弹窗中调整 Driver / Executor 的 CPU / GPU / 内存 |
调度策略 | 需要每天凌晨定时抽帧 | 任务详情 > 高级设置 > 周期调度,配置生效时间与时间间隔 |
多任务编排 | 抽帧后要接特征提取、入库 | 在「工作流」中把多个任务串成 DAG,详见 工作流 |