J'ai essayé de construire AARCH64 sur ubuntu 16.04. J'ai suivi ce guide (Native Compling) https://tensorflow.google.cn/lite/guide/ build_arm64 .
Mais j'ai eu cette erreur. Quel est le problème? Je veux aussi essayer un exemple sur Orange Pi 3. Comment puis-je utiliser le fichier libtensorflow-lite.a après la construction pour arm64. Je connais Qt ide et c & c ++. Merci.
In file included from ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8.h:22:0, from tensorflow/lite/kernels/depthwise_conv.cc:29: ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h: In static member function âstatic void tflite::optimized_ops::depthwise_conv::WorkspacePrefetchWrite<(tflite::DepthwiseConvImplementation)3>::Run(int8, int, int8*)â: ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5782:71: note: use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subparts vst1_lane_u32(reinterpret_cast<uint32_t*>(ptr), fill_data_vec, 0); ^ ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5782:71: error: cannot convert âconst int8x8_t {aka const __vector(8) signed char}â to âuint32x2_t {aka __vector(2) unsigned int}â for argument â2â to âvoid vst1_lane_u32(uint32_t*, uint32x2_t, int)â ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5785:35: error: cannot convert âconst int8x8_t {aka const __vector(8) signed char}â to âuint32x2_t {aka __vector(2) unsigned int}â for argument â2â to âvoid vst1_lane_u32(uint32_t*, uint32x2_t, int)â fill_data_vec, 0); ^ tensorflow/lite/tools/make/Makefile:225: recipe for target '/tensorflow/tensorflow/lite/tools/make/gen/aarch64_armv8-a/obj/tensorflow/lite/kernels/depthwise_conv.o' failed make: *** [/tensorflow/tensorflow/lite/tools/make/gen/aarch64_armv8-a/obj/tensorflow/lite/kernels/depthwise_conv.o] Error 1 make: *** Waiting for unfinished jobs....
3 Réponses :
Après avoir essayé de résoudre le problème pendant des heures, je pense avoir trouvé une solution à cela:
Il suffit d'ajouter le paramètre "-flax-vector-conversions" à la variable CXXFLAGS dans le tensorflow / lite / tools / make / Fichier Makefile.
Pour moi, c'était à la ligne 58:
LIBS := \ -lstdc++ \ -lpthread \ -lm \ -ldl \ -lrt
L'erreur précédente a disparu, mais maintenant j'obtiens une autre erreur: p >
undefined reference to `shm_open'
Après cela, j'ai ajouté "-lrt" à tensorflow / lite / tools / make / cibles / aarch64_makefile.inc
CXXFLAGS := -O3 -DNDEBUG -fPIC -flax-vector-conversions
et a changé BUILD_WITH_NNAPI dans le Makefile en false
Le processus de compilation a fonctionné. Je vais tester la bibliothèque TF dès que possible.
J'obtiens toujours une erreur ": x29 ne peut pas être utilisé dans asm ici ".
Pour construire Tensorflow Lite pour arm64, j'ai modifié:
tensorflow / lite / tools / make / cibles / aarch64_makefile.inc
en ajoutant aux CXXFLAGS et CFLAGS:
CXXFLAGS += \ -march=armv8-a \ -funsafe-math-optimizations \ -ftree-vectorize \ -flax-vector-conversions \ -fomit-frame-pointer \ -fPIC CFLAGS += \ -march=armv8-a \ -funsafe-math-optimizations \ -ftree-vectorize \ -flax-vector-conversions \ -fomit-frame-pointer \ -fPIC
ce qui donne:
-flax-vector-conversions \ -fomit-frame-pointer \
Pour moi, cela a éliminé l'erreur : impossible de convertir
ainsi que l'erreur : x29 ne peut pas être utilisé dans asm ici
.
J'ai ensuite pu construire libtensorflow-lite.a
.
La commande du tutoriel me donne toujours une erreur lors de la construction des exemples d'applications: référence non définie à flatbuffers :: ClassicLocale :: instance_ , la solution à ce problème est décrite dans
https://github.com/tensorflow/tensorflow/issues/28863
En guise de remarque si vous essayez d'utiliser le docker conteneur du guide:
https://tensorflow.google.cn/ lite / guide / build_arm64
Il recommande d'utiliser tensorflow / tensorflow: nightly-devel
qui, selon docker hub, est actuellement une image vieille de 6 mois (certainement pas tous les soirs) :
https: //hub.docker .com / r / tensorflow / tensorflow / tags /? page = 1 p >
À partir de ce même lien, vous pouvez trouver un conteneur devel
plus récent, dans mon cas, j'ai utilisé devel-py3
J'ai également rencontré un problème similaire lors de la construction de Tensorflow-1.14 sur aarch64. J'ai utilisé les modifications suggérées dans ce PR et cela a résolu ce problème. Résolvez les deux problèmes suivants sur un système linux_aarch64:
Ajouter le cas suivant dans le def tflite_copts ()
du tensorflow/lite/build_def.bzl
str(Label("//tensorflow:linux_aarch64")): [ "-flax-vector-conversions", "-fomit-frame-pointer", ],
-flax-vector-conversions
fait-il une différence?Je ne sais pas. je suis nouveau sur ce sujet. J'applique uniquement le guide tensorflow lite. @doctorlove
J'ai le même problème.