android build 이후에 sample code 컴파일 문의

다음과 같은 스텝으로 pytorch(1.9)를 android로 빌드하는데 성공하였습니다.

$ ANDROID_NDK=.../android-ndk-r21e
$ ANDROID_ABI="arm64-v8a"
$ cd scripts
$ ./build_android.sh
... (long time) ...
[100%] Linking CXX static library ../lib/libtorch.a
[100%] Built target torch
Install the project...
-- Install configuration: "Release"
Installation completed, now you can copy the headers/libs from /mnt/HDD_2TB/greenfish/pytorch_build/work.trial9/pytorch/build_android/install to your Android project directory.

빌드 산출물인 install 경로의 형상입니다.

/mnt/HDD_2TB/greenfish/pytorch_build/work.trial9/pytorch/build_android/install
├── include
│   ├── ATen
│   ├── TH
│   ├── THCUNN
│   ├── c10
│   ├── caffe2
│   ├── fp16
│   ├── pybind11
│   └── torch
├── lib
└── share
    ├── ATen
    └── cmake

예제 코드:
/mnt/HDD_2TB/greenfish/pytorch_build/work.trial9/src/test.cpp

#include <torch/torch.h>
#include <iostream>

int main() {
  torch::Tensor tensor = torch::eye(3);
  std::cout << tensor << std::endl;
}

/mnt/HDD_2TB/greenfish/pytorch_build/work.trial9/src/CMakeLists.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test)

find_package(Torch REQUIRED)

add_executable(test test.cpp)
target_link_libraries(test "${TORCH_LIBRARIES}")
set_property(TARGET test PROPERTY CXX_STANDARD 14)

build

src$ mkdir build
src$ cd build
build$ cmake ..
...
...
...
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindTorch.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Torch", but
  CMake did not find one.

  Could not find a package configuration file provided by "Torch" with any of
  the following names:

    TorchConfig.cmake
    torch-config.cmake

  Add the installation prefix of "Torch" to CMAKE_PREFIX_PATH or set
  "Torch_DIR" to a directory containing one of the above files.  If "Torch"
  provides a separate development package or SDK, be sure it has been
  installed.

pytorch를 android로 빌드하는데 성공하였지만, 샘플 C++ 코드를 빌드하지 못하고 있습니다. 방법이 있을까요?

  • 아래 답변은 Anthropic의 Claude-2 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요 Jin_Pyo_Jun 님,

Android에서 PyTorch sample code를 빌드하지 못하는 문제 관련 질문 감사합니다.

제가 보기에는 PyTorch library를 제대로 link하지 못한 것 같습니다.

Android NDK를 사용하여 PyTorch를 빌드하셨는데, 이 경우 CMake를 사용하여 sample code를 빌드할 때 몇 가지 추가 설정이 필요합니다.

  1. CMakeLists.txt에 아래 내용 추가
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

# PyTorch 라이브러리 및 헤더 파일 경로 설정 
set(TORCH_INSTALL_PREFIX /your/install/path)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${TORCH_INSTALL_PREFIX})
  1. Linker 경로에 PyTorch 라이브러리 포함
target_link_libraries(test "${TORCH_LIBRARIES}"
                       -L${TORCH_INSTALL_PREFIX}/lib) 
  1. Include 디렉토리 추가
include_directories(${TORCH_INSTALL_PREFIX}/include)

이렇게 설정한 후에 CMake 및 빌드를 다시 하시면 PyTorch C++ sample code 빌드가 잘 될 것입니다.

제가 제안한 내용 외에도 Android NDK 빌드 시 고려해야 할 사항이 더 있을 수 있습니다.

Android NDK 빌드 경험이 있으신 분들께서 조언을 아끼지 않아주시면 감사하겠습니다.

추가로 문의사항 있으시면 언제든지 댓글 남겨주세요. PyTorch Android 빌드 관련해서 같이 고민하고 해결책을 찾아가겠습니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-3.5(ChatGPT) 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! 문제를 이해하고 공감해 드리겠습니다.

문제를 요약하자면, PyTorch를 Android로 빌드하는 것은 성공했지만, 샘플 C++ 코드를 빌드할 때 오류가 발생한다는 것입니다. 이를 해결하기 위한 방법을 알고 싶다고 하셨습니다.

문제를 해결하기 위해 다음과 같은 단계로 진행할 수 있습니다.

  1. PyTorch를 Android로 빌드할 때 생성된 install 경로에 있는 헤더 파일과 라이브러리 파일을 적절한 위치로 복사합니다.
  2. CMakeLists.txt 파일을 수정하여 Torch 패키지를 찾을 수 있도록 설정합니다.
  3. C++ 코드를 빌드합니다.

이제 각 단계를 자세히 설명하겠습니다.

  1. PyTorch를 Android로 빌드할 때 생성된 install 경로에 있는 헤더 파일과 라이브러리 파일을 적절한 위치로 복사합니다.

빌드 산출물인 install 경로에는 include, lib, share 디렉토리가 있습니다. 이 중에서 include 디렉토리의 내용을 Android 프로젝트의 헤더 파일 위치로 복사하고, lib 디렉토리의 내용을 Android 프로젝트의 라이브러리 파일 위치로 복사해야 합니다.

  1. CMakeLists.txt 파일을 수정하여 Torch 패키지를 찾을 수 있도록 설정합니다.

현재 CMakeLists.txt 파일에서는 Torch 패키지를 찾을 수 없다는 오류가 발생하고 있습니다. 이를 해결하기 위해 find_package(Torch REQUIRED) 문장을 추가하고, target_link_libraries(test "${TORCH_LIBRARIES}") 문장을 수정해야 합니다.

수정된 CMakeLists.txt 파일은 다음과 같습니다.

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test)

find_package(Torch REQUIRED)

add_executable(test test.cpp)
target_link_libraries(test "${TORCH_LIBRARIES}")
set_property(TARGET test PROPERTY CXX_STANDARD 14)
  1. C++ 코드를 빌드합니다.

CMakeLists.txt 파일을 수정한 후에는 C++ 코드를 빌드할 수 있습니다. 다음 명령어를 실행하여 빌드를 수행합니다.

mkdir build
cd build
cmake ..
make

이제 C++ 코드가 성공적으로 빌드되어 실행 파일이 생성될 것입니다.

이제 문제를 해결하기 위해 제안한 방법을 시도해 보시고, 문제가 해결되지 않거나 추가적인 도움이 필요하다면 언제든지 질문해 주세요.

더 자세한 내용은 PyTorch 공식 튜토리얼을 참고하실 수 있습니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요, Jin_Pyo_Jun님. PyTorch를 Android로 빌드하는 과정에서 발생한 문제에 대해 질문해주셨군요. 질문을 정리해보면, PyTorch를 Android로 빌드하는 것은 성공했지만, 이후에 제공된 샘플 C++ 코드를 빌드하는 과정에서 문제가 발생했다는 것입니다. CMake가 Torch 패키지를 찾지 못하는 것으로 보입니다.

이 문제는 CMake가 Torch 패키지를 찾지 못해서 발생하는 것으로 보입니다. CMake는 FindTorch.cmake, TorchConfig.cmake, torch-config.cmake 중 하나를 찾아서 Torch 패키지를 찾습니다. 이 파일들 중 하나가 설치된 경로에 존재하지 않으면 CMake는 Torch 패키지를 찾지 못하게 됩니다.

이 문제를 해결하기 위해서는 CMake에게 Torch 패키지의 위치를 알려줘야 합니다. 이를 위해 CMAKE_PREFIX_PATH 환경 변수를 설정하거나 Torch_DIR 변수를 설정하면 됩니다. 이 변수들은 Torch 패키지가 설치된 경로를 가리켜야 합니다.

예를 들어, 아래와 같이 CMakeLists.txt 파일을 수정하면 됩니다.

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test)

set(Torch_DIR "/mnt/HDD_2TB/greenfish/pytorch_build/work.trial9/pytorch/build_android/install/share/cmake/Torch")
find_package(Torch REQUIRED)

add_executable(test test.cpp)
target_link_libraries(test "${TORCH_LIBRARIES}")
set_property(TARGET test PROPERTY CXX_STANDARD 14)

여기서 Torch_DIR 변수는 TorchConfig.cmake 파일이 위치한 경로를 가리키고 있습니다. 이 경로는 PyTorch를 빌드했을 때의 출력 결과에 따라 달라질 수 있으니, 실제 TorchConfig.cmake 파일이 위치한 경로로 설정해주시면 됩니다.

이렇게 하면 CMake는 Torch_DIR 변수를 통해 Torch 패키지의 위치를 알 수 있고, 이후에 샘플 C++ 코드를 빌드할 수 있게 됩니다.

더 자세한 정보는 PyTorch의 공식 문서를 참조하시면 됩니다. 아래 링크를 참조해주세요.

답변이 도움이 되었기를 바라며, 추가적인 질문이 있으시면 언제든지 물어보세요. 그러나 제 답변이 틀릴 수도 있으니, 다른 자료나 의견도 참고하시는 것을 권장드립니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!