这个项目是我在2025年华为云开发/信息存储竞赛的参赛作品——一个基于张量的智能语义分层存储系统(AI-Aware-Tiered-Tensor-Storage, AATTS),在这个README文档中,我将详细说明项目的背景应用和技术原理,以及该项目的完整复现操作指南。
随着AI模型的发展,模型参数、权重、checkpoint数量爆炸,限制AI性能的关键因素已经从GPU计算性能变成了数据I/O延迟与存储的速度。解决这一问题,无论是对于在线小批量推理服务,还是对于耗时、成本巨大的边缘模型微调和科研训练过程都具有巨大价值。而传统存储系统主要关注静态冷热分层(如HDD/SDD),缺乏对AI工作负载访问模式的理解和主动优化。
本作品提出并实现了一个轻量级智能分层存储中间件原型——AI-aware Tiered Tensor Store (AAT-TS) 面向模型推理/微调的智能分层存储与预取中间件。该原型通过基于深度学习的语义层级知预取器、可动态监测和配置的策略引擎与基于FUSE接口层的透明化分层存储管理器,在AI模型框架访问存储层时,实现智能缓存与预取。
在基于真实BERT-tiny模型的测试中,系统在在线推理场景下实现了最高4.78倍的性能提升与75.0%的预取命中率,能够降低31.8%冷启动的延迟时间,同时能够基于边缘微调和科研环境等场景进行动态性能策略调整,有效验证了语义感知存储优化思路的可行性与巨大潜力。本作品为AI与存储的跨层优化提供了一个可实践、全方位的开源解决方案。
-
语义级预取器:基于PyTorch框架Dataset的底层原理(如固定随机种子、数据增强文件缓存等)实现轻量级语义预取器,能够预测模型下一步所需的tensor,并提前将其从慢速存储层加载到快速层。在真实BERT模型训练数据的测试中,显著提升了冷启动I/O延迟。
-
分层存储引擎:使用Redis作为高速缓存层,MinIO作为低成本对象存储层,实现tensor层级数据的智能迁移与存储管理。
-
透明POSIX接口:通过用户态FUSE提供透明的POSIX文件系统接口,无需修改现有PyTorch或HuggingFace模型代码,即可无缝接入系统,享受存储优化带来的性能提升。
-
可配置策略引擎:内置策略引擎支持在“性能优先”与“成本优先”模式之间动态切换,适配云端与边缘不同场景的需求。
以下步骤将帮助你完整复现 AATTS 系统,并运行性能测试。
-
克隆代码仓库:
git clone https://github.com/hanlin2007/2025-AI-Aware-Tiered-Tensor-Storage.git aatts-project cd aatts-project -
为脚本添加可执行权限,并运行自动化环境配置脚本,安装所有依赖并启动基础服务:
chmod +x setup_environment.sh chmod +x start_demo.sh chmod +x stop_demo.sh ./setup_environment.sh
此脚本将自动执行以下操作:
- 创建并激活 Python 虚拟环境(
venv/) - 升级 pip 到最新版本
- 安装系统依赖(如 Redis 服务器)
- 安装 Python 依赖包:
torch,transformers,minio,redis,scikit-learn,fuse-python,numpy等 - 启动并启用 Redis 服务(通过 systemd 或 service)
- 运行
check_environment.py验证环境是否正确
注意:脚本执行过程中可能需要输入 sudo 密码以安装系统软件包
- 创建并激活 Python 虚拟环境(
项目基于真实的 BERT‑tiny 模型结构模拟各层权重数据。请运行以下脚本生成完整的模型文件(约 50 MB):
python aat_real_model_loader.py脚本会在当前目录下创建 real_model_data/ 文件夹,并生成:
config.json:模型配置文件embedding.bin,encoder_layer_0.bin, …,classifier.bin等层文件(均为真实初始化权重的二进制格式)
生成完成后,可查看统计信息:
python aat_real_model_loader.py # 脚本会自动打印模型统计使用一键启动脚本拉起所有核心服务:
./start_demo.sh该脚本将顺序执行:
- 清理可能残留的旧进程(卸载 FUSE、终止 MinIO 和 FUSE 进程)
- 确保 Redis 内存数据库服务正在运行(端口
6379) - 启动 MinIO 对象存储(数据目录
~/minio-data,API 端口9000,控制台端口9001) - 创建挂载点
/mnt/aat并设置权限 - 后台启动 FUSE 文件系统(
aat_fuse_v2.py),将虚拟文件系统挂载到/mnt/aat - 验证所有服务状态,成功后显示访问信息
验证:可通过
ls /mnt/aat查看是否出现模型文件列表(如embedding.bin,layer0.bin等)。
服务启动并挂载成功后,可依据直接回车,或执行完整的测试脚本:
python aat_final_test.py测试将模拟三种真实 AI 工作负载:
- 在线推理:突发流量、不同推理深度
- 边缘微调:频繁读取 + 检查点保存
- 科研环境:多版本模型访问
测试过程中会自动收集缓存命中率、预取准确率、响应延迟、存储节省等指标。整个测试约需 3‑5 分钟,结束后将在项目根目录生成带时间戳的测试报告文件(JSON 格式数据和 PNG 图表)。
启动内置的 HTTP 报告服务器:
python simple_server_final.py然后在浏览器中访问 http://localhost:8080 查看可视化报告面板。报告包含:
- 性能图表(延迟分布、吞吐量)
- 技术架构分析
- 效率指标(缓存命中率、预取准确率)
- 成本效益评估(存储节省、TCO 对比)
测试完成后,建议执行以下脚本清理后台进程并卸载 FUSE:
./stop_demo.sh该脚本将终止 MinIO 和 FUSE 进程,并卸载 /mnt/aat。
- 操作系统要求:所有脚本均在 Linux(Ubuntu 20.04+ / CentOS 7+)和 macOS 上测试通过。Windows 用户请使用 WSL2 或 Docker 环境。
- 权限:脚本中涉及
sudo的操作(安装系统包、挂载 FUSE、启动系统服务)需要用户具有 sudo 权限。 - 端口占用:确保以下端口未被占用:6379(Redis)、9000(MinIO API)、9001(MinIO 控制台)、8080(报告服务器)。如有冲突,请修改相应配置文件。
- FUSE 内核支持:Linux 需安装
fuse包(sudo apt install fuse或sudo yum install fuse),macOS 需安装 macFUSE。 - 模型数据目录:FUSE 文件系统通过
AATStorageManagerV2读取real_model_data/下的文件,请确保该目录存在且包含完整数据(可通过aat_real_model_loader.py生成)。 - MinIO 配置:首次启动 MinIO 后,可通过浏览器访问
http://localhost:9001,使用默认密钥minioadmin/minioadmin登录。本项目暂不依赖具体的 bucket,如需扩展可自行创建aat-models存储桶。 - 错误排查:
- 若 Redis 连接失败,检查
redis-cli ping是否返回PONG。 - 若 FUSE 挂载点为空,查看
fuse.log日志文件。 - 若 MinIO 无法访问,检查
minio.log日志,确认端口监听状态。
- 若 Redis 连接失败,检查
欢迎通过 Issue 或 Pull Request 提交改进建议或错误修复。
本项目采用 MIT 开源许可。允许自由使用、修改和分发代码,但需保留原始版权和许可声明。详细信息请查看MIT License。