系统需求
Linux系统,并已安装git、gcc、g++、cmake⼯具
下载源码
- 从github克隆Pytorch仓库
git clone --recursive https://github.com/pytorch/pytorch
- 如果已经克隆过,则使⽤以下命令更新
git submodule sync
git submodule update --init --recursive
- 如⽆法更新⼦模块,则需要⼿动克隆⼦模块仓库
(1)进⼊pytroch源码⽬录下的 third_party ⽬录,查看未克隆成功的⼦模块,如gloo
(2)删除该⼦模块⽬录
(3)在https://github.com/pytorch/pytorch/tree/master/third_party处找到响应的⼦模块,并点击进 ⼊相应的仓库,并使⽤git克隆到third_party⽬录下,如
git clone https://github.com/facebookincubator/gloo.git
(4)重复以上操作直到third_party⽬录下所有⼦模块克隆成功
编译环境
Android NDK
通过Android studio安装相应的sdk:⼯具->SDK Manager->SDK Platforms
设置环境变量 ANDROID_HOME 为SDK安装⽬录(如上图中的Android SDK Location )
通过Android studio安装相应的ndk:⼯具->SDK Manager->SDK Tools
设置环境变量 ANDROID_NDK 为NDK安装⽬录(⼀般在SDK安装⽬录下的ndk⽬录下)
Gradle
(1)从https://gradle.org/releases/下载相应版本(如v6.8.3)的gradle压缩包并解压
(2)设置环境变量 GRADLE_HOME 为解压后的gradle⽬录
(3)在环境变量 PATH 中添加gradle⽬录下的bin ⽬录
JDK8
(1)从https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载对应系统的JDK并安装
(2)设置环境变量 JAVA_HOME 为Java安装⽬录
(3)在环境变量 PATH 中添加java安装⽬录下的bin ⽬录
编译Pytorch for Android
获取模型运算符⽂件
(1)运⾏Reversi 项⽬中Predictor 类的save_script ⽅法,⽣成模型对应的运算符⽂件predictor.yaml
(2)将模型⽂件 predictor.yaml 复制到pytorch⽬录下
编译
(1)在pytorch⽬录下运⾏以下命令⽣成aar⽂件
SELECTED_OP_LIST=predictor.yaml scripts/build_pytorch_android.sh x86
(2)命令参数x86 代表构建的Android ABI,可选的ABI有:x86、x86_64、armeabi-v7a、arm64- v8a
(3)若编译成功,将在pytorch/android/pytorch_android/build/outputs/arr下找到pytorch_android- release.arr ⽂件
使⽤编译后的aar⽂件
(1)在Android项⽬的app⽂件夹下新建libs ⽬录,并复制pytorch_android-release.aar 到此⽂件夹下
(2)在项⽬的build.gradle配置⽂件夹中添加以下内容:
repositories { flatDir { dirs 'libs' }jcenter()
}
在build.gradle配置⽂件中的dependencies下添加aar⽂件,并注释掉之前使⽤的pytorch,如:
dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' api(name: 'pytorch_android-release', ext: 'aar') // implementation 'org.pytorch:pytorch_android:1.8.0' implementation 'junit:junit:4.12' implementation 'com.alibaba:fastjson:1.1.70.android'
}
参考链接
https://pytorch.org/mobile/android/
https://zhuanlan.zhihu.com/p/299736532