Проблема связывания MSVC в Tensorflow 1.5 contrib cmake C ++ при использовании SessionOptions GpuOptions - PullRequest
0 голосов
/ 24 декабря 2018

Использование MSVC 2015

Все шло отлично, пока я не представил несколько новых строк кода:

До:

static tensorflow::SessionOptions MakeSessionOptions() {
    tensorflow::SessionOptions options;
    tensorflow::ConfigProto* config = &options.config;
    auto* device_count = options.config.mutable_device_count();

    device_count->insert({ "CPU", 1 });
    device_count->insert({ "GPU", 1 });
    return options;
}

После

static tensorflow::SessionOptions MakeSessionOptions() {
    tensorflow::SessionOptions options;
    tensorflow::ConfigProto* config = &options.config;
    auto* device_count = options.config.mutable_device_count();

    auto* gpu_options = options.config.mutable_gpu_options();
    gpu_options->set_allow_growth(true);
    gpu_options->set_per_process_gpu_memory_fraction(0.8);

    device_count->insert({ "CPU", 1 });
    device_count->insert({ "GPU", 1 });
    return options;
}

Как только новый код вставлен, я получаю следующую ошибку связывания

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: static class tensorflow::GPUOptions * __cdecl google::protobuf::Arena::CreateMessage<class tensorflow::GPUOptions>(class google::protobuf::Arena *)" (??$CreateMessage@VGPUOptions@tensorflow@@@Arena@protobuf@google@@SAPEAVGPUOptions@tensorflow@@PEAV012@@Z) referenced in function "struct tensorflow::SessionOptions __cdecl MakeSessionOptions(void)" (?MakeSessionOptions@@YA?AUSessionOptions@tensorflow@@XZ)   rotobotmaskrcnn C:\msys64\home\hodgefamily\dev\openfx_gpu\Support\Plugins\RotobotMaskRCNN\rotobotmaskrcnn.obj   1   

Так кто-нибудь знает, что .lib файл содержит символы для google :: protobuf :: Arena.

Я в основном следовал инструкциям contrib cmake для Tensorflow r1.5

здесь:

https://github.com/tensorflow/tensorflow/blob/r1.5/tensorflow/contrib/cmake/README.md

Где скрываются эти символы?

1 Ответ

0 голосов
/ 24 декабря 2018

Кажется, что работает следующее

static tensorflow::SessionOptions MakeSessionOptions() {
    tensorflow::SessionOptions options; 
    tensorflow::ConfigProto* config = &options.config; 
    auto* device_count = options.config.mutable_device_count(); 
    tensorflow::GPUOptions gpu_options = options.config.gpu_options();
    gpu_options.set_allow_growth(true);
    gpu_options.set_per_process_gpu_memory_fraction(0.2); 
    device_count->insert({ "CPU", 1 });
    device_count->insert({ "GPU", 1 });
    return options; 
}

Но я не уверен, дает ли это желаемый эффект, поскольку я все еще могу OOM убить мою программу, это нормально?

Также яконечно, используя более 20% выделяемой памяти, когда это не OOM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...