Невозможно переслать модель в Pytorch Lite 1.9.0 в собственном приложении Android.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно переслать модель в Pytorch Lite 1.9.0 в собственном приложении Android.

Сообщение Anonymous »

Я создаю приложение для Android с использованием Java, C++ и libtorch. Моя легкая модель — VQA, задача которой состоит из 4 аргументов: image_features, input_ids, alert_mask, token_type_ids.
В настоящее время я не могу пересылать входные данные. Это вызывает c10::Error:

Код: Выделить всё

"index out of range in self\n  \n  Debug info for handle(s): -1, was not found.\n  \nException raised from operator() at ../aten/src/ATen/native/TensorAdvancedIndexing.cpp:980 (most recent call first):\n(no backtrace available)"
Я не знаю, что это значит.
Это мой CMakeLists.txt:

Код: Выделить всё

cmake_minimum_required(VERSION 3.4.1)
# THIS HAS TO COME BEFORE THE PROJECT LINE
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS_DEBUG  "")
set(CMAKE_CXX_FLAGS_RELEASE  "")
#set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)

set(CMAKE_CXX_FLAGS  "-D_GLIBCXX_USE_CXX11_ABI=1")
set(TORCH_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=1")

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
#set(TORCH_CXX_FLAGS "${TORCH_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")

# THIS HAS TO COME BEFORE THE PROJECT LINE
set(TARGET pytorch_nativeapp_VQA)
set(CMAKE_VERBOSE_MAKEFILE TRUE CACHE BOOL "" FORCE)

project(${TARGET} VERSION 0.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)

if("${ANDROID_ABI}"  STREQUAL "")
EXECUTE_PROCESS(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE)
set(ANDROID_ABI ${ARCHITECTURE})
endif()
set(ANDROID_ABI "arm64-v8a")
message(STATUS "Compile for architecture: ${ANDROID_ABI}")
message("Compile for architecture: ${ANDROID_ABI}")

set(build_DIR ${CMAKE_SOURCE_DIR}/build)

set(pytorch_testapp_cpp_DIR ${CMAKE_CURRENT_LIST_DIR}/src/main/cpp)
message("CMAKE_CURRENT_LIST_DIR: ${CMAKE_CURRENT_LIST_DIR}")
message("CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}")
message("CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")

file(GLOB pytorch_testapp_SOURCES
${pytorch_testapp_cpp_DIR}/native-lib.cpp
)

message("pytorch_testapp_SOURCES: ${pytorch_testapp_SOURCES}")

# OpenCV
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../distribution)
set(OpenCV_DIR ${distribution_DIR}/libs/arm64-v8a/sdk/native/jni)
message("distribution_DIR: ${distribution_DIR}")
message("OpenCV_DIR: ${OpenCV_DIR}")
find_package(OpenCV 4.5.4 REQUIRED)

#set(OPENCV_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/path/to/opencv/include") # Replace with the path to your OpenCV include directory
#set(OPENCV_LIB_DIR "${CMAKE_CURRENT_LIST_DIR}/path/to/opencv/libs/${ANDROID_ABI}") # Replace with the path to your OpenCV libs directory

include_directories(${distribution_DIR}/libs/arm64-v8a/opencv2)

# Find PyTorch libraries and include directories
#set(PYTORCH_ROOT_DIR $ENV{HOME}/.gradle/caches/modules-2/files-2.1/org.pytorch)
set(PYTORCH_ROOT_DIR ${distribution_DIR}/libs/arm64-v8a/org.pytorch)

file(GLOB PYTORCH_INCLUDE_DIRS "${build_DIR}/pytorch_android*.aar/headers")
file(GLOB PYTORCH_LINK_DIRS "${build_DIR}/pytorch_android*.aar/jni/${ANDROID_ABI}")
message("######### PYTORCH_INCLUDE_DIRS: ${PYTORCH_INCLUDE_DIRS}")
message("######### PYTORCH_LINK_DIRS: ${PYTORCH_LINK_DIRS}")

find_library(PYTORCH_LIBRARY pytorch_jni_lite
PATHS ${PYTORCH_LINK_DIRS}
NO_CMAKE_FIND_ROOT_PATH)
find_library(FBJNI_LIBRARY fbjni
PATHS ${PYTORCH_LINK_DIRS}
NO_CMAKE_FIND_ROOT_PATH)

message("######### PYTORCH_LIBRARY: ${PYTORCH_LIBRARY}")
message("######### FBJNI_LIBRARY:  ${FBJNI_LIBRARY}")

# PyTorch
add_library(${TARGET} SHARED
${pytorch_testapp_SOURCES}
)

target_include_directories(${TARGET} PRIVATE
${CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES}
${OpenCV_INCLUDE_DIRS}
${PYTORCH_INCLUDE_DIRS}
)

#target_link_libraries(${TARGET} -lpytorch_jni ${OpenCV_LIBS} log)
target_link_libraries(${TARGET}
${OpenCV_LIBS}
-pthread
${PYTORCH_LIBRARY} # Sử dụng biến PYTORCH_LIBRARY đã tìm thấy
${FBJNI_LIBRARY}

log)

target_compile_options(${TARGET} PRIVATE -fexceptions)
А это мой gradle.build:

Код: Выделить всё

plugins {
id 'com.android.application'
}
android {
configurations {
extractForNativeBuild
}

compileSdk 34
ndkVersion '21.4.7075529'

defaultConfig {
applicationId "org.pytorch.helloworld"
minSdk 28
targetSdk 34
versionCode 1
versionName "1.0"
ndk {
abiFilters "arm64-v8a"
}

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
signingConfig signingConfigs.debug
externalNativeBuild {
cmake {
cppFlags ''
arguments "-DANDROID_STL=c++_shared"
}
}
}
externalNativeBuild {
cmake {
path './CMakeLists.txt'
version '3.22.1'

}
}
buildTypes {
release {
minifyEnabled false
}
}
buildFeatures {
viewBinding true
}
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}

}

dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

implementation 'com.google.code.gson:gson:2.8.2'
implementation 'org.jetbrains.bio:npy:0.3.5'
implementation 'org.pytorch:pytorch_android_lite:1.10.0'
extractForNativeBuild 'org.pytorch:pytorch_android_lite:1.10.0'

}
task extractAARForNativeBuild {
doLast {
configurations.extractForNativeBuild.files.each {
def file = it.absoluteFile
copy {
from zipTree(file)
into "$buildDir/$file.name"
include "headers/**"
include "jni/**"
}
}
}
}
tasks.whenTaskAdded { task ->
if (task.name.contains('externalNativeBuild')) {
task.dependsOn(extractAARForNativeBuild)
}
}
Это мой родной-lib.cpp:

Код: Выделить всё

#include 
#include 
//#include 
#include 
//#include 
#include 
#include 
#include 
//#include 
#include 
#include 
#include 
#include 

#include "ATen/ATen.h"
#include "torch/csrc/autograd/grad_mode.h"
#include "torch/script.h"
#include 
#include 
#include 
//#include 
#include 
#include "opencv2/opencv.hpp"

#include 
#include 
#include 
#include 
#include "fastBPE.hpp"
#include 
#include 
#include "npy.hpp"
#include 
//#include 

using namespace std;
using namespace fastBPE;

std::unordered_map loadVocab(const std::string& filename) {
std::unordered_map vocab;
std::ifstream file(filename);

if (!file.is_open()) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/78812306/cannot-forward-model-in-pytorch-lite-1-9-0-in-android-native-app[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»