Setting up Ubuntu 16.04 + CUDA + GPU for deep learning with Python

Welcome back! This is the fourth post in the deep learning development environment configuration series which accompany my new book, Deep Learning for Computer Vision with Python.

Today, we will configure Ubuntu + NVIDIA GPU + CUDA with everything you need to be successful when training your own deep learning networks on your GPU.

Links to related tutorials can be found here:

If you have an NVIDIA CUDA compatible GPU, you can use this tutorial to configure your deep learning development to train and execute neural networks on your optimized GPU hardware.

Let’s go ahead and get started!

Setting up Ubuntu 16.04 + CUDA + GPU for deep learning with Python

If you’ve reached this point, you are likely serious about deep learning and want to train your neural networks with a GPU.

Graphics Processing Units are great at deep learning for their parallel processing architecture — in fact, these days there are many GPUs built specicically for deep learning — they are put to use outside the domain of computer gaming.

NVIDIA is the market leader in deep learning hardware, and quite frankly the primary option I recommend if you are getting in this space. It is worth getting familiar with their lineup of products (hardware and software) so you know what you’re paying for if you’re using an instance in the cloud or building a machine yourself. Be sure to check out this developer page.

It is common to share high end GPU machines at universities and companies. Alternatively, you may build one, buy one (as I did), or rent one in the cloud (as I still do today).

If you are just doing a couple experiments then using a cloud service provider such as Amazon, Google, or FloydHub for a time-based usage charge is the way to go.

Longer term if you are working on deep learning experiments daily, then it would be wise to have one on hand for cost savings purposes (assuming you’re willing to keep the hardware and software updated regularly).

Note: For those utilizing AWS’s EC2, I recommend you select the p2.xlarge, p2.8xlarge, or p2.16xlarge machines for compatibility with these instructions (depending on your use case scenario and budget). The older instances, g2.2xlarge and g2.8xlarge are not compatible with the version of CUDA and cuDNN in this tutorial. I also recommend that you have about 32GB of space on your OS drive/partition. 16GB didn’t cut it for me on my EC2 instance.

It is important to point out that you don’t need access to an expensive GPU machine to get started with Deep Learning. Most modern laptop CPUs will do just fine with the small experiments presented in the early chapters in my book. As I say, “fundamentals before funds” — meaning, get acclimated with modern deep learning fundamentals and concepts before you bite off more than you can chew with expensive hardware and cloud bills. My book will allow you to do just that.

How hard is it to configure Ubuntu with GPU support for deep learning?

You’ll soon find out below that configuring a GPU machine isn’t a cakewalk. In fact there are quite a few steps and potential for things to go sour. That’s why I have built a custom Amazon Machine Instance (AMI) pre-configured and pre-installed for the community to accompany my book.

I detailed how to get it loaded into your AWS account and how to boot it up in this previous post.

Using the AMI is by far the fastest way to get started with deep learning on a GPU. Even if you do have a GPU, it’s worth experimenting in the Amazon EC2 cloud so you can tear down an instance (if you make a mistake) and then immediately boot up a new, fresh one.

Configuring an environment on your own is directly related to your:

  1. Experience with Linux
  2. Attention to detail
  3. Patience.

First, you must be very comfortable with the command line.

Many of the steps below have commands that you can simply copy and paste into your terminal; however it is important that you read the output, note any errors, try to resolve them prior to moving on to the next step.

You must pay particular attention to the order of the instructions in this tutorial, and furthermore pay attention to the commands themselves.

I actually do recommend copying and pasting to make sure you don’t mess up a command (in one case below backticks versus quotes could get you stuck).

If you’re up for the challenge, then I’ll be right there with you getting your environment ready. In fact I encourage you to leave comments so that the PyImageSearch community can offer you assistance. Before you leave a comment be sure to review the post and comments to make sure you didn’t leave a step out.

Without further ado, let’s get our hands dirty and walk through the configuration steps.

Step #0: Turn off X server/X window system

Before we get started I need to point out an important prerequisite. You need to perform one of the following prior to following the instructions below:

  1. SSH into your GPU instance (with X server off/disabled).
  2. Work directly on your GPU machine without your X server running (the X server, also known as X11, is your graphical user interface on the desktop). I suggest you try one of the methods outlined on this thread.

There are a few methods to accomplish this, some easy and others a bit more involved.

The first method is a bit of a hack, but it works:

  1. Turn off your machine.
  2. Unplug your monitor.
  3. Reboot.
  4. SSH into your machine from a separate system.
  5. Perform the install instructions.

This approach works great and is by far the easiest method. By unplugging your monitor X server will not automatically start. From there you can SSH into your machine from a separate computer and follow the instructions outline in this post.

The second method assumes you have already booted the machine you want to configure for deep learning:

  1. Close all running applications.
  2. Press ctrl + alt + F2 .
  3. Login with your username and password.
  4. Stop X server by executing sudo service lightdm stop .
  5. Perform the install instructions.

Please note that you’ll need a separate computer next to you to read the instructions or execute the commands. Alternatively you could use a text-based web browser.

Step #1: Install Ubuntu system dependencies

Now that we’re ready, let’s get our Ubuntu OS up to date:

Then, let’s install some necessary development tools, image/video I/O, GUI operations and various other packages:

Next, let’s install both Python 2.7 and Python 3 header files so that we can compile OpenCV with Python bindings:

We also need to prepare our system to swap out the default drivers with NVIDIA CUDA drivers:

That’s it for Step #1, so let’s continue on.

Step #2: Install CUDA Toolkit

The CUDA Toolkit installation step requires attention to detail for it to go smoothly.

First disable the Nouveau kernel driver by creating a new file:

Feel free to use your favorite terminal text editor such as vim  or emacs  instead of nano .

Add the following lines and then save and exit:

Your session should look like the following (if you are using nano):

Figure 1: Editing the blacklist-nouveau.conf file with the nano text editor.

Next let’s update the initial RAM filesystem and reboot the machine:

You will lose your SSH connection at the reboot step, so wait patiently and then reconnect before moving on.

You will want to download the CUDA Toolkit v8.0 via the NVIDIA CUDA Toolkit website:

Once you’re on the download page, select Linux => x86_64 => Ubuntu => 16.04 => runfile (local) .

Here is a screenshot of the download page:

Figure 2: The CUDA Toolkit download page.

From there, download the -run  file which should have the filename cuda_8.0.61_375.26_linux-run  or similar. To do this, simply right-click to copy the download link and use wget  on your remote GPU box:

Important: At the time of this writing there is a minor discrepancy on the NVIDIA website. As shown in Figure 2 under the “Base Installer” download, the filename (as is written) ends with .run . The actual downloadable file ends with -run . You should be good to go in copying my wget  + URL command for now unless NVIDIA changes the filename again.

Note: You will need to click the “<=>” button in the code block toolbar above to expand the code block. This will enable you to copy the full URL to the -run  file.

From there, unpack the -run  file:

The last step in the block above can take 30-60 seconds depending on the speed of your machine.

Now it is time to install the NVIDIA kernel driver:

During this process, accept the license and follow prompts on the screen.

Figure 3: Accepting the NVIDIA End User License Agreement.

From there, add the NVIDIA loadable kernel module (LKM) to the Linux kernel:

Install the CUDA Toolkit and examples:

Again, accepting the licenses and following the default prompts. You may have to press ‘space’ to scroll through the license agreement and then enter “accept” as I’ve done int the image above. When it asks you for installation paths, just press <enter>  to accept the defaults.

Now that the NVIDIA CUDA driver and tools are installed, you need to update your ~/.bashrc  file to include CUDA Toolkit (I suggest using terminal text editors such as vim , emacs , or  nano ):

Now, reload your ~/.bashrc  ( source ~/.bashrc ) and then test the CUDA Toolkit installation by compiling the deviceQuery  example program and running it:

Note: Calling source on ~/.bashrc only has to be done once for our current shell session. Anytime we open up a new terminal, the contents of ~/.bashrc  will be automatically executed (including our updates).

At this point if you have a Result = PASS , then congratulations because you are ready to move on to the next step.

If you do not see this result, I suggest you repeat Step #2 and examine the output of each and every command carefully to ensure there wasn’t an error during the install.

Step #3: Install cuDNN (CUDA Deep Learning Neural Network library)

For this step, you will need to Create a free account with NVIDIA and download cuDNN.

For this tutorial I used cuDNN v6.0 for Linux which is what TensorFlow requires.

Due to NVIDIA’s required authentication to access the download, you may not be able to use wget  on your remote machine for the download.

Instead, download the file to your local machine and then (on your local machine) use scp  (Secure Copy) while replacing <username> and <password>  with appropriate values to update the file to your remote instance (again, assuming you’re accessing your machine via SSH):

Next, untar the file and then copy the resulting files into lib64  and  include  respectively, using the -P  switch to preserve sym-links:

That’s it for Step #3 — there isn’t much that can go wrong here, so you should be ready to proceed.

Step #4: Create your Python virtual environment

In this section we will get a Python virtual environment configured on your system.

Installing pip

The first step is to install pip , a Python package manager:

Installing virtualenv and virtualenvwrapper

Using pip , we can install any package in the Python Package Index quite easily including virtualenv and virtualenvwrapper. As you know, I’m a fan of Python virtual environments and I encourage you to use them for deep learning as well.

In case you have multiple projects on your machine, using virtual environments will allow you to isolate them and install different versions of packages. In short, using both virtualenv  and virtualenvwrapper  allow you to solve the “Project X depends on version 1.x, but Project Y needs 4.x dilemma.

The folks over at RealPython may be able to convince you if I haven’t, so give this excellent blog post on RealPython a read.

Again, let me reiterate that it’s standard practice in the Python community to be leveraging virtual environments of some sort, so I suggest you do the same:

Once we have  virtualenv  and  virtualenvwrapper  installed, we need to update our ~/.bashrc  file to include the following lines at the bottom of the file:

After editing our ~/.bashrc  file, we need to reload the changes:

Now that we have installed  virtualenv  and virtualenvwrapper, the next step is to actually create the Python virtual environment — we do this using the  mkvirtualenv  command.

Creating the dl4cv virtual environment

In past install tutorials, I’ve presented the choice of Python 2.7 or Python 3. At this point in the Python 3 development cycle, I consider it stable and the right choice. You may elect to use Python 2.7 if you have specific compatibility requirements, but for the purposes of my book we will use Python 3.

With that said, for the following command, ensure you set the -p  flag to python3 .

You can name this virtual environment whatever you like (and create as many Python virtual environments as you want), but for the time being, I would suggest sticking with the dl4cv  name as that is what I’ll be using throughout the rest of this tutorial.

Verifying that you are in the “dl4cv” virtual environment

If you ever reboot your Ubuntu system; log out and log back in; or open up a new terminal, you’ll need to use the workon  command to re-access your dl4cv  virtual environment. An example of the workon  command follows:

To validate that you are in the dl4cv  virtual environment, simply examine your command line — if you see the text (dl4cv)  preceding your prompt, then you are in the dl4cv  virtual environment:

Figure 4: Inside the dl4cv virtual environment.

Otherwise if you do not see the dl4cv  text, then you are not in the dl4cv  virtual environment:

Figure 5: Outside the dl4cv virtual environment. Execute workon dl4cv to activate the environment.

Installing NumPy

The final step before we compile OpenCV is to install NumPy, a Python package used for numerical processing. To install NumPy, ensure you are in the dl4cv  virtual environment (otherwise NumPy will be installed into the system version of Python rather than the  dl4cv  environment).

From there execute the following command:

Once NumPy is installed in your virtual environment, we can move on to compile and install OpenCV.

Step #5: Compile and Install OpenCV

First you’ll need to download opencv and opencv_contrib into your home directory. For this install guide, we’ll be using OpenCV 3.3:

Then, unzip both files:

Running CMake

In this step we create a build directory and then run CMake:

Note: I turned CUDA off as it can lead to compile errors on some machines. The CUDA optimizations would internally be used for C++ functions so it doesn’t make much of a difference with Python + OpenCV. Again, the primary use of CUDA in this blog post is to optimize our deep learning libraries, not OpenCV itself.

For CMake, it is important that your flags match mine for compatibility. Also, make sure that your opencv_contrib  version is the exact same as the opencv  version you downloaded (in this case version 3.3.0 ).

Before we move on to the actual compilation step, make sure you examine the output of CMake.

Start by scrolling to the section titled Python 3 .

Make sure that your Python 3 section looks like the figure below:

Figure 6: Verifying that CMake has properly set up the compile to use the correct Python 3 Interpreter and version of NumPy. Both Python 3 and NumPy should be pulled from the dl4cv virtual environment.

Ensure that the Interpreter points to our python3.5  binary located in the dl4cv  virtual environment while numpy  points to our NumPy install.

In either case if you do not see the dl4cv  virtual environment in these variables’ paths, then it’s almost certainly because you are NOT in the dl4cv  virtual environment prior to running CMake!

If this is the case, access the dl4cv  virtual environment using workon dl4cv  and re-run the command outlined above.

Compiling OpenCV

Now we are now ready to compile OpenCV :

Note: If you run into compilation errors, you may run the command make clean  and then just compile without the flag: make . You can adjust the number of processor cores you use the compile OpenCV via the -j  switch (in the example above, I’m compiling OpenCV with four cores).

From there, all you need to do is to install OpenCV 3.3:

You can also delete your opencv  and opencv_contrib  directories to free up space on your system; however, I highly recommend that you wait until the end of this tutorial and ensured OpenCV has been correctly installed before you delete these files (otherwise you’ll have to download them again).

Symbolic linking OpenCV to your virtual environment

To sym-link our OpenCV bindings into the dl4cv  virtual environment, issue the following commands

Note: Make sure you click “<=>” button in the toolbar above to expand the code block. From there, ensure you copy and paste the ln  command correctly, otherwise you’ll create an invalid sym-link and Python will not be able to find your OpenCV bindings.

Your .so  file may be some variant of what is shown above, so be sure to use the appropriate file.

Testing your OpenCV 3.3 install

Now that we’ve got OpenCV 3.3 installed and linked, let’s do a quick sanity test to see if things work:

Make sure you are in the dl4cv  virtual environment before firing up Python. You can accomplish this by running workon dl4cv .

When you print the OpenCV version in your Python shell it should match the version of OpenCV that you installed (in our case OpenCV 3.3.0 ).

When your compilation is 100% complete you should see output that looks similar to the following:

Figure 7: OpenCV 3.3.0 compilation is complete.

That’s it — assuming you didn’t have an import error, then you’re ready to go on to Step #6 where we will install Keras.

Step #6: Install Keras

For this step, make sure that you are in the dl4cv  environment by issuing the workon dl4cv  command.

From there we can install some required computer vision, image processing, and machine learning libraries:

Next, install Tensorflow (GPU version):

You can verify that TensorFlow has been installed by importing it in your Python shell:

Now we’re ready to install Keras:

Again, you can verify Keras has been installed via your Python shell:

You should see that Keras has been imported with no errors and the TensorFlow backend is being used.

Before you move on to Step #7, take a second to familiarize yourself with the ~/.keras/keras.json  file:

Ensure that image_data_format  is set to channels_last  and backend  is tensorflow .

Congratulations! You are now ready to begin your Deep learning for Computer Vision with Python journey (Starter Bundle and Practitioner Bundle readers can safely skip Step #7).

Step #7 Install mxnet (ImageNet Bundle only)

This step is only required for readers who purchased a copy of the ImageNet Bundle of Deep Learning for Computer Vision with Python. You may also choose to use these instructions if you want to configure mxnet on your system.

Either way, let’s first clone the mxnet repository and checkout branch 0.11.0 :

We can them compile mxnet:

Followed by sym-linking to our dl4cv environment.

Finally, you may fire up Python in your environment to test that the installation was successful:

Note: Do not delete the mxnet  directory in your home folder. Not only do our Python bindings live there, but we also need the files in ~/mxnet/bin  when creating serialized image datasets.

Cheers! You are done and deserve a cold beer while you read Deep Learning for Computer Vision with Python (ImageNet bundle).

Note: To avoid significant cloud expenses (or power bills if your box is beneath your desk), I’d recommend that you power off your machine until you’re ready to use it.


Today we learned how to set up an Ubuntu + CUDA + GPU machine with the tools needed to be successful when training your own deep learning networks.

If you encountered any issues along the way, I highly encourage you to check that you didn’t skip any steps. If you are still stuck, please leave a comment below.

I want to reiterate that you don’t need a fancy, expensive GPU machine to get started on your deep learning for computer vision journey. Your CPU can handle the introductory examples in the book. To help you get started, I have provided an install tutorial here for Ubuntu CPU users. If you prefer the easy, pre-configured route, my book comes with a VirtualBox virtual machine ready to go.

I hope this tutorial helps you on your deep learning journey!

If you want to study deep learning in-depth, be sure to take a look at my new book, Deep Learning for Computer Vision with Python.

To be notified when future blog posts and tutorials are published on the PyImageSearch blog, be sure to enter your email address in the form below!

, , , , , , , ,

45 Responses to Setting up Ubuntu 16.04 + CUDA + GPU for deep learning with Python

  1. Arash R September 27, 2017 at 12:06 pm #

    I think you have to install NVIDIA driver again after installing Cuda. Or is it not required with this setup? (To be clear I followed the official NVIDIA guide and I think I remember that cuda-driver didn’t work or something so I didn’t install that but nonetheless I had to re-install my regular nvidia driver afterwards.)

    • Adrian Rosebrock September 28, 2017 at 9:13 am #

      I always install the kernel driver first, then the CUDA toolkit. This has always worked for me in the past.

  2. Andrew September 27, 2017 at 2:13 pm #

    Thank you Adrian. Great tutorial. Since I don’t have the $129k for the DGX-1 I will be doing this on my NIVIDA Jetson TX2 🙂

    • Adrian Rosebrock September 28, 2017 at 9:07 am #

      The TX2 is a lot of fun, you’ll be able to execute the majority of the examples in Deep Learning for Computer Vision with Python on it.

  3. Samuel September 27, 2017 at 5:12 pm #

    Hi Adrian,

    I am having trouble with Step 2 when I try to run sudo ./

    This is the error that I get:

    ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at

    ERROR: Installation has failed. Please see the file ‘/var/log/nvidia-installer.log’ for details. You may find suggestions on fixing installation problems in the READM available on the Linux driver download page at

    And here is the file /var/log/nvidia-installer.log

    nvidia-installer log file ‘/var/log/nvidia-installer.log’
    creation time: Wed Sep 27 12:28:34 2017
    installer version: 375.26

    PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

    nvidia-installer command line:

    Unable to load: nvidia-installer ncurses v6 user interface

    Using: nvidia-installer ncurses user interface
    -> Detected 8 CPUs online; setting concurrency level to 8.
    -> The file ‘/tmp/.X0-lock’ exists and appears to contain the process ID ‘1016’ of a runnning X server.
    ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at
    ERROR: Installation has failed. Please see the file ‘/var/log/nvidia-installer.log’ for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at

    I tried googling the error, but no luck so far. I did a rm /tmp/.X0-lock and then I didn’t get the “X server error”, but the installation still will not complete.

    Any idea how to fix this?


    • Adrian Rosebrock September 28, 2017 at 9:06 am #

      It sounds like you may have forgotten to disable the default Nouveau driver and reboot your machine. Please see the first few commands of “Step #2” for more information.

      If you have disabled the driver, try booting directly to the terminal rather than trying to login to the GUI.

    • Adrian Rosebrock September 29, 2017 at 6:30 am #

      Hi Samuel — I updated the blog post to include “Step #0: Turn off X server/X window system”. This will help you resolve the error you are receiving.

      Please give it a look!

  4. Alexander Sack September 29, 2017 at 11:06 am #

    I think most would be better off doing a “network” based install which would mean adding the official nvidia ppa repos to so they can just do:

    apt-get install cuda

    And that’s that. Note that very recently Nvidia has released full support for cuda-9.0 on 17.04 with all the trimmings (so far works flawlessly with Keras/TF etc.).

    Also, you don’t *have* to disable X11. X11 can co-exist.

    Finally, I highly recommend Anaconda for machine learning projects:

    For those of you who aren’t familiar with Anaconda think of it as virtualenv+pip all rolled into one. OpenCV, tensflow-gpu, keras, scikit, etc. have all been ported over to conda. Anaconda also applies to OSX as well.

    Anyway, food for thought.

    • Adrian Rosebrock October 2, 2017 at 10:15 am #

      1. You can use apt-get to install the NVIDIA drivers, but I can’t recommend it. You can easily place yourself in a situation when you run an upgrade and install non-compatible kernel drivers.

      2. When installing the NVIDIA drivers via the command line I needed to turn off X11. Perhaps I’m missing something?

      3. Regarding Anaconda, please see my reply to “Shannon”.

  5. Azam September 29, 2017 at 12:52 pm #

    Thanks. I will try this to setup my machine for deep learning. I have Nvidia 1060. Would be enough for deep learning?

    • Adrian Rosebrock October 2, 2017 at 10:13 am #

      Is it the 1060 6GB or 3GB model? You’ll be able to run the majority of the examples inside the Starter Bundle and Practitioner Bundle of Deep Learning for Computer Vision with Python using 3GB. However, for deeper networks on larger datasets I would suggest at least 6GB, but ideally 8GB+.

  6. Hubert de Lassus September 29, 2017 at 1:44 pm #

    On a fresh Ubuntu 16.04.3 installation, Nvidia driver version 375.66 is built in Ubuntu. By default the nouveau driver is installed but the Nvidia driver is available.
    In graphic mode going to settings->Software & updates -> Additional Drivers select NVIDIA driver, click apply changes and reboot. This installs the Nvidia driver.

    After this I was able to install Cuda 8.0 following the steps mentioned in this blog.
    Attempting to install Nvidia driver as described by Adrian failed in my case even though the Xserver was disabled. So I suggest to use ubuntu settings->Software->Additional drivers to install the driver.

  7. Hubert de Lassus September 29, 2017 at 2:00 pm #

    Adrian, could you please clarify:

    the blog states “For this tutorial I used cuDNN v6.0 for Linux which is what TensorFlow requires.”

    But then the blog uses cudnn-8.0:

    scp -i EC2KeyPair.pem ~/Downloads/cudnn-8.0-linux-x64-v6.0.tgz \

    Is cudnn-8.0 the version you advise?

    • Adrian Rosebrock October 2, 2017 at 10:10 am #

      I saw your other comment, but I wanted to reply for other readers:

      You need CUDA v8 for TensorFlow and cuDNN v6.

  8. Hubert de Lassus September 29, 2017 at 2:22 pm #

    Ok my mistake, it is clear that cudnn to use is 8-0 version v6 for Tensorflow.

  9. john September 29, 2017 at 5:08 pm #

    hi Adrian.

    I have a question regarding ubuntu 16.04 and loading the Nvidia CUDA driver.
    it seems to me that the instructions for loading the nvidia driver are for ubuntu 14, and below, which is the exact method I had to always use before to get the nvidia driver loaded and use CUDA

    With Ubuntu 16.04 , all you need to do is go to Software & Updates -> Additional Drivers, and the Nvidia binary driver shows up , just load it , and thats it , no need to turn off X or go into the command line, turn off nouveau , lightdm stop/start etc . CUDA and all its examples once compiled work fine with no issue. At least thats what I did months ago and have had no issues using the GPU and CUDA. After a reboot all the latest / new Nvidia drivers as released also show up tin Additiona Drivers, to load if you want to . The driver that initially shows up is 381.22 but after that later drivers up to 384.90 show up to easily load.

    Not sure if Im missing something loading the Nvidia driver with this easy method

    • Adrian Rosebrock September 30, 2017 at 9:42 am #

      Thanks for sharing, John! I normally use a terminal when using Ubuntu, a rarely use the GUI. I haven’t tried this GUI-based method, but it seems like it can work. I just want to note to other readers that if they are using EC2 they’ll need to use the pure terminal-based option.

  10. Vic Jackson September 29, 2017 at 5:41 pm #


    Thanks for this fantastic guide.

    I just have one question regarding the “Note: To avoid significant cloud expenses (or power bills if your box is beneath your desk), I’d recommend that you power off your machine until you’re ready to use it.”

    Is there something about these modules/drivers/packages that would required a higher than normal idle power consumption?

    Just curious!

    • Adrian Rosebrock September 30, 2017 at 9:40 am #

      GPUs can require considerable more energy than your CPU. That note is really for readers using the EC2 cloud where the machine is billed on hourly usage. It’s just a quick reminder to shut down your instance so you don’t get charged hourly. The idle power consumption in your home/apartment is not that much, just be aware that the GPU requires more energy when it’s under full load.

  11. Michael Alex September 29, 2017 at 10:16 pm #

    Hi Adrian,

    If we already have successfully configured Ubuntu for Python with a CPU and compiled OpenCV, etc., must you do the full GPU configuration from scratch? Is it possible to “add on” the GPU capability in a different virtual environment? Thanks very much.

    • Adrian Rosebrock September 30, 2017 at 9:39 am #

      If you have already configured your dev environment for the CPU, simply install the GPU drivers, then install tensorflow-gpu into your “dl4cv” Python virtual environment.

  12. jerry September 30, 2017 at 8:00 am #

    Hi Adrian

    The latest Nvidia Cuda is Cuda 9 not Cuda 8 and Cuda driver 384.81
    should we be using Cuda 9 ?

    • Adrian Rosebrock September 30, 2017 at 9:37 am #

      You should be using CUDA 8. TenorFlow (currently) requires CUDA 8.

  13. Susie September 30, 2017 at 4:46 pm #

    Hi Adrian

    I been following your posts and your books for a while, thank you for the great post as always!

    I purchased a gaming desktop with GTX 1080 ti today I am planning to install a second GPU and I wonder if the above processes changes with the a second GPU… I found little info on doing SLI with ubuntu 16.04 and since you have 4 GPUs on your workstation I wonder if you can provide some insights.

    • Adrian Rosebrock October 2, 2017 at 9:49 am #

      Nothing will change with multiple GPUs. I would suggest ensuring all your GPUs are the same model and then install CUDA + cuDNN. Run nvidia-smi and you should see that all your GPUs are recognized.

  14. vahid October 1, 2017 at 6:32 am #

    thanks adrian very use full

  15. Alan October 1, 2017 at 11:03 am #

    Hi Adrian,
    I have an NVIDIA 730GT video card, I have checked on the NVIDIA site and it appears to have a compute value of 3.5, however before I follow this excellent GPU support document is there any chance of you reviewing the card for GPU compatibility please (a bit cheeky of me I know)

  16. Lavanya Seetharaman October 1, 2017 at 10:34 pm #

    Hi Adrian ,

    Excellent blog which I never seen before
    Whether I can try this same steps in virtual box?

    • Adrian Rosebrock October 2, 2017 at 9:37 am #

      VirtualBox, by definition, cannot access external peripherals such as your GPU. You would need to use NVIDIA’s Docker image or configure your own native Ubuntu + GPU system.

  17. lightman October 5, 2017 at 7:49 am #

    Excellent blog.
    Should I install cuBLAS in Figure 2?

    • Adrian Rosebrock October 6, 2017 at 5:03 pm #

      You want to if you can, but it is not required.

  18. Abderrazak IAZZI October 6, 2017 at 9:22 am #

    Hello all,
    I have a problem with installation of nvidia driver. I have nvidia geforce gtx 960m for notbook computer. When i follow the above prompts especially when i use the command “$ modprobe nvidia “. I got this error : ” ERROR: could not insert ‘nvidia’ : required key not avaiable ” . i tried many tutorials but they are not clear as what you presented here. Although,i can’t install nvidia driver following the above prompts. Could you help me please ?

    • Adrian Rosebrock October 6, 2017 at 4:48 pm #

      Hi Abderrazak — that is indeed a strange error, although I’m not sure what the exact error is. I did a quick Google search and it sounds like it might be related to UEFI and Secure Boot. Do you have them both enabled? If so, please refer to this thread.

      • Abderrazak IAZZI October 8, 2017 at 4:55 pm #

        Thank you so much Adrian, that was a key of my error. Now, i installed nvidia driver and cud 8.0 cudnn5.1. As i want to use a caffe framework as Segnet, i got many errors when i use $ make all -j8 to compile caffe using cudnn and gpu.

        • Adrian Rosebrock October 9, 2017 at 12:20 pm #

          Fantastic, congrats on resolving the issue Abderrazak! As far as SegNet goes, I have not tried to install it or use it before so I’m not sure what the exact issue is.

  19. Jackson Cornelius October 9, 2017 at 12:34 pm #

    This worked perfectly for my system. Thanks a lot!

    • Adrian Rosebrock October 9, 2017 at 12:41 pm #

      Fantastic, I’m glad to hear it Jackson! Congrats on getting your Ubuntu + GPU configured for deep learning 🙂

  20. Sudeep V October 9, 2017 at 7:51 pm #

    Hello Adrian,
    Thanks alot for detailed steps for installation. By far this is the best post I have seen for any installation.
    I am able to successful in Setting up Ubuntu 16.04 + CUDA + GPU for deep learning with Python.

    One thing I noted is that as said in the earlier replies, once I installed Nvidia binary driver using Software & Updates -> Additional Drivers, in Ubunto GUI , we can directly go to step for CUDA Installation.

    Really appreciate your effort in helping us.

    • Adrian Rosebrock October 13, 2017 at 9:15 am #

      Congrats on configuring your Ubuntu system + GPU for deep learning Sudeep, great job!

      Thank you for the note on the software and updates panel. I created this tutorial with the assumption that people are not using the GUI or are SSH’d into a cloud instance where the GUI is not available. If you are using a desktop this seems like it would work as well.

  21. Arun October 10, 2017 at 7:53 am #

    Hello Adrian, I am using Google cloud compute engine with a Tesla K80. I followed the steps you have mentioned. I am facing issue while running
    sudo ./
    It stops with error.
    ERROR: An error occurred while performing the step: “Building kernel modules”. See /var/log/nvidia-installer.log for details.
    I looked into the log couldn’t figure out the issue. Please find the log file here

    • Adrian Rosebrock October 13, 2017 at 9:07 am #

      Hi Arun — I have not tried this method with the Google compute engine, only with my desktop and Amazon EC2. Unfortunately I’m not sure what the error is.

  22. Richard Everts October 11, 2017 at 12:10 am #

    Awesome as always Adrian. Works like a charm. Glad to see the CUDA 8.0/cuDNN 5.1/Tensorflow bug was fixed. Thanks!

    • Adrian Rosebrock October 13, 2017 at 8:59 am #

      Fantastic, I’m glad to hear it Richard! Congrats on getting your Ubuntu + GPU system configured for deep learning 🙂

  23. Arun October 12, 2017 at 9:56 am #

    Nvidia has released the new version cuda 9.0. Installing the latest version fixed the issue(mentioned in my previous comment) for me. Thanks Adrian for the great post. Adds lot of value for the deep learning community.

    • Adrian Rosebrock October 13, 2017 at 8:40 am #

      Hi Arun — congrats on resolving the issue. I haven’t tested TensorFlow with CUDA 9 yet. The TensorFlow docs (currently) state to use CUDA 8 so if you run into any issues along the way, that might be the reason.

Leave a Reply