!19427 Fix offline dbg issue: multiple read_tensor output if dumping twice

Merge pull request !19427 from TinaMengtingZhang/multi_output_when_dump_twice
This commit is contained in:
i-robot 2021-07-06 03:15:12 +00:00 committed by Gitee
commit 7dffa5096c
1 changed files with 24 additions and 10 deletions

View File

@ -686,6 +686,16 @@ void DebugServices::SetPrefixToCheck(std::string *prefix_dump_file_name, std::st
*prefix_dump_file_name = dump_style_name_part; *prefix_dump_file_name = dump_style_name_part;
} }
std::string GetNewestFilePath(std::vector<std::string> file_list) {
// get file with the newest timestamp from the list.
std::string newest_file;
if (file_list.empty()) {
return newest_file;
}
std::sort(file_list.begin(), file_list.end());
return file_list.back();
}
void DebugServices::ReadDumpedTensor(std::vector<std::string> backend_name, std::vector<size_t> slot, void DebugServices::ReadDumpedTensor(std::vector<std::string> backend_name, std::vector<size_t> slot,
std::vector<unsigned int> device_id, std::vector<unsigned int> iteration, std::vector<unsigned int> device_id, std::vector<unsigned int> iteration,
std::vector<unsigned int> root_graph_id, const std::vector<bool> &is_output, std::vector<unsigned int> root_graph_id, const std::vector<bool> &is_output,
@ -713,9 +723,10 @@ void DebugServices::ReadDumpedTensor(std::vector<std::string> backend_name, std:
if (is_sync_mode) { if (is_sync_mode) {
DIR *d; DIR *d;
d = opendir(specific_dump_dir.c_str()); d = opendir(specific_dump_dir.c_str());
bool found_file = false;
std::vector<std::string> matched_paths;
if (d != nullptr) { if (d != nullptr) {
struct dirent *dir = nullptr; struct dirent *dir = nullptr;
bool found_file = false;
while ((dir = readdir(d)) != NULL) { while ((dir = readdir(d)) != NULL) {
if (dir->d_type == DT_REG) { if (dir->d_type == DT_REG) {
std::string file_name = dir->d_name; std::string file_name = dir->d_name;
@ -729,22 +740,25 @@ void DebugServices::ReadDumpedTensor(std::vector<std::string> backend_name, std:
continue; continue;
} }
shape.clear();
std::string full_path = specific_dump_dir + "/" + file_name; std::string full_path = specific_dump_dir + "/" + file_name;
ReadTensorFromNpy(full_path, &type_name, &data_size, &shape, &buffer); matched_paths.push_back(full_path);
AddToTensorData(backend_name[i], slot[i], iteration[i], device_id[i], root_graph_id[i], is_output[i],
data_size, type_name, shape, buffer, result_list);
found_file = true; found_file = true;
} }
} }
if (!found_file) { } else {
AddToTensorData(backend_name[i], slot[i], iteration[i], device_id[i], root_graph_id[i], is_output[i], 0, MS_LOG(INFO) << "Directory " << specific_dump_dir << " does not exist!";
type_name, shape, buffer, result_list);
} }
if (found_file) {
shape.clear();
std::string result_path = GetNewestFilePath(matched_paths);
ReadTensorFromNpy(result_path, &type_name, &data_size, &shape, &buffer);
AddToTensorData(backend_name[i], slot[i], iteration[i], device_id[i], root_graph_id[i], is_output[i], data_size,
type_name, shape, buffer, result_list);
} else { } else {
AddToTensorData(backend_name[i], slot[i], iteration[i], device_id[i], root_graph_id[i], is_output[i], 0, AddToTensorData(backend_name[i], slot[i], iteration[i], device_id[i], root_graph_id[i], is_output[i], 0,
type_name, shape, buffer, result_list); type_name, shape, buffer, result_list);
MS_LOG(INFO) << "directory does not exist!"; MS_LOG(INFO) << "Target tensor has not been found.";
} }
closedir(d); closedir(d);
} else { } else {