推理输入输出
MindIE Torch编译优化后的模型在执行推理时,输入数据只支持"npu"的Tensor,输出数据也为"npu"的Tensor。
对于输入数据,"cpu"类型的Tensor需要to("npu")后进行推理运算;对于输出数据,"npu"类型的Tensor需要to("cpu")后再进行运算操作。数据拷贝方式请参见数据拷贝。
异步推理
MindIE Torch模型推理采用异步推理,用户可以显式的设置当前Stream和进行Stream同步,也可以不显式设置,采用默认Stream。当用户不显式设置时,MindIE Torch内部将会在数据拷贝时进行Stream同步,保证计算结果正确性。
- 不显式设置Stream的伪代码:
- C++:
| dataNpu = dataCpu.to("npu:0");// dataCpu表示"cpu"类型的输入数据Tensor
npuResults = compiled_module.forward(dataNpu); // 异步推理,采用默认流
cpuResults = npuResults.to("cpu"); // torch_aie内部会在数据拷贝前进行流同步
|
- Python:
| dataNpu = dataCpu.to("npu:0")// dataCpu表示"cpu"类型的输入数据Tensor
npuResults = compiled_module.forward(dataNpu) # 异步推理,采用默认流
cpuResults = npuResults.to("cpu") # MindIE Torch内部会在数据拷贝前进行流同步
|
- 显式设置Stream的伪代码:
- C++:
| c10::Stream stream = c10::Stream(c10::Stream::DEFAULT, npu); // create stream
c10::StreamGuard streamGuard(stream); // set stream
npuResults = compiledModule.forward(dataNpu); // forward;dataNpu表示"npu"类型的输入数据Tensor
stream.synchronize() // synchronize
|
- Python:
| stream = mindietorch.npu.Stream("npu:0") # create stream
with mindietorch.npu.stream(stream): # set stream
npu_results = compiled_module.forward(data_npu) # forward;data_npu表示"npu"类型的输入数据Tensor
stream.synchronize() # synchronize
|