6个版本
新版本 0.3.0 | 2024年8月23日 |
---|---|
0.2.0 | 2024年8月9日 |
0.1.0 | 2024年8月3日 |
#891 in 机器学习
每月下载量435
在executorch中使用
68KB
395 代码行
executorch-sys
有关项目的通用描述,请参阅executorch crate。
构建
要构建库,您需要首先构建C++库。C++库允许使用许多标志,可以自定义构建哪些模块、内核和扩展。构建了多个静态库,Rust库将链接到它们。以下示例展示了如何使用运行示例hello_world_add
所需的标志构建C++库:
# Clone the C++ library
cd ${TEMP_DIR}
git clone --depth 1 --branch v0.3.0 https://github.com/pytorch/executorch.git
cd executorch
git submodule sync --recursive
git submodule update --init --recursive
# Install requirements
./install_requirements.sh
# Build C++ library
mkdir cmake-out && cd cmake-out
cmake \
-DDEXECUTORCH_SELECT_OPS_LIST=aten::add.out \
-DEXECUTORCH_BUILD_EXECUTOR_RUNNER=OFF \
-DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=OFF \
-DBUILD_EXECUTORCH_PORTABLE_OPS=ON \
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
-DEXECUTORCH_ENABLE_PROGRAM_VERIFICATION=ON \
-DEXECUTORCH_ENABLE_LOGGING=ON \
..
make -j
# Static libraries are in cmake-out/
# core:
# cmake-out/libexecutorch.a
# cmake-out/libexecutorch_no_prim_ops.a
# kernels implementations:
# cmake-out/kernels/portable/libportable_ops_lib.a
# cmake-out/kernels/portable/libportable_kernels.a
# extension data loader, enabled with EXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON:
# cmake-out/extension/data_loader/libextension_data_loader.a
# extension module, enabled with EXECUTORCH_BUILD_EXTENSION_MODULE=ON:
# cmake-out/extension/module/libextension_module_static.a
# Run example
# We set EXECUTORCH_RS_EXECUTORCH_LIB_DIR to the path of the C++ build output
cd ${EXECUTORCH_RS_DIR}/examples/hello_world_add
python export_model.py
EXECUTORCH_RS_EXECUTORCH_LIB_DIR=${TEMP_DIR}/executorch/cmake-out cargo run
executorch
crate将始终查找以下静态库:
libexecutorch.a
libexecutorch_no_prim_ops.a
如果启用了功能标志,则需要额外的库(参见下一节)
libextension_data_loader.a
libextension_module_static.a
只有当您的模型使用它们时,才需要实现内核的静态库,并且它们应该由使用executorch
crate的二进制文件手动链接。例如,hello_world_add
示例使用一个只有一个加法操作的操作模型,因此它使用以下命令编译C++库:
println!("cargo::rustc-link-lib=static:+whole-archive=portable_kernels");
println!("cargo::rustc-link-lib=static:+whole-archive=portable_ops_lib");
let libs_dir = std::env::var("EXECUTORCH_RS_EXECUTORCH_LIB_DIR").unwrap();
println!("cargo::rustc-link-search={}/kernels/portable/", libs_dir);
注意,操作和内核库使用+whole-archive
链接,以确保所有符号都包含在二进制文件中。
Cargo功能
-
data-loader
包含
FileDataLoader
和MmapDataLoader
结构。如果没有此功能,则唯一可用的数据加载器是BufferDataLoader
。需要libextension_data_loader.a
静态库,使用EXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON
编译C++executorch
。 -
module
包含
Module
结构体。需要libextension_module_static.a
静态库,使用EXECUTORCH_BUILD_EXTENSION_MODULE=ON
编译C++executorch
。还包含std
功能。 -
std
启用标准库。此功能默认启用,但可以禁用以在
no_std
环境中构建executorch
。注意:no_std仍在开发中,请参阅https://github.com/pytorch/executorch/issues/4561
默认情况下启用std
功能。
依赖项
~0–2MB
~40K SLoC