Bilibili EasyAI 平台与 Alluxio 的结合实践
Bilibili EasyAI 平台概述
Bilibili 易AI 平台是一个云原生 AI 平台,支持内部广泛业务,涵盖广告(Ads)、计算机视觉(CV)、自然语言处理(NLP)、语音、电商等。平台功能包括模型开发、模型训练、模型存储和模型服务。平台依托火山引擎(VPA)和鹰眼(Hawkeye)云原生可观测系统,结合 Alluxio、Fluid、OSS 和 HDFS 等技术构建。
EasyAI 架构
- Master: 管理全部元数据,监控各个 Worker 状态。
- Worker: 管理本地 MEM、SSD 和 HDD,提供 Posix 接口,向 Master 和 Worker 发送请求。
- 文件系统: 实际存储系统通过 fuse 实现。
Fluid
- k8s-na've dataset Orchestrator and Accelerator: 支持数据集抽象,云数据预热和访问加速,数据和应用协同编排。
Alluxio 与 EasyAI 的结合需求
EasyAI 在实际应用中面临以下挑战:
- 容器崩溃: 数据需要重新下载,浪费时间和 GPU 算力。
- 数据量超过单台机器限制: 需要重写数据访问逻辑,处理不同数据库的 API,以及重试和断连逻辑。
- 数据预处理+模型训练: 数据访问复杂,需要缓存和分布式存储解决方案。
Alluxio 提供分布式缓存海量数据的能力,通过 Fuse 使得读取数据变得简单(os.open()),满足 EasyAI 对缓存和分布式存储的需求。
Alluxio 与 EasyAI 结合方案
方案优势
- 容器崩溃: Alluxio 缓存数据,避免重新下载。
- 数据量超过单台机器限制: 分布式存储,支持海量数据访问。
- 数据预处理+模型训练: 简化数据访问逻辑,提高效率。
方案架构
- Alluxio + Fluid: 结合 Alluxio 和 Fluid,提供分布式缓存和数据处理加速。
Serverless Fuse
为什么采用 Serverless
- 弹性伸缩: 自动管理资源,提高效率。
- 高可用: 自动恢复,减少故障时间。
Serverless 解决方案
- Serverless Fuse Pod: 包含 Alluxio Master、Alluxio Worker 和 Fuse,实现资源弹性管理。
- Fuse Sidecar: 职责包括传播 fuse 信息到应用中,保持与应用同生命周期,以及自动重挂载。
Alluxio 调优
问题
- Master 停止世界 GC: 影响性能。
- Fuse 频繁抛出 I/O 异常: 需要调整重试参数。
- 读取小文件性能差: 需要升级 Alluxio 至 2.6.2 以上版本。
解决方案
- 调整 Master GC 参数: 降低 MaxGCPauseMillis,增加 ParallelGCThreads。
- 增加 RPC 重试时间: 调整 alluxio.user.rpc.retry.max.duration 和 alluxio.user.rpc.retry.base.sleep。
- 升级 Alluxio 版本: 至 2.6.2 以上。
性能测试案例
案例 1:音频语言识别模型
- 框架: Pytorch,TDNN 神经网络模型,总 Epoches 20。
- 数据: 约 2.55Millions 文件,每个文件 300Ki,总计 800Gi。
- 硬件: 4 * NividaV100/16G GPU,2 * 500 Gi Alluxio Worker。
- 结果: Alluxio 相比 OSS S3 和 Local SSD 速度提升 13.82 和 3.78 倍。
案例 2:视频肖像 Matting
- 框架: Pytorch,TDNN 神经网络模型,总 Epoches 50。
- 数据: 约 20Millions 文件,每个文件 100K,总计 2Ti。
- 硬件: 4 * NividiaV100/32G GPU,4 * 600 Gi Alluxio Worker。
- 结果: Alluxio 解决了数据量过大和 S3Fuse 性能问题,模型效果显著提升。
结论
Alluxio 与 Bilibili EasyAI 平台的结合,有效解决了数据访问效率、容器崩溃和数据量限制等问题,显著提升了模型训练性能。通过 Serverless Fuse 和 Alluxio 调优,进一步提高了平台的弹性和可用性。性能测试案例表明,Alluxio 能够大幅提升数据处理速度和模型训练效率。