1、AI数据库的内存优化之路陈迪豪2023-02-07 第四范式/陈迪豪AI数据库的内存优化之路议程1.AI 数据库与内存性能优化2.OpenMLDB 与 Spark 内存案3.OpenMLDB 统编码优化实现4.内存优化在 AI 场景的应实践标 了解前沿的 AI 数据库架构设计 了解数据库内存优化思路以及实现细节 了解 OpenMLDB 内存优化在 AI 场景的实践议程1.AI 数据库与内存性能优化2.OpenMLDB 与 Spark 内存案3.OpenMLDB 统编码优化实现4.内存优化在 AI 场景的应实践AI 数据库介绍从 AlphaGo 到 ChatGPT,AI 落地应如后春笋般出现AI
2、 基础设施项越来愈多,涵盖芯设计、模型框架、数据库等AI 数据库逐渐成为 MLOps 的重要组件AI 数据库萌芽2017年开发以FE为核的数据库服务2020年落地超过100个机器学习场景2021年开源 OpenMLDB 数据库项OpenMLDB 数据库介绍致于解决 AI 程化落地的数据治理难题选 SQL 和数据库开发体验降低开发槛天然保证线上线下计算致性,实现毫秒级的计算延迟OpenMLDB 数据库介绍OpenMLDB 架构设计OpenMLDB 架构设计OpenMLDB 架构设计OpenMLDB 内存架构Row编码,同多列使连续内存存储离线在线使相同 Parser、Optimizer、Code
3、genLLVM JIT,对表达式成平台相关的优化执代码Spark集成,基于 Java JNI 调 C+代码接思考下Spark 内存优化与 OpenMLDB Row 优化如何解决冲突?议程1.AI 数据库与内存性能优化2.OpenMLDB 与 Spark 内存案3.OpenMLDB 统编码优化实现4.内存优化在 AI 场景的应实践Spark 简介Apache Spark has rapidly emerged as the de facto standard for big data processing.Spark Tungsten 内存优化Memory Management and Bina
4、ry ProcessingCache-aware computationCode generationSpark Tungsten 内存优化字符串“abcd”,UTF-8占4个字节JVM字符串Header占12个字节JVM字符串Hash代码占8个字节字符串内容4字节-JVM实际占24字节数据来源:https:/ Tungsten 内存优化基于多个 Column 对象实现 RowJVM 管理量对象,GC压Spark 需要频繁创建和销毁 JVM 对象Spark 了解数据流以及内存块命周期Spark UnsafeRow 优化基于 JVM Unsafe API(intrinsic)基于 Schema
5、和指针实现 Row存储,使连续内存读性能减少 JVM 对象和 GC 压Spark UnsafeRow 优化数据来源:https:/ UnsafeRow 优化64bit(8byte)对,内存空间不紧凑但有利于提访存性能端存储,这样低位类型存到位内存(如存int到64位)不需要额外编码所有列不管什么类型都按64bit存储,变内容顺延存储Nullbitset以64位为单位按需增加Spark UnsafeRow 优化GenericInternalRowUnsafeRowSpark UnsafeRow 优化通过 queryExecution 获取底层执计划InternalRow 默认实现为 Unsafe
6、Row通过指针和偏移获取列值Known issue:4paradigm/OpenMLDB#2880思考下Spark UnsafeRow 优化有什么问题?Spark 对 OpenMLDB Spark议程1.AI 数据库与内存性能优化2.OpenMLDB 与 Spark 内存案3.OpenMLDB 统编码优化实现4.内存优化在 AI 场景的应实践OpenMLDB 内存编码优化和Spark样,基于存储,最化在线读取性能相于Spark,基于C+指针实现,没有GC overhead相于Spark,增加Version header,持多版本格式相于Spark,Nullbitset以byte(8 bits)