![]() |
乖乖的莲藕 · 三年两换管理团队 巧妇难为岚图无米之炊?_腾讯新闻· 1 年前 · |
![]() |
犯傻的手链 · 比亚迪价格最低车型上市 ...· 1 年前 · |
![]() |
性感的绿豆 · 《一点就到家》引期待 ...· 1 年前 · |
![]() |
讲道义的砖头 · 东风富康es500续航怎么样_太平洋汽车网· 1 年前 · |
![]() |
玩足球的红薯 · 伊能静参加奢华宴会,华裔富豪竟是通缉犯?还叫 ...· 1 年前 · |
我在Linux系统上有Miniconda3 (Ubuntu22.04)。该环境有Python3.10以及一个功能(在Python中)安装了PyTorch (按照官方说明安装)。
我想设置一个使用PyTorch PyTorch C++ API的C++项目。原因并不重要,而且我也知道它是beta版(官方文档说明了这一点),所以不稳定和重大更改也不例外。
目前我有一个非常小的
CMakeLists.txt
cmake_minimum_required(VERSION 3.19) # or whatever version you use
project(PyTorch_Cpp_HelloWorld CXX)
set(PYTORCH_ROOT "/home/$ENV{USER}/miniconda/envs/ML/lib/python3.10/site-packages/torch")
list(APPEND CMAKE_PREFIX_PATH "${PYTORCH_ROOT}/share/cmake/Torch/")
find_package(Torch REQUIRED CONFIG)
# Add executable
# Link against PyTorch library
当我试图配置项目时,我得到的是错误:
CMake CMakeLists.txt:21错误(消息):使用不正确的参数调用的消息 -找不到Protobuf (失踪: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR) --“找到的线程:在Protobuf_LIBRARIES(消息)处的真实CMake警告:找不到Protobuf”。根据您是构建Caffe2还是Caffe2依赖库,下一个警告/错误将为您提供更多信息。Call Stack (最近一次调用):/home/USER/miniconda/envs/ML/lib/python3.10/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:56 (包括) /home/USER/miniconda/envs/ML/lib/python3.10/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package) CMakeLists.txt:23 (find_package) /home/USER/miniconda/envs/ML/lib/python3.10/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:58中的CMake错误(消息):您已安装的Caffe2版本使用protobuf,但无法找到protobuf库。您是意外地删除了它,还是设置了正确的CMAKE_PREFIX_PATH?如果您没有protobuf,则需要安装protobuf并相应地设置库路径。Call Stack (最近一次先调用): /home/USER/miniconda/envs/ML/lib/python3.10/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package) CMakeLists.txt:23 (find_package)
我安装了
libprotobuf
(同样是通过
conda
),但是,虽然我可以找到库文件,但我找不到任何
*ProtobufConfig.cmake
或任何与protobuf及其CMake设置有关的远程内容。
在我去对抗风车之前,我想在这里问一下,适当的设置是什么。我猜想从源头构建总是一种选择,然而这将给我所合作的人带来巨大的开销。
发布于 2022-06-08 08:21:37
作为使用
conda
的另一种选择,我建议使用
https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip
解压缩链接来获取预构建的库,这将为您提供一个文件夹
libtorch
,您可以将其放在CMakeLists.txt旁边。有了这些,您需要在cmake (参见
这里
)中拥有的全部内容如下所示:
project(example-app)
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
list(APPEND CMAKE_PREFIX_PATH "libtorch")
发布于 2022-06-08 13:06:58
使用此conda env:
name: pytorch_latest
channels:
- pytorch
- conda-forge
- defaults
dependencies:
- pytorch=1.11.0
- torchvision
- torchaudio
- cpuonly
我从
这里
中复制了这个小示例并让它运行。关键是设置正确的库目录(
torch
在
site-packages
中,但也包括环境的
lib
文件夹)。写入cmake文件,以便自动找到文件夹:
example-app.cpp
#include <torch/torch.h>
#include <iostream>
int main() {
torch::Tensor tensor = torch::rand({2, 3});
std::cout << tensor << std::endl;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)
#Add the torch library directory
list(APPEND CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}/lib/python3.10/site-packages/torch")
#This is needed to be able to find the mkl and other dependent libraries
link_directories("$ENV{CONDA_PREFIX}/lib")
set(ENV{MKLROOT} "$ENV{CONDA_PREFIX}/lib")
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
add_executable(example-app example-app.cpp)
#We need to add pthread and omp manually here
target_link_libraries(example-app "${TORCH_LIBRARIES}" pthread omp)
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
确切的环境(如果在重现性方面有问题):
name: pytorch_latest
channels:
- pytorch
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
- blas=2.115=mkl
- blas-devel=3.9.0=15_linux64_mkl
- brotlipy=0.7.0=py310h5764c6d_1004
- bzip2=1.0.8=h7f98852_4
- ca-certificates=2022.5.18.1=ha878542_0
- certifi=2022.5.18.1=py310hff52083_0
- cffi=1.15.0=py310h0fdd8cc_0
- charset-normalizer=2.0.12=pyhd8ed1ab_0
- cpuonly=2.0=0
- cryptography=37.0.1=py310h9ce1e76_0
- ffmpeg=4.3=hf484d3e_0
- freetype=2.10.4=h0708190_1
- giflib=5.2.1=h36c2ea0_2
- gmp=6.2.1=h58526e2_0
- gnutls=3.6.13=h85f3911_1
- idna=3.3=pyhd8ed1ab_0
- jpeg=9e=h166bdaf_1
- lame=3.100=h7f98852_1001
- lcms2=2.12=hddcbb42_0
- ld_impl_linux-64=2.36.1=hea4e1c9_2
- lerc=3.0=h9c3ff4c_0
- libblas=3.9.0=15_linux64_mkl
- libcblas=3.9.0=15_linux64_mkl
- libdeflate=1.10=h7f98852_0
- libffi=3.4.2=h7f98852_5
- libgcc-ng=12.1.0=h8d9b700_16
- libgfortran-ng=12.1.0=h69a702a_16
- libgfortran5=12.1.0=hdcd56e2_16
- libiconv=1.17=h166bdaf_0
- liblapack=3.9.0=15_linux64_mkl
- liblapacke=3.9.0=15_linux64_mkl
- libnsl=2.0.0=h7f98852_0
- libpng=1.6.37=h21135ba_2
- libstdcxx-ng=12.1.0=ha89aaad_16
- libtiff=4.4.0=h0fcbabc_0
- libuuid=2.32.1=h7f98852_1000
- libuv=1.43.0=h7f98852_0
- libwebp=1.2.2=h3452ae3_0
- libwebp-base=1.2.2=h7f98852_1
- libxcb=1.13=h7f98852_1004
- libzlib=1.2.12=h166bdaf_0
- llvm-openmp=14.0.4=he0ac6c6_0
- lz4-c=1.9.3=h9c3ff4c_1
- mkl=2022.1.0=h84fe81f_915
- mkl-devel=2022.1.0=ha770c72_916
- mkl-include=2022.1.0=h84fe81f_915
- ncurses=6.3=h27087fc_1
- nettle=3.6=he412f7d_0
- numpy=1.22.4=py310h4ef5377_0
- openh264=2.1.1=h780b84a_0
- openjpeg=2.4.0=hb52868f_1
- openssl=3.0.3=h166bdaf_0
- pillow=9.1.1=py310he619898_1
- pip=22.1.2=pyhd8ed1ab_0
- pthread-stubs=0.4=h36c2ea0_1001
- pycparser=2.21=pyhd8ed1ab_0
- pyopenssl=22.0.0=pyhd8ed1ab_0
- pysocks=1.7.1=py310hff52083_5
- python=3.10.4=h2660328_0_cpython
- python_abi=3.10=2_cp310
- pytorch=1.11.0=py3.10_cpu_0
- pytorch-mutex=1.0=cpu
- readline=8.1=h46c0cb4_0
- requests=2.27.1=pyhd8ed1ab_0
- setuptools=62.3.2=py310hff52083_0
- sqlite=3.38.5=h4ff8645_0
- tbb=2021.5.0=h924138e_1
- tk=8.6.12=h27826a3_0
- torchaudio=0.11.0=py310_cpu
- torchvision=0.12.0=py310_cpu
- typing_extensions=4.2.0=pyha770c72_1
- tzdata=2022a=h191b570_0
- urllib3=1.26.9=pyhd8ed1ab_0