Neural networks can grow quite large in size. This has some implications for memory use; however, efficient structures such as sparse matrices mean that we don't generally run into problems fitting a neural network in memory.
The main issue when neural networks grow large is that they take a very long time to compute. In addition, some datasets and neural networks will need to run many epochs of training to get a good fit for the dataset. The neural network we will train in this chapter takes more than 8 minutes per epoch on my reasonably powerful computer, and we expect to run dozens, potentially hundreds, of epochs. Some larger networks can take hours to train a single epoch. To get the best performance, you may be considering thousands of training cycles.
The math obviously doesn't give a nice result here.
One positive is that neural networks are, at their core, full of floating point operations. There are also a large number of operations that can be performed in parallel, as neural network training is composed of mainly matrix operations. These factors mean that computing on GPUs is an attractive option to speed up this training.
GPUs were originally designed to render graphics for display. These graphics are represented using matrices and mathematical equations on those matrices, which are then converted into the pixels that we see on our screen. This process involves lots of computation in parallel. While modern CPUs may have a number of cores (your computer may have 2, 4, or even 16—or more!), GPUs have thousands of small cores designed specifically for graphics.
A CPU is therefore better for sequential tasks, as the cores tend to be individually faster and tasks such as accessing the computer's memory are more efficient. It is also, honestly, easier to just let the CPU do the heavy lifting. Almost every machine learning library defaults to using the CPU, and there is extra work involved before you can use the GPU for computing. The benefits though, can be quite significant.
GPUs are therefore better suited for tasks in which there are lots of small operations on numbers that can be performed at the same time. Many machine learning tasks are like this, lending themselves to efficiency improvements through the use of a GPU.
Getting your code to run on a GPU can be a frustrating experience. It depends greatly on what type of GPU you have, how it is configured, your operating system, and whether you are prepared to make some low-level changes to your computer.
There are three main avenues to take:
If you aren't able to afford the running costs of a virtual machine, I recommend that you look into the first avenue, with your current system. You may also be able to pick up a good secondhand GPU from family or a friend who constantly updates their computer (gamer friends are great for this!).
We are going to take the third avenue in this chapter and create a virtual machine based on Markus Beissinger's base system. This will run on an Amazon's EC2 service. There are many other Web services to use, and the procedure will be slightly different for each. In this section, I'll outline the procedure for Amazon.
If you want to use your own computer and have it configured to run GPU-enabled computation, feel free to skip this section.
You can get more information on how this was set up, which may also provide information on setting it up on another computer, at http://markus.com/install-theano-on-aws/.
To start with, go to the AWS console at:
https://console.aws.amazon.com/console/home?region=us-east-1
Log in with your Amazon account. If you don't have one, you will be prompted to create one, which you will need to do in order to continue.
Next, go to the EC2 service console at: https://console.aws.amazon.com/ec2/v2/home?region=us-east-1.
Click on Launch Instance and choose N. California as your location in the drop-down menu at the top-right.
Click on Community AMIs and search for ami-b141a2f5
, which is the machine created by Markus Beissinger. Then, click on Select. On the next screen, choose g2.2xlarge as the machine type and click on Review and Launch. On the next screen, click on Launch.
At this point, you will be charged, so please remember to shut down your machines when you are done with them. You can go to the EC2 service, select the machine, and stop it. You won't be charged for machines that are not running.
You'll be prompted with some information on how to connect to your instance. If you haven't used AWS before, you will probably need to create a new key pair to securely connect to your instance. In this case, give your key pair a name, download the pem
file, and store it in a safe place—if lost, you will not be able to connect to your instance again!
Click on Connect for information on using the pem
file to connect to your instance. The most likely scenario is that you will use ssh
with the following command:
ssh -i <certificante_name>.pem ubuntu@<server_ip_address>