【发布时间】:2022-10-15 10:58:55
【问题描述】:
我用 C++ 用 Pytorch 调用 python。
C++ 生成一个向量并发送到 Python 以供神经网络进行推理。
但是发送向量是一个耗时的过程。 一个包含 500000 个浮点数的向量消耗 0.5 秒转向 array_t。
有没有更快的方法将向量传输到 array_t?任何帮助将不胜感激!
这是代码的一部分:
int main(){
float list[500000];
std::vector<float> v(list, list+length);
py::array_t<float> args = py::cast(v); //consume 0.5 second
py::module_ nd_to_tensor = py::module_::import("inference");
py::object result = nd_to_tensor.attr("inference")(args);
}
我也尝试了下面的第二种方法,但是在 Python 中将向量变成张量需要 1.4 秒:
PYBIND11_MAKE_OPAQUE(std::vector<float>);
PYBIND11_EMBEDDED_MODULE(vectorbind, m) {
m.doc() = "C++ type bindings created by py11bind";
py::bind_vector<std::vector<float>>(m, "Vector");
}
int main(){
std::vector<float> v(list, list+length);
py::module_ nd_to_tensor = py::module_::import("inference");
py::object result = nd_to_tensor.attr("inference")(&v);
}
这是Python代码:
def inference():
tensor = torch.Tensor(Vector)
【问题讨论】:
标签: python c++ pytorch stl pybind11