Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How about gpu configuration #3

Closed
GallonDeng opened this issue Jun 13, 2019 · 3 comments
Closed

How about gpu configuration #3

GallonDeng opened this issue Jun 13, 2019 · 3 comments

Comments

@GallonDeng
Copy link

nice work! I am wondering whether the model will use all available gpus and all memory by default. If it does, how to set it? thanks

@serizba
Copy link
Owner

serizba commented Jun 19, 2019

Well, it is not easy to set the configuration using the C API. As far as I known the only way to set the options is something like this:

First, in Python you create a configproto and serialize its content:

import tensorflow as tf  
myoptions = tf.GPUOptions(allow_growth=True,visible_device_list='2')
config = tf.ConfigProto(gpu_options=myoptions)

serialized = config.SerializeToString()
print(list(map(hex, serialized)))

The code above prints something like (0x01, 0x02, 0x03...). After that you can write the printed hex string in your C++ code, (in Model.cpp, in the constructor):

// Create the session.
// Model.cpp#L15
TF_SessionOptions* sess_opts = TF_NewSessionOptions();

uint8_t config[5] ={0x01, 0x02, 0x03, 0x04, 0x05};  // <- New line
TF_SetConfig(session_opts,(void*)config,7,status); // <- New line

// Model.cpp#L17
this->session = TF_NewSession(this->graph, sess_opts, this->status);

Now the model will run with your configuration. Hope it works!

@barisdemiray
Copy link

I'd say it's seamless to this project, we'd just need to pick a TensorFlow built with GPU support and set CUDA_VISIBLE_DEVICES environment variable. Even though there probably must be a programmatic way of doing this too.

@GallonDeng
Copy link
Author

yes, just set CUDA_VISIBLE_DEVICES environment variable in the shell or system. It will work. Thanks

abertoldi added a commit to kirasystems/cppflow that referenced this issue Jun 18, 2021
The ASan report is as follows:

AddressSanitizer:DEADLYSIGNAL
=================================================================
==74==ERROR: AddressSanitizer: SEGV on unknown address 0x6030bf3b722e (pc 0x7fc277c6ae10 bp 0x7ffe22b2c9a0 sp 0x7ffe22b2c158 T0)
==74==The signal is caused by a READ memory access.
    #0 0x7fc277c6ae10  /build/glibc-eX1tMB/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:365
    #1 0x49d947 in __asan_memcpy (/home/docker/kiravision/test/clang-memtest+0x49d947)
    serizba#2 0x50e00a in TF_TString_ResizeUninitialized(TF_TString*, unsigned long) /opt/tensorflow/include/tensorflow/core/platform/ctstring_internal.h:278:7
    serizba#3 0x50ba34 in TF_TString_Copy(TF_TString*, char const*, unsigned long) /opt/tensorflow/include/tensorflow/core/platform/ctstring_internal.h:389:17
    serizba#4 0x50bbac in Model::restore(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/docker/kiravision/cppflow/src/Model.cpp:107:5
    serizba#5 0x4e98e2 in KiraVision::LearnedModel::LearnedModel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/docker/kiravision/src/LearnedModel.cpp:12:13
    serizba#6 0x4e28ed in KiraVision::TableDetector::TableDetector(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, KiraVision::LogLevel const&) /home/docker/kiravision/src/TableDetector.cpp:13:24
    serizba#7 0x4d058a in main /home/docker/kiravision/test/memtest.cpp:16:31
    serizba#8 0x7fc277bd30b2 in __libc_start_main /build/glibc-eX1tMB/glibc-2.31/csu/../csu/libc-start.c:308:16
    serizba#9 0x425ccd in _start (/home/docker/kiravision/test/clang-memtest+0x425ccd)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /build/glibc-eX1tMB/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:365
==74==ABORTING

The problem was incorrect initalization of a `TF_TString`. The existing
code initialized it as `new TF_Tstring` (which is not really any kind of
initalization, just memory allocation). `TF_TString`'s have to be
initialized with `TF_TString_Initialize` before they an be used. The
fact that the offending code is using a `unique_ptr` to ensure deletion
of the `TF_TString` makes it all a little clunky.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants