This guide is a part of a series of articles that show you how to save a Keras model and use it for predictions in a Visual Studio C program.
The guide will walk you through using Tensorflow’s C API (libtensorflow) in Visual Studio. You will get the C binaries (dlls), then create a .lib file. We’ll setup a new Visual Studio Project to use these dlls, and then call the TF_Version() function to make sure everything is running fine.
The caveat of the method here is that you’re limited to the CUDA version the binaries were compiled with. The version of the libtensorflow files might change over time, so I will attempt to specify what version we’re using here.
I’m working with VS 2017 and libtensorflow 1.13.1
Lets get libtensorflow
Head to the libtensorflow page and get the zip file for Windows. Here are the two options as of 6/6/2019:
|Windows CPU only||https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-windows-x86_64-1.13.1.zip|
|Windows GPU only||https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.13.1.zip|
I prefer the GPU version, and that’s the one I will get. I’m working with version 1.13.1-GPU.
Extract and setup environment variables
Extract the libtensorflow files to a folder you like. I prefer short and simple folder paths, so I put my files in D:\libtensorflow\
I prefer setting up environment variables so that any project can find these files. This is optional, but if you’re following this guide, I recommend you stick to these steps.
Find the Environment Variables settings on Windows (type environment in the start menu):
Click the Environment Variables button
Add a new entry called TF_DIR to the user variables. We will use TF_DIR later in the Visual Studio Project.
Hit okay and save these new settings.
Generate a .lib file
While the tensorflow files come with a .dll, they’re missing a .lib, which must be generated. You can download my .lib here. We can do this using visual studio tools.
There are a few guides on how to do this.
I prefer a variant of the VLC guide which should let us do this in a few quick commands.
First find VS tools under: Start->Programs->Microsoft Visual Studio->Tools
Alternatively, start Visual Studio 2017, and launch the Visual Studio Command Prompt under Tools->Visual Studio Command Prompt
Here run the following commands. The filenames are important. Not using tensorflow.def as the filename can cause issues. Change the path of your libtensorflow folder if needed.
Create your visual studio project
Now that you have the environment and .lib files ready, we can create our visual studio project (or use a project that you want to add libtensorflow to).
We’ll start with a C++ project, and use C code instead. There are other ways to create a C project, but I’ll move ahead with this for simplicity, the steps remain the same.
Set your project to 64 bit.
This is needed for libtensorflow. It runs only on 64 bit projects.
Find the project properties under Project->Properties->Configuration Manager. Set the project to x64 if you already have that option, otherwise click new and create a new solution platform, then set that to x64.
Add the dll to the project.
Some of this is sourced from the openCV guide on building a visual studio project.
Setting the environment variables (above) makes this a little easier.
Under Project->Properties, first go to the C++ groups General entry and under the “Additional Include Directories” add the path to your libtensorflow directory. We created an environment variable, so we can use $(TF_DIR). If you don’t have “C/C++” group, you should add any .c/.cpp file to the project.
You can either click the edit button, or just add $(TF_DIR) directly. To separate entries if you already have them, use the semicolon ;
Add the lib to the project
Next go to the Linker ‣ General and under the “Additional Library Directories” add the libs directory: $(TF_DIR)
Then you need to specify the libraries in which the linker should look into. To do this go to the Linker ‣ Input and under the “Additional Dependencies” entry add the name of all modules which you want to use: tensorflow.lib
Run the program
Add the following simple code to your program:
At this stage, hit F5 to build and run the program. If it builds and runs, you’re good to move on to the next step: Running predictions using tensorflow in C.
If it doesn’t build
You need to check that Visual Studio can find the .lib and the .h files (above), or that your code is correct.
IF IT BUILDS BUT CAN’T FIND DLLs
You’ll have to figure out which DLLs are missing:
Make sure you set up the environment variable correctly, and that tensorflow.dll is in that folder.
CUDART / CUBLAS / CUDNN
This implies that you downloaded the GPU version of tensorflow, and the version of CUDNN or CUDA doesn’t match the version the tensorflow dll was compiled for.
For cudart / cublas you will need to install the correct version of CUDA based on the name of the missing file. For example cudart64_80.dll implies that version 8.0 of CUDA is missing. You can find this in the NVIDIA download archive.
For cudnn, follow similar steps to get the correct version from the CUDNN archive.
Note, both the above steps require sign up (free) at NVIDIA’s website.