4.1.10. 后端(Backend)
后端(Backend)表示模型推理使用的后摩计算平台,包括后摩芯片类型和运行环境(如后摩芯片或模拟器)。用户可以选择适合的后端推理模型,确保推理性能在后摩计算平台上得到最佳效果。
目前支持的后端设置为 Xh2HalBackend,用于Windows和Linux平台下,在一个或多个后摩M50硬件上推理模型,同时Linux平台下,支持模拟器上推理模型。该后端支持多线程及在多个后摩设备上推理。
4.1.10.1. 设置后端
每个模型必须与一个后端相关联。在加载模型时,TCIM会自动将模型与默认指定的后端相关联,默认使用 Xh2HalBackend 后端。用户可通过 TCIM_BACKEND 环境变量重新指定模型的后端,更改后模型相关联的weight manager、stream也会自动关联到最新的后端,模型的输入输出tensor也会自动保存在最新后端内存上。若用户通过 API 参数显式指定模型的后端,则优先使用 API 指定的后端,环境变量中的设置将被忽略。
多个模型可以共享一个后端,每个模型及其相关联的weight manager、stream以及模型输入输出tensor必须设置相同的后端,否则会返回 INVALID_ARGUMENT 错误。
4.1.10.1.1. Weight manager和stream
加载第一个模型时,如调用 Module::LoadModel 、Module::LoadFromFile (C++)或 tcim_lite.runtime.Module.load、tcim_lite.runtime.load(Python)时,TCIM会为weight manger隐式设置与模型相同的后端。
同理,首次调用 Module::SetStream(C++)或 tcim_lite.runtime.Module.set_stream(Python)时,TCIM会为stream隐式设置与模型相同的后端。
4.1.10.1.2. 模型输入输出tensor
可通过下面方式设置用于存放输入输出tensor的后端:
注意
Moudle 对象创建的tensor,以及从这些tensor通过 Clone 接口拷贝生成的新 tensor,TCIM会自动为其关联与模型相同的后端,在关联的后端上为其分配内存并存储,因此无需显示指定后端。Buffer 或 Tensor 类创建的后摩设备侧buffer和tensor(即非通过Module对象创建的),由于未与模型相关联,因此需要在创建时显示指定后端。模型加载前设置输入输出tensor:
通过
Tensor::CreateDeviceTensor接口为tensor在指定的后端上分配内存。用户需要设置与模型相同的后端。示例如下:auto tensor = tcim::Tensor:CreateDeviceTensor(tensorInfo, "Xh2HalBackend");
模型加载后设置输入输出tensor:
方法一:通过
Module::GetBackendName获取模型关联的后端,再调用Tensor::CreateDeviceTensor接口为tensor在指定的后端上分配内存。示例如下:
auto tensor = tcim::Tensor:CreateDeviceTensor(module->GetInputInfo(name), module->GetBackendName());
方法二:调用
Module::GetInput或Module::GetOutput获取模型输入输出tensor,并调用Tensor::Clone接口拷贝一个tensor,并存放在与模型关联的后端内存上。示例如下:
auto tensor = module.GetInput(name, HDPL).Clone()
4.1.10.2. 获取后端
可通过 GetSupportedBackend(C++)或 tcim_lite.runtime.get_supported_backend(Python) 获取当前模型可用的后端。模型加载后,可通过 Module::GetBackendName(C++)获取模型相关联的后端。