Demonstração de incorporação:
Referência: Fluxos de trabalho do GitHub
git submodule update --init
1. configurar o NDK
Substitua o NDK pelo caminho e versão local do NDK (meu exemplo local do macOS)
export ANDROID_HOME= $HOME /Library/Android/sdk
export ANDROID_NDK_HOME= $HOME /Library/Android/sdk/ndk/26.1.10909125
export TOOLCHAIN= $ANDROID_NDK_HOME /toolchains/llvm/prebuilt/darwin-x86_64
export TARGET=aarch64-linux-android
export API=34
export AR= $TOOLCHAIN /bin/llvm-ar
export CC= $TOOLCHAIN /bin/ $TARGET$API -clang
export AS= $CC
export CXX= $TOOLCHAIN /bin/ $TARGET$API -clang++
export LD= $TOOLCHAIN /bin/ld
export RANLIB= $TOOLCHAIN /bin/llvm-ranlib
export STRIP= $TOOLCHAIN /bin/llvm-strip
export PATH= $PATH : $ANDROID_HOME /cmdline-tools/latest/bin
export PATH= $PATH : $TOOLCHAIN /bin
2. configurar alvo de ferrugem
rustup target add armv7-linux-androideabi i686-linux-android arm-linux-androideabi x86_64-linux-android aarch64-linux-android
Vinculador 3.config
Depois disso, adicione o seguinte em $HOME/.cargo/config
(faça o arquivo de configuração se ele não existir):
Siga: https://doc.rust-lang.org/beta/rustc/platform-support.html
PS: lembre-se de alterar o caminho para o seu NDK
[ target . i686-linux-android ]
linker = " /Users/phodal/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android34-clang "
[ target . arm-linux-android ]
linker = " /Users/phodal/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-android34-clang "
[ target . x86_64-linux-android ]
linker = " /Users/phodal/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android34-clang "
[ target . aarch64-linux-android ]
linker = " /Users/phodal/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android34-clang "
4.construir FFI
./gradlew cargoBuild
para iOS (exemplo, não funciona)
rustup target add aarch64-apple-ios
cargo build --target=x86_64-apple-ios --release
5. execute o aplicativo
Ferramentas: https://github.com/huggingface/optimum
1. configuração
pip install optimum[exporters,onnxruntime]
2.converter onnx
optimum-cli export onnx -m Helsinki-NLP/opus-mt-zh-en --optimize O2 optus-mt-zh-en-onnx
3.quantizar Onnx
optimum-cli onnxruntime quantize
--avx512
--onnx_model bert-tiny-onnx
-o quantized_bert-tiny-onnx
Exemplos: https://github.com/unit-mesh/onnx-convert-test
Outros modelos de teste:
Modelo IntelliJ IDEA Search Everywhere:
Modelo Bloop:
Caused by: ai.djl.engine.EngineException: Failed to load Huggingface native library.
at ai.djl.huggingface.tokenizers.jni.LibUtils.<clinit>(LibUtils.java:43)
at ai.djl.huggingface.tokenizers.jni.LibUtils.checkStatus(LibUtils.java:50)
at ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.newInstance(HuggingFaceTokenizer.java:170)
at org.unitmesh.llmpoc.embedding.STSemantic$Companion.create(STSemantic.kt:78)
at org.unitmesh.llmpoc.MainActivity.onCreate(MainActivity.kt:33)
at android.app.Activity.performCreate(Activity.java:8143)
at android.app.Activity.performCreate(Activity.java:8114)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3700)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by: java.lang.IllegalStateException: Cannot copy jni files
at ai.djl.huggingface.tokenizers.jni.LibUtils.copyJniLibraryFromClasspath(LibUtils.java:108)
at ai.djl.huggingface.tokenizers.jni.LibUtils.loadLibrary(LibUtils.java:66)
at ai.djl.huggingface.tokenizers.jni.LibUtils.<clinit>(LibUtils.java:41)
at ai.djl.huggingface.tokenizers.jni.LibUtils.checkStatus(LibUtils.java:50)
at ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.newInstance(HuggingFaceTokenizer.java:170)
at org.unitmesh.llmpoc.embedding.STSemantic$Companion.create(STSemantic.kt:78)
at org.unitmesh.llmpoc.MainActivity.onCreate(MainActivity.kt:33)
at android.app.Activity.performCreate(Activity.java:8143)
at android.app.Activity.performCreate(Activity.java:8114)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3700)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Edição: 2170
Solução: Plug-in Rust Android Gradle
Erro ao construir projeto Rust para Android (Flutter): arm-linux-androideabi-ranlib não encontrado para compilação OpenSSL
https://stackoverflow.com/questions/75943717/error-building-rust-project-for-android-flutter-arm-linux-androideabi-ranlib
Precisa atualizar a versão do Onnx Runtime
thread 'tokio-runtime-worker' entrou em pânico em 'chamado Result::unwrap()
em um valor Err
: CreateSession(Msg("Falha ao carregar o modelo com erro: /Users/runner/work/1/s/onnxruntime/core/ gráfico/model_load_utils.h:56 void onnxruntime:: model_load_utils::ValidateOpsetForDomain(const std::unordered_map<std::string, int> &, const logging::Logger &, bool, const std::string &, int) ONNX Runtime garante suporte apenas para modelos carimbados com versões oficiais do onnx opset 19. em desenvolvimento e o suporte para isso é limitado. Os esquemas do operador e/ou outras funcionalidades podem mudar antes do próximo lançamento do ONNX e, neste caso, o ONNX Runtime não garantirá a compatibilidade com versões anteriores. para o domínio com.ms.internal.nhwc é até opset 18.n"))', /Volumes/source/ai/Inference/inference_core/src/embed.rs:49:18
Outros problemas: falha no uso da v1.9.0 para carregar o ONNX Opset 15
Função de carregamento: System.LoadLibrary("tokenizers");
Nenhuma implementação encontrada para org.unitmesh.tokenizer.huggingface.tokenizers.jni.TokenizersLibrary.createTokenizerFromString(java.lang.String) longo (tentei Java_org_unitmesh_tokenizer_huggingface_tokenizers_jni_TokenizersLibrary_createTokenizerFromString e Java_org_unitmesh_tokenizer_huggingface_tokenizers_jni_TokenizersLibrary_createTokenizerFromString__Ljava_lang_String_2) - a biblioteca está carregada, por exemplo, System.loadLibrary?