能否减小PyTorch的lib_pytorch_jni.so体积?自定义模块会影响其大小吗
减小lib_pytorch_jni.so体积的可行方案
- 算子裁剪:使用PyTorch提供的
SELECTED_OP编译机制,仅保留你的业务模型实际用到的算子,默认预编译包包含了全量通用算子,裁剪后通常可将so体积压缩至3M以内,这是目前收益最高的优化手段。 - 编译优化:编译时选择Release模式,开启
-Os体积优先编译参数,同时执行strip操作移除所有调试符号,可额外减少20%~30%的冗余体积。 - 移除冗余ABI:官方Demo默认打包了armeabi-v7a、arm64-v8a、x86、x86_64四类架构的so文件,实际线上应用仅需保留arm64-v8a(覆盖绝大多数主流安卓设备)即可,最多额外保留armeabi-v7a兼容老旧设备,移除不需要的架构包即可降低单架构对应so的实际占用。
- 关闭无用特性:编译时可根据业务需求关闭不需要的内置特性,比如未用到NNAPI硬件加速就关闭NNAPI支持、未用到量化模型就关闭量化算子支持、关闭调试日志输出等,也能减少部分体积。
自定义模块后的so体积说明
使用自定义业务模块适配需求时,最终得到的lib_pytorch_jni.so体积大概率和Demo中的10M不一致,具体分为两种情况:
- 若直接使用官方预编译的PyTorch移动端依赖包,无论你的自定义模块用到多少算子,so体积都会和Demo中的10M基本一致,因为预编译包是面向所有场景的全量算子通用版本。
- 若根据自定义模型的算子使用情况自行编译so,配合上文提到的裁剪优化方案,最终体积会远小于10M,简单的图像分类场景甚至可以压缩到2M左右。
内容的提问来源于stack exchange,提问作者Alma
相关产品推荐
相关产品推荐

