游乐游手机版
首页/AI热点日报/热点详情

B站Ray框架场景探索与落地实践

类型:热点整理2026-07-05
首先来看B站的业务场景。作为一家以视频为核心的社区平台,B站的大量业务天然与人工智能技术紧密结合——生成式AI、高光时刻提取、数字人、音色克隆、视频剪辑,几乎每个热门技术方向背后都离不开AI的支持。下面挑选三个典型场景进行详细剖析,同时探讨它们各自面临的痛点与挑战。 业务概况 场景1 - 视频剪辑

首先来看B站的业务场景。作为一家以视频为核心的社区平台,B站的大量业务天然与人工智能技术紧密结合——生成式AI、高光时刻提取、数字人、音色克隆、视频剪辑,几乎每个热门技术方向背后都离不开AI的支持。下面挑选三个典型场景进行详细剖析,同时探讨它们各自面临的痛点与挑战。

业务概况

场景1 - 视频剪辑

视频剪辑场景的核心,是对视频内容进行多维度提取与筛选过滤,例如高光片段识别、画面美学评分、弹幕信息分析等。整条链路被划分为离线与在线两大环节:

  • 离线链路主要负责对视频数据进行处理,提取多维度特征,处理完成的Embedding向量会存入ES,以便线上实现快速检索。
  • 在线链路则先通过Query分析用户意图,再利用标签进行初步过滤,然后基于多维度特征匹配召回,最后经过多路重排进行精细筛选,向用户输出精准的结果。

这条链路中存在不少痛点:

  • 多业务诉求:字幕提取、抽帧、片段处理……各个业务需要提取的特征和分析逻辑各不相同。字幕侧重文本信息,抽帧关注图像画面特征,片段处理又有自己独特的逻辑。多种诉求混杂在一起,系统的复杂度急剧上升。
  • 资源接入割裂:业务有自己的资源池,公司还设有混部资源池,不同资源池需要用不同的技术去适配,管理起来相当繁琐。
  • 复杂异构计算:业务研发人员需要自行搭建一套复杂的计算工程来完成整条链路,技术门槛较高。

场景2 - 多模态训练

多模态训练场景的主要工作包括三块:

  • 预处理:对视频进行切片、抽帧,然后基于光流分析、美学评分等标准筛选优质数据。
  • 多模态特征抽取:提取文本Embedding、VAE特征等。
  • 模型训练:利用多维度特征加上原始物料数据进行大规模训练。

这其中有两个突出的痛点:

  • Hadoop存储和计算:当前采用Spark绑定方式,通过RDD串联链路并结合Hive进行读写。特征数据存放在Hive,视频存储在HDFS,但HDFS存储视频时存在小文件问题,既影响存储效率,又增加计算资源消耗。
  • GPU计算效率:目前将任务下发到K8s,不同计算匹配不同的资源类型,但Pod调度、资源加载、模型初始化等环节消耗了大量时间,导致资源利用率偏低。

场景3 - 多媒体业务

多媒体业务的特点非常明显:任务量巨大,直播、点播等业务都是无状态的;同时存在异构资源诉求,GPU、CPU、内存、磁盘、网络都需要覆盖;实时性要求也各不相同——直播需要毫秒级响应,普通转码秒级即可,优化转码分钟级也能满足。

这条链路的痛点同样棘手:

  • 资源成本压力:整体资源利用率偏低,如何提升效率是一大难题。
  • 调度时延问题:目前使用K8s的Pod调度计算,时延高、吞吐低,严重影响业务处理速度。
  • 链路复杂:业务流程是多阶段串行的Pipeline计算模式,导致工程研发迭代周期长,难以快速响应业务变化。

综合这三个场景,可以将核心需求抽象为几个方面:分布式的数据管道(多态数据处理 + 通用算子与业务定制)、内容理解(多模态大模型特征抽取 + 垂域微调推理)、技术底座(GPU/CPU资源管理、灵活多时效存储、Python/异构计算性能)。

架构升级

问题洞察与方案实施

资源管理方面,孤岛问题较为突出。GPU异构现象普遍存在,A10、A800等多种类型并存;资源不透明也带来麻烦——K8s和Yarn之间的资源利用情况无法感知,不同平台的接入工程差异极大,例如Spark。针对这些问题,可以考虑基于K8s进行资源合池,再引入细粒度的弹性配额调度(针对异构GPU)。

大数据引擎方面也有两个问题。首先是Python生态薄弱,引擎构建在JVM上,与AI生态对接困难,Spark在GPU上运行还频繁出现问题。其次是粗粒度计算原语带来的挑战:异构化计算中CPU和GPU特性差异大;Spark使用RDD,Flink使用DataStream;虽然都是DAG架构,但都不支持DAG图的动态变化。

再看计算范式。AI全链路计算包括数据处理(大数据引擎 + CPU/GPU协同)、炼丹(离线/近线训练、超参调优,使用TensorFlow、PyTorch、Megatron等)、在线服务化(Triton、Seldon、KFServing、VLLM)。每个环节组件多、基础设施不同,特别是生成式AI兴起后,训练和推理框架更多,资源管理和适配问题更加突出。引入Ray,相当于提供了一种DATA与AI融合的通用计算方式。

存储方面,AI需要POSIX协议、高吞吐的介质,文件组织形式要灵活,包括非结构化和结构化存储。但现有存储常常缺少元信息层,还存在小文件问题。可以将DATA作为AI的数据底座,像数据湖一样匹配不断演进的业务诉求。

Ray概述

Ray主要由Core和AI Runtime两部分组成。Core层面具备异构计算能力,能够实现GPU与CPU协同,同时支持细粒度的函数级并行。AI Runtime则面向AI链路,提供端到端的完整生态方案。

Ray计算原语

Ray的计算原语遵循“一切皆为Actor、Task”的理念,坚持“Python First”原则,这让算法开发者使用起来非常顺手。状态存储采用Object Store(Plasma),Global Control Service负责存放Actor和Task的元信息,实现整个计算过程的血缘管理。

Iceberg概述

Iceberg是一种融合湖仓优势的方案,支持统一存储——非结构化数据、结构化数据、元信息都能整合。它的表格式支持ACID事务和版本控制,侧重元数据管理,能有效应对AI数据管理难题。Time Travel功能可以按时间戳或版本回溯数据,还能通过优化数据组织和索引实现高性能查询。

PyIceberg

Iceberg针对AI推出了PyIceberg扩展,集成了DuckDB、pandas、daft、Ray等工具。

整体架构

整体架构分为接入层、任务编排、异构计算资源、资源管控、底层资源池。接入层标准化,覆盖API、WorkFlow、event-driven、Batch。任务编排环节依靠Ray Data完善Source/Sink,提供分片、抽帧、OCR、ASR等通用算子。资源管控调度基于K8s多资源池,封装了Ray的Session和Job模式。

典型计算范式

多模态计算范式的处理流程如下:首先用Iceberg读取业务视频,视频的初步处理在带CPU资源的Ray Actor中完成——读取SQL获取特定条件,然后进行视频切片和抽帧。过程中视频文件会装箱处理,还支持断点续传,使用一个10G的持久化队列记录进度并实时更新。接着,带GPU资源的Ray Actor对切片进行推理、生成caption,对图片进行OCR、美学评分等操作。最后,结果信息推送给带CPU资源的Ray Actor,汇总每个视频的标注数据,写入Iceberg。

另外还有不同的服务模式:Serve用于业务服务化,对外暴露API;Per-Job模式下,一个Job对应一个Cluster,可运行流处理或批处理;Multi-Job模式则是多个Job共用一个Cluster,实现资源复用和预热。

Ray落地关键点处理

落地过程中有几个关键点需要特别处理:

  • 存储结构:通过索引实现高效检索;利用Iceberg表与Alluxio联动实现预热加速;特征数据按列写入;Clip/Frame、向量文件等小文件存放到Column Chunk中优化管理。
  • 任务并行:Pipeline计算将持久化与计算分离,CPU预处理和GPU推理也分开;弹性计算依靠Ray Data、Serve和Clustering Scaling动态调整资源;同时需要关注Node OOM Case,超卖比例要小于RAY_memory_usage_threshold。
  • Batch推理:核心是推理效率,通过Batch均衡化和减少Infer次数,让GPU利用率显著提升。

整体收益

方案落地后的收益非常直接:开发效率上实现了面向算法的DATA+AI技术栈闭环;视频标注场景中,任务吞吐从每小时4.7万提升到18.29万,GPU利用率从平均每天16.9%跃升至75.4%。

核心挑战

集群级容错

核心场景采用多集群架构,共享Redis,通过注册不同Namespace实现有序管理。SDK经过扩展后可以从Redis获取多集群信息,连接多个GCS。Job提交时基于Pending Job数量和剩余资源进行负载均衡。单集群故障时自动摘流,任务Failover到另一套集群。

异构资源管理

在多异构GPU场景下,K8s的ResourceQuota固定分配导致资源利用率低。借鉴Yarn Capacity Scheduler的思路,构建资源树多层级Node,与多种异构资源Quota关联,支持Borrow和Preempt,同时具备多策略的降级和升级能力。作业提交时,无论使用Kuberay还是RayJob Yaml,都需要支持多集群、多作业类型。

Autoscaler扩展

引入混部资源,以Pod粒度申请,通过自定义Node Provider灵活调配。KubeAirNodeProvider依据资源状态动态调整集群规模,有Pendingresource就扩容,Node空闲就缩容,还可以设置min/max pod、伸缩速度和空闲超时时间。

GCS优化

元信息膨胀是一个大问题。集群运行一段时间后,作业提交变慢甚至异常,Dashboard的list job、actor接口也出现超时。排查发现,GCS压力大的根本原因在于Redis查询——Redis key数量增长近100万,HScan操作压力剧增。解决方案是扩展JobHead,在API层清理JobInfo;扩展GCS的Worker和Job Manager,引入Max清理机制。

Ray Data - SQL单机

SQL能力主要用于视频处理,之前链路使用Spark SQL,元信息表规模不大。Ray Data扩展后基于DataSource引入read_iceberg_sql功能。不过底层的DuckDB是单机引擎,不适合分布式查询,因此通常先用Filter过滤分区,再用SQL完成视频计算的信息检索。

Ray Data - 分布式写Iceberg

Ray本身不支持写Iceberg,PyIceberg也不支持分布式写。扩展方案是:在RayData基于Datasink接口引入IcebergDataSink,采用两阶段操作——先把数据写成Parquet文件再Commit元信息,异常时自动清理文件;同时扩展PyIceberg,引入两阶段提交机制,生成Snapshot。

PyIceberg - 读优化

单条记录达到25M时,点查和小批量查询性能很差。优化措施包括:字段紧凑性和Spark排序组织优化;使用In和Equal的记录级Filter配合Prune File;下游训练时优化DataLoader,采用Pipeline式加载。

未来展望

场景扩展及平台化

未来重点提升Ray的运维管理能力,在AIR、Core、可观测三个维度进行增强。基于现有场景继续扩展,为Agent RAG、训练场景等提供支撑。

底层能力增强

WorkFlow方面,通过提供DAG定义让用户无需操心Job和Serve的复杂细节。流式计算方面,利用Checkpoint实现Exactly Once语义,Ray支持Iceberg的流读,可以按指定时间戳或版本快照读取。稳定性方面,通过HistoryServer、多Head HA、Actor/Task Failed容错保障可靠性,同时实现平滑升级和多租户能力。

来源:https://www.53ai.com/news/finetuning/2025040326759.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。