Форум для тех, кто программирует под Android
Anonymous
Невозможно переслать модель в Pytorch Lite 1.9.0 в собственном приложении Android.
Сообщение
Anonymous » 30 июл 2024, 21:11
Я создаю приложение для 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]
1722363088
Anonymous
Я создаю приложение для Android с использованием Java, C++ и libtorch. Моя легкая модель — VQA, задача которой состоит из 4 аргументов: image_features, input_ids, alert_mask, token_type_ids. В настоящее время я не могу пересылать входные данные. Это вызывает c10::Error: [code]"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)" [/code] Я не знаю, что это значит. Это мой CMakeLists.txt: [code]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) [/code] А это мой gradle.build: [code] 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) } } [/code] Это мой родной-lib.cpp: [code]#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]