!7267 dump kernel inputs/outputs based on the input_output field of the config file.

Merge pull request !7267 from AdelShafiei/kernels_dump
pull/7267/MERGE
mindspore-ci-bot 5 years ago committed by Gitee
commit 687e9126aa

@ -307,11 +307,6 @@ void DumpJsonParser::JudgeDumpEnabled() {
MS_EXCEPTION_IF_NULL(context); MS_EXCEPTION_IF_NULL(context);
if (context->get_param<std::string>(MS_CTX_DEVICE_TARGET) == kGPUDevice) { if (context->get_param<std::string>(MS_CTX_DEVICE_TARGET) == kGPUDevice) {
async_dump_enabled_ = false; async_dump_enabled_ = false;
// GPU not support dump kernel inputs
if (input_output_ != kDumpOutputOnly) {
MS_LOG(WARNING) << "Data dump only support dump kernel output when device target is GPU";
input_output_ = kDumpOutputOnly;
}
} }
if (context->get_param<std::string>(MS_CTX_DEVICE_TARGET) == kAscendDevice) { if (context->get_param<std::string>(MS_CTX_DEVICE_TARGET) == kAscendDevice) {

@ -102,11 +102,11 @@ void LoadKernelData(Debugger *debugger, const CNodePtr &kernel,
bool dump_enabled) { bool dump_enabled) {
// check if we should read the kernel data // check if we should read the kernel data
bool read_data = false; bool read_data = false;
auto &dump_json_parser = DumpJsonParser::GetInstance();
std::string kernel_name = kernel->fullname_with_scope(); std::string kernel_name = kernel->fullname_with_scope();
if (debugger) { if (debugger) {
debugger->SetCurNode(kernel_name); debugger->SetCurNode(kernel_name);
if (dump_enabled) { if (dump_enabled) {
auto &dump_json_parser = DumpJsonParser::GetInstance();
auto dump_mode = dump_json_parser.dump_mode(); auto dump_mode = dump_json_parser.dump_mode();
// dump the node if dump_mode is 0, which means all kernels, or if this kernel is in the kernels list // dump the node if dump_mode is 0, which means all kernels, or if this kernel is in the kernels list
if ((dump_mode == 0) || ((dump_mode == 1) && dump_json_parser.NeedDump(kernel_name))) { if ((dump_mode == 0) || ((dump_mode == 1) && dump_json_parser.NeedDump(kernel_name))) {
@ -120,49 +120,53 @@ void LoadKernelData(Debugger *debugger, const CNodePtr &kernel,
return; return;
} }
// get inputs if (dump_json_parser.InputNeedDump()) {
auto input_size = AnfAlgo::GetInputTensorNum(kernel); // get inputs
for (size_t j = 0; j < input_size; ++j) { auto input_size = AnfAlgo::GetInputTensorNum(kernel);
auto input_kernel = kernel->input(j + 1); for (size_t j = 0; j < input_size; ++j) {
std::string input_kernel_name = input_kernel->fullname_with_scope(); auto input_kernel = kernel->input(j + 1);
auto addr = kernel_inputs[j]; std::string input_kernel_name = input_kernel->fullname_with_scope();
auto type = AnfAlgo::GetOutputInferDataType(input_kernel, PARAMETER_OUTPUT_INDEX); auto addr = kernel_inputs[j];
auto format = kOpFormat_DEFAULT; auto type = AnfAlgo::GetOutputInferDataType(input_kernel, PARAMETER_OUTPUT_INDEX);
auto gpu_addr = std::make_unique<GPUDeviceAddress>(addr->addr, addr->size, format, type); auto format = kOpFormat_DEFAULT;
string input_tensor_name = input_kernel_name + ':' + "0"; auto gpu_addr = std::make_unique<GPUDeviceAddress>(addr->addr, addr->size, format, type);
ShapeVector int_shapes; string input_tensor_name = input_kernel_name + ':' + "0";
auto shape = AnfAlgo::GetOutputDeviceShape(input_kernel, PARAMETER_OUTPUT_INDEX); ShapeVector int_shapes;
(void)std::transform(shape.begin(), shape.end(), std::back_inserter(int_shapes), auto shape = AnfAlgo::GetOutputDeviceShape(input_kernel, PARAMETER_OUTPUT_INDEX);
[](size_t inner_item) { return SizeToInt(inner_item); }); (void)std::transform(shape.begin(), shape.end(), std::back_inserter(int_shapes),
auto ret = gpu_addr->LoadMemToHost(input_tensor_name, exec_order, format, int_shapes, type, 0, true); [](size_t inner_item) { return SizeToInt(inner_item); });
if (!ret) { auto ret = gpu_addr->LoadMemToHost(input_tensor_name, exec_order, format, int_shapes, type, 0, true);
MS_LOG(ERROR) << "LoadMemToHost:" if (!ret) {
<< ", tensor_name:" << input_tensor_name << ", host_format:" << format << ".!"; MS_LOG(ERROR) << "LoadMemToHost:"
<< ", tensor_name:" << input_tensor_name << ", host_format:" << format << ".!";
}
} }
} }
// get outputs if (dump_json_parser.OutputNeedDump()) {
auto output_size = AnfAlgo::GetOutputTensorNum(kernel); // get outputs
auto node_name = AnfAlgo::GetCNodeName(kernel); auto output_size = AnfAlgo::GetOutputTensorNum(kernel);
auto node_name = AnfAlgo::GetCNodeName(kernel);
std::vector<int> real_outputs;
real_outputs = CheckRealOutput(node_name, output_size); std::vector<int> real_outputs;
real_outputs = CheckRealOutput(node_name, output_size);
for (std::vector<int>::iterator it = real_outputs.begin(); it != real_outputs.end(); ++it) {
auto j = *it; for (std::vector<int>::iterator it = real_outputs.begin(); it != real_outputs.end(); ++it) {
auto addr = kernel_outputs[j]; auto j = *it;
auto type = AnfAlgo::GetOutputInferDataType(kernel, j); auto addr = kernel_outputs[j];
auto format = kOpFormat_DEFAULT; auto type = AnfAlgo::GetOutputInferDataType(kernel, j);
auto gpu_addr = std::make_unique<GPUDeviceAddress>(addr->addr, addr->size, format, type); auto format = kOpFormat_DEFAULT;
string tensor_name = kernel_name + ':' + std::to_string(j); auto gpu_addr = std::make_unique<GPUDeviceAddress>(addr->addr, addr->size, format, type);
ShapeVector int_shapes; string tensor_name = kernel_name + ':' + std::to_string(j);
auto shape = AnfAlgo::GetOutputDeviceShape(kernel, j); ShapeVector int_shapes;
(void)std::transform(shape.begin(), shape.end(), std::back_inserter(int_shapes), auto shape = AnfAlgo::GetOutputDeviceShape(kernel, j);
[](size_t inner_item) { return SizeToInt(inner_item); }); (void)std::transform(shape.begin(), shape.end(), std::back_inserter(int_shapes),
auto ret = gpu_addr->LoadMemToHost(tensor_name, exec_order, format, int_shapes, type, j, false); [](size_t inner_item) { return SizeToInt(inner_item); });
if (!ret) { auto ret = gpu_addr->LoadMemToHost(tensor_name, exec_order, format, int_shapes, type, j, false);
MS_LOG(ERROR) << "LoadMemToHost:" if (!ret) {
<< ", tensor_name:" << tensor_name << ", host_format:" << format << ".!"; MS_LOG(ERROR) << "LoadMemToHost:"
<< ", tensor_name:" << tensor_name << ", host_format:" << format << ".!";
}
} }
} }

Loading…
Cancel
Save