ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

突破性内存优化:OnnxStream如何在仅298MB内存设备上运行Stable Diffusion XL

突破性内存优化:OnnxStream如何在仅298MB内存设备上运行Stable Diffusion XL 突破性内存优化OnnxStream如何在仅298MB内存设备上运行Stable Diffusion XL【免费下载链接】OnnxStreamLightweight inference library for ONNX files, written in C. It can run Stable Diffusion XL 1.0 on a RPI Zero 2 (or in 298MB of RAM) but also Mistral 7B on desktops and servers. ARM, x86, WASM, RISC-V supported. Accelerated by XNNPACK. Python, C# and JS(WASM) bindings available.项目地址: https://gitcode.com/gh_mirrors/on/OnnxStream在AI模型部署领域内存消耗一直是制约边缘设备应用的主要瓶颈。传统推理框架如OnnxRuntime在运行Stable Diffusion XL 1.0时通常需要12GB以上内存而OnnxStream通过革命性的内存优化技术成功将这一需求降低至仅298MB实现了在Raspberry Pi Zero 2等低内存设备上运行大型AI模型的突破。 内存优化技术的核心突破注意力机制内存消耗优化OnnxStream的核心创新在于对Transformer模型中注意力机制的内存优化。传统的Scaled Dot-Product Attention在计算QK^T矩阵时会产生巨大的内存开销。以8个注意力头、序列长度4096为例QK^T操作会产生一个(8,4096,4096)的512MB张量这对低内存设备是难以承受的。OnnxStream采用注意力切片技术将Q矩阵垂直分割为多个小片段分别进行注意力计算。通过设置onnxstream::Model::m_attention_fused_ops_parts参数默认值为2可以将Q矩阵分割为更小的块进行处理。这一简单而巧妙的技术使UNET模型的内存消耗从1.1GB降低到300MB降幅超过70%。分块解码技术对于Stable Diffusion XL的VAE解码器OnnxStream面临更严峻的挑战。SDXL 1.0的VAE解码器体积是SD 1.5的4倍在FP32精度下需要4.4GB内存。由于FP16精度会导致数值溢出而UINT8量化又会影响图像质量传统方法无法解决这一困境。OnnxStream借鉴了Hugging Face Diffusers库的分块解码思路将(1,4,128,128)的潜在张量分割为25个重叠的(1,4,32,32)小块每个小块独立解码后再进行融合。这种技术将内存消耗从4.4GB降低到298MB降幅达到惊人的93%。上图展示了分块解码过程中各个图块的效果而下图则是经过融合后的最终结果️ 架构设计与实现原理权重提供器解耦设计OnnxStream的架构创新在于将推理引擎与权重提供机制解耦。通过WeightsProvider抽象类开发者可以自定义权重的加载、缓存和预取策略// C核心接口示例 #include onnxstream.h using namespace onnxstream; int main() { Model model; // 可选的配置参数 model.set_weights_provider(...); // 自定义权重提供器 model.m_use_fp16_arithmetic true; // 启用FP16算术 model.m_fuse_ops_in_attention true; // 启用注意力切片 model.m_attention_fused_ops_parts 2; // 设置切片数量 model.read_file(path_to_model_folder/model.txt); // ... 推理执行 }系统提供三种默认的权重提供器DiskNoCache无缓存磁盘加载DiskPrefetch带预取的磁盘加载Ram内存加载量化策略组合OnnxStream支持多种量化策略的组合使用动态量化8位无符号非对称百分比量化实时调整量化参数静态量化W8A8无符号非对称百分比量化预校准量化范围混合精度FP16算术与FP32存储结合平衡精度与性能XNNPACK加速集成OnnxStream深度集成了Google的XNNPACK库为关键操作提供硬件加速矩阵乘法MatMul卷积运算Convolution元素级运算Add/Sub/Mul/Div激活函数Sigmoid、Softmax池化操作MaxPool转置运算Transpose⚡ 快速部署实战指南环境搭建与编译OnnxStream支持跨平台部署包括Linux、macOS、Windows、Termux和FreeBSD系统# 克隆仓库 git clone https://gitcode.com/gh_mirrors/on/OnnxStream cd OnnxStream/src # 创建构建目录 mkdir build cd build # 配置和编译 cmake .. cmake --build . --config Release重要提示MAX_SPEED选项默认开启在Windows上可提升约10%性能在树莓派上可提升超过50%性能。如果遇到构建问题可尝试使用-DMAX_SPEEDOFF禁用此选项。模型转换流程OnnxStream使用自定义的模型格式需要通过onnx2txt.ipynb工具将ONNX模型转换为文本格式# 模型转换示例流程 # 1. 从PyTorch导出ONNX确保dynamic_axes为空 torch.onnx.export(model, dummy_input, model.onnx, opset_version14, do_constant_foldingTrue) # 2. 运行ONNX Simplifier优化模型 python -m onnx_simplifier model.onnx model_simplified.onnx # 3. 使用onnx2txt工具转换格式 # 转换后的模型包含model.txt和对应的.bin权重文件多语言绑定使用OnnxStream提供Python、C#和JavaScript(WASM)三种绑定满足不同开发场景Python绑定示例from bindings import OnnxStreamModel # 创建模型实例 model OnnxStreamModel(sdxl_model) # 配置推理参数 model.enable_attention_slicing(parts2) model.enable_tiled_decoding() # 执行推理 result model.inference(input_tensor)C#绑定示例using OnnxStream; var model new OnnxStream.Model(); model.ReadFile(model.txt); model.SetWeightsProvider(new DiskPrefetchWeightsProvider()); model.Run();JavaScript(WASM)示例// 加载WASM模块 const module await import(./onnxstream-wasm.js); const model new module.OnnxStreamModel(); await model.load(model.bin); const output model.predict(inputData); 性能对比与基准测试内存消耗对比在Stable Diffusion 1.5的测试中OnnxStream展现了惊人的内存效率模型/库内存消耗首次推理时间后续推理时间FP16 UNET / OnnxStream0.133 GB18.2秒18.7-19.8秒FP16 UNET / OnnxRuntime5.085-7.353 GB12.8秒7.28-7.96秒FP32文本编码器 / OnnxStream0.147 GB1.26秒1.19秒FP32文本编码器 / OnnxRuntime0.641 GB1.02秒0.06-0.07秒FP32 VAE解码器 / OnnxStream1.004 GB20.9秒20.6-21.2秒FP32 VAE解码器 / OnnxRuntime1.330-2.026 GB11.2秒10.1-11.1秒关键发现在UNET模型FP16精度上OnnxStream的内存消耗仅为OnnxRuntime的1/55而推理时间仅增加50%-200%。设备性能表现树莓派Zero 2性能数据Stable Diffusion 1.5生成512x512图像约1.5小时Stable Diffusion XL 1.0生成1024x1024图像约11小时Stable Diffusion XL Turbo生成512x512图像仅需29分钟1步推理桌面级设备对比12核PC 32GB RAMHugging Face Diffusers需要26分钟OnnxStream同等配置显著降低内存占用推理时间相近 多场景应用案例嵌入式AI图像生成在树莓派Zero 2等嵌入式设备上OnnxStream实现了真正的边缘AI图像生成。通过分块解码和注意力切片技术即使只有298MB内存的设备也能运行Stable Diffusion XL# 在树莓派上运行SDXL ./sd --xl --prompt astronaut riding a horse on mars --steps 10 --rpi-lowmem上图展示了在树莓派Zero 2上耗时约11小时生成的火星上骑马的宇航员图像证明了在极端资源限制下实现高质量AI图像生成的可行性。Web端AI推理通过WebAssembly支持OnnxStream可以在浏览器中直接运行AI模型无需后端服务器支持!-- Web端AI推理示例 -- script srconnxstream-wasm.js/script script async function runInference() { const model await OnnxStreamModel.create(yolov8_model); const detections await model.detect(imageData); // 在浏览器中实时显示检测结果 } /script项目提供了完整的Web示例Whisper语音识别examples/Whisper_wasm/YOLOv8目标检测examples/YOLOv8n_wasm/大语言模型部署OnnxStream支持TinyLlama 1.1B和Mistral 7B等大语言模型通过初始的GPU支持cuBLAS实现高效推理// LLM应用配置示例 model.enable_gpu_support(); // 启用GPU加速 model.set_precision(FP16); // 使用FP16精度 model.set_cache_strategy(MemoryOptimized); // 内存优化缓存策略 进阶配置与优化技巧内存优化参数调优注意力切片配置model.m_fuse_ops_in_attention true; model.m_attention_fused_ops_parts 4; // 根据设备内存调整量化策略选择model.m_use_uint8_arithmetic true; // 启用UINT8算术 model.m_use_uint8_qdq true; // 启用动态量化权重提供器优化// 使用带预取的磁盘提供器减少IO等待 auto provider std::make_uniqueDiskPrefetchWeightsProvider(); provider-set_prefetch_size(4); // 预取4个权重文件 model.set_weights_provider(std::move(provider));多线程优化OnnxStream支持操作级别的多线程并行// 设置线程数负值表示使用核心数-N model.set_thread_count(-2); // 使用除2个核心外的所有核心模型校准与量化对于需要静态量化的模型OnnxStream提供校准工具model.m_range_data_calibrate true; // 启用校准模式 model.run_calibration(calibration_data); model.write_range_data(calibration_ranges.bin); // 保存校准数据 社区生态与未来展望相关项目集成OnnxStream已经与多个开源项目集成OnnxStreamGui由ThomAce开发的Web和桌面用户界面Auto epaper artrvdveen开发的自包含图像生成电子相框PaperPiAIdylski开发的树莓派Zero驱动的AI生成电子墨水屏相框未来发展方向算子扩展计划支持更多ONNX算子特别是Einsum操作GPU优化扩展cuBLAS支持到更多操作类型动态形状支持动态输入形状增强模型灵活性自动量化开发自动量化工具链简化模型优化流程移动端优化针对Android/iOS平台的深度优化 总结与行动建议OnnxStream代表了AI模型部署领域的重要突破通过创新的内存优化技术使大型AI模型能够在资源受限的设备上运行。其核心价值体现在极致内存效率相比传统框架降低55倍内存消耗广泛硬件支持ARM、x86、WASM、RISC-V全平台覆盖灵活部署方案Python、C#、JavaScript多语言绑定生产就绪已在多个实际项目中验证稳定性立即开始使用对于希望将AI模型部署到边缘设备的开发者我们建议评估需求确定目标设备的硬件规格和性能要求选择模型根据应用场景选择合适的模型SD 1.5、SDXL、LLM等优化配置根据设备内存调整注意力切片和量化参数性能测试在实际设备上进行基准测试和调优集成部署将优化后的模型集成到最终产品中通过OnnxStream开发者可以突破硬件限制在树莓派、嵌入式设备和浏览器中部署先进的AI模型开启边缘AI应用的新篇章。技术突破带来无限可能从298MB内存的树莓派Zero 2运行Stable Diffusion XL到浏览器中实时运行的YOLOv8目标检测OnnxStream正在重新定义AI模型部署的边界。立即开始你的边缘AI之旅探索资源受限环境下的智能应用可能性。【免费下载链接】OnnxStreamLightweight inference library for ONNX files, written in C. It can run Stable Diffusion XL 1.0 on a RPI Zero 2 (or in 298MB of RAM) but also Mistral 7B on desktops and servers. ARM, x86, WASM, RISC-V supported. Accelerated by XNNPACK. Python, C# and JS(WASM) bindings available.项目地址: https://gitcode.com/gh_mirrors/on/OnnxStream创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表