From 0fc8e92fdf2c8ec5d3a137d2aa507fc9e23d244c Mon Sep 17 00:00:00 2001 From: caifubi Date: Tue, 30 Sep 2025 14:31:23 +0800 Subject: [PATCH] Check input pinmemory --- .../backend/common/device_address_utils.cc | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/mindspore/ccsrc/backend/common/device_address_utils.cc b/mindspore/ccsrc/backend/common/device_address_utils.cc index 41a2fae5afa..0d426f13b4e 100644 --- a/mindspore/ccsrc/backend/common/device_address_utils.cc +++ b/mindspore/ccsrc/backend/common/device_address_utils.cc @@ -900,6 +900,26 @@ void DeviceAddressUtils::LazyCopy(const tensor::TensorPtr &tensor, size_t stream MS_LOG(DEBUG) << "Copy success, and delete implicit address of tensor " << tensor->ToString(); } +std::string get_python_stack() { + py::gil_scoped_acquire acquire; + + try { + py::module tb = py::module::import("traceback"); + py::object format_stack = tb.attr("format_stack"); + py::list stack_list = format_stack(); + + std::ostringstream oss; + + oss << "Python Stack Trace:\n"; + for (auto& frame : stack_list) { + oss << py::str(frame).cast() << "\n"; + } + return oss.str(); + } catch (const std::exception& e) { + MS_LOG(EXCEPTION) << "Error getting Python stack: " << e.what(); + } +} + void DeviceAddressUtils::CreateInputTensorAddress(const DeviceContext *device_context, size_t stream_id, size_t index, const tensor::TensorPtr &tensor) { MS_EXCEPTION_IF_NULL(device_context); @@ -934,6 +954,14 @@ void DeviceAddressUtils::CreateInputTensorAddress(const DeviceContext *device_co MS_LOG(DEBUG) << "Input tensor device type is " << tensor_address->GetDeviceType() << " but current device context is " << device_context->GetDeviceType(); + // check input pin memory + if (tensor_address->GetDeviceType() == device::DeviceType::kCPU) { + if (tensor_address->allocator() == nullptr || !tensor_address->allocator()->IsPinned()) { + MS_LOG(ERROR) << "Input tensor " << tensor->ToString() << " is not pinned!"; + MS_LOG(ERROR) << "Get python stack:" << get_python_stack(); + } + } + auto tensor_size = LongToSize(tensor->DataNBytes()); const auto &format = GetFormatByTensorShape(device_context, tensor->shape()); auto device_address = device_context->device_res_manager_->CreateDeviceAddress( -- Gitee