Open rkazants opened 8 months ago
Was wondering if I could take this towards the GSoC prerequisite.
Was wondering if I could take this towards the GSoC prerequisite.
Hi @dante-hl, ask this question in discussions in a thread dedicated to project idea. What project idea are you going to apply to?
Best regards, Roman
Oh, sorry about that - I was thinking of applying to one of the two: Project 10: Accelerating PyTorch Lightning and ComfyUI with torch.compile OpenVINO Project 11: PyTorch Model Optimizations with torch.compile OpenVINO Backend
Regardless, I'll make a discussion post specifically for this right away - sorry about the inconvenience!
.take
Thank you for looking into this issue! Please let us know if you have any questions or require any help.
@rkazants Hi, I have several questions.
2.The error traceback is as follows:
https://github.com/openvinotoolkit/openvino/blob/c3c409ee133ffb26bf8fd5570ef50a7c004839a4/src/bindings/python/src/pyopenvino/pyopenvino.cpp#L234
https://github.com/openvinotoolkit/openvino/blob/c3c409ee133ffb26bf8fd5570ef50a7c004839a4/src/bindings/python/src/pyopenvino/graph/ops/constant.cpp#L104-L114
https://github.com/openvinotoolkit/openvino/blob/c3c409ee133ffb26bf8fd5570ef50a7c004839a4/src/bindings/python/src/pyopenvino/core/common.hpp#L100-L105
https://github.com/openvinotoolkit/openvino/blob/c3c409ee133ffb26bf8fd5570ef50a7c004839a4/src/bindings/python/src/pyopenvino/core/common.cpp#L286-L301
https://github.com/openvinotoolkit/openvino/blob/c3c409ee133ffb26bf8fd5570ef50a7c004839a4/src/core/src/op/constant.cpp#L131-L140
The line std::uninitialized_copy_n(src_strings, num_elements, dst_strings);
ultimately caused the error.
3.As shown in the code snippet below, I have added some print statements and attempted different approaches:
Constant::Constant(const element::Type& type, const Shape& shape, const void* data) : Constant(false, type, shape) {
if (m_element_type == ov::element::string) {
auto num_elements = shape_size(m_shape); // 1
const std::string* src_strings = static_cast<const std::string*>(data);
const char* src_ptr = reinterpret_cast<const char*>(src_strings);
printf("src_string: %c|%c|%c|%c|%c\n", *src_ptr, *(src_ptr+1), *(src_ptr+2), *(src_ptr+3), *(src_ptr+4));
std::string* dst_strings = static_cast<std::string*>(get_data_ptr_nc());
char* dst_ptr = reinterpret_cast<char*>(dst_strings);
printf("dst_string: %c|%c|%c|%c|%c\n", *dst_ptr, *(dst_ptr+1), *(dst_ptr+2), *(dst_ptr+3), *(dst_ptr+4));
std::uninitialized_copy_n(src_strings, num_elements, dst_strings); // case 0: MemoryError: std::bad_alloc
//std::uninitialized_fill_n(dst_strings, num_elements, std::string()); // case 1: no core, reached copy ctor
//std::memcpy(get_data_ptr_nc(), data, mem_size()); // case 2: copied src_string to dst_string, reached copy ctor
*dst_ptr = 'x'; // case 3:
printf("modified dst_string: %c|%c|%c|%c|%c\n", *dst_ptr, *(dst_ptr+1), *(dst_ptr+2), *(dst_ptr+3), *(dst_ptr+4));
} else {
std::memcpy(get_data_ptr_nc(), data, mem_size());
}
}
Constant::Constant(const Constant& other)
: m_element_type{other.m_element_type},
m_shape{other.m_shape},
m_data{other.m_data},
m_all_elements_bitwise_identical{other.m_all_elements_bitwise_identical.load()},
m_all_elements_bitwise_identical_checked{other.m_all_elements_bitwise_identical_checked.load()} {
std::cout << "in copy ctor" << std::endl;
constructor_validate_and_infer_types();
}
case 0: No modification, error occurs
src_string: o||||p
dst_string: ;||Z||
Traceback (most recent call last):
File "/home/ubuntu/dev/openvino/build/bug.py", line 8, in <module>
str_const = ov.constant(np.array(['openvion'], dtype=str))
File "/home/ubuntu/.local/lib/python3.10/site-packages/openvino/runtime/utils/decorators.py", line 24, in wrapper
node = node_factory_function(*args, **kwargs)
File "/home/ubuntu/.local/lib/python3.10/site-packages/openvino/runtime/opset13/ops.py", line 337, in constant
return Constant(_value, shared_memory=_shared_memory)
MemoryError: std::bad_alloc
case 1: Initialization is done, exit normally.
src_string: o||||p
dst_string: ]||||
modified dst_string: ||D||
in copy ctor
case 2: Similar to the else branch, src_string copy is successful, but segfault occurs later
src_string: o||||p
dst_string: U|S|||*
modified dst_string: o||||p
in copy ctor
Segmentation fault (core dumped)
case 3: Direct modification first character of dst_string, segfault occurs
src_string: o||||p
dst_string: |||
modified dst_string: x|||
in copy ctor
Segmentation fault (core dumped)
Could you please provide me with some debugging tips or any other suggestions? Thank you.
cc @rkazants
@rkazants Hi, could you please provide me with some debugging tips or any other suggestions? :)
.take
Thank you for looking into this issue! Please let us know if you have any questions or require any help.
hey @amkarn258 any help needed?
Context
Currently, we receive segfault during creation of string type constant:
For reproducing, you can install latest nightly build:
What needs to be done?
Implement this feature
Example Pull Requests
No response
Resources
Contact points
Ticket
No response