介绍
tfllite 有两个部分组成:
convert: 用于将模型转换成tflite格式,可以从keras模型,也可以从各种tf1.x的模型转换出来(比如save model, pb model)
interpreter: tflite 运行时,调试的时候可以直接用集成在tf里面,部署的时候有单独的whl包作为更小的一个运行时(https://www.tensorflow.org/lite/guide/python)
转换模型
推荐用SavedModel的格式
https://www.tensorflow.org/lite/guide/get_started#2_convert_the_model_format
https://www.tensorflow.org/lite/convert
TF1.x
https://www.tensorflow.org/api_docs/python/tf/compat/v1/lite/TFLiteConverter#from_frozen_graph
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/python_api.md#checkpoints
如何单独编译tflite的运行时
|
|
一个tflite模型可以被多个解释器调用,每个解释器需要独占一个线程(多线程不能共享解释器)
Profile
https://www.tensorflow.org/lite/guide/faq 最下面提到
https://www.tensorflow.org/lite/performance/measurement
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark
编译benchmark model
1bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model使用benchmark Model
1bazel-bin/tensorflow/lite/tools/benchmark/benchmark_model --graph=your_model.tflite --num_threads=4
benchmark的参数
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/benchmark#parameters
例子
profileing 的结果放到 /root/fp32.csv 文件里面
MLIR
https://www.tensorflow.org/mlir
https://mlir.llvm.org/
添加算子
https://www.tensorflow.org/lite/guide/inference#write_a_custom_operator
https://www.tensorflow.org/lite/guide/ops_custom
好像没有单个op的benchmark工具,要测试单个op的性能,需要创建只包含这个op的模型,然后使用benchmark工具
写C++ 应用
用bazel的话,参考这个
https://www.tensorflow.org/lite/guide/inference#load_and_run_a_model_in_c
用Makefile参考 tensorflow/lite/tools/make/Makefile
里面会去build一个label_image的例子
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/examples/label_image
即使用bazel build的话,也会生成tflite的静态链接库
libtensorflow-lite.a
Tflite+SGX
https://github.com/occlum/occlum/tree/master/demos/tensorflow_lite
eigen gzip报错(eigen 没有下载全)
设置https代理成http代理
3 个计算库的区别
这三个计算库根据编译宏以及硬件等的不同,都可能被使用到,具体用到哪个计算库,要看具体代码实现
eigen 是个blas库,google可能贡献tensor比较多,主要外面maintain吧
这个我理解blas是个线性代数库,可能包含的支持的算子最全ruy只有gemm,支持quant(这个我理解就是支持int8)
xnnpack是面向ml 的算子
RUY
Bazel Build
|
|
Enable AVX512
1bazel --output_user_root=$build_dir build -c dbg --copt=-march=native //ruy:benchmark_f32_f32_f32_f32Run benchmark
1234567bazel --output_user_root=$build_dir build -c dbg --copt=-march=native //ruy:ruybazel --output_user_root=$build_dir build -c dbg --copt=-march=native //ruy:benchmark_f32_f32_f32_f32export ROWS=1export DEPTH=1export COLS=1./bazel-bin/ruy/benchmark_f32_f32_f32_f32