Created
August 25, 2018 21:06
-
-
Save danielpcox/36b5f234de24b57c65bac86108d3b076 to your computer and use it in GitHub Desktop.
TensorFlow with GPU
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "TensorFlow with GPU", | |
"version": "0.3.2", | |
"provenance": [], | |
"collapsed_sections": [], | |
"toc_visible": true, | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 2", | |
"name": "python2" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"[View in Colaboratory](https://colab.research.google.com/gist/danielpcox/36b5f234de24b57c65bac86108d3b076/tensorflow-with-gpu.ipynb)" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "BlmQIFSLZDdc", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Confirm TensorFlow can see the GPU\n", | |
"\n", | |
"Simply select \"GPU\" in the Accelerator drop-down in Notebook Settings (either through the Edit menu or the command palette at cmd/ctrl-shift-P)." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "3IEVK-KFxi5Z", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "0940e8b1-5283-4b2d-e3e6-8853f3deb804" | |
}, | |
"cell_type": "code", | |
"source": [ | |
"import tensorflow as tf\n", | |
"device_name = tf.test.gpu_device_name()\n", | |
"if device_name != '/device:GPU:0':\n", | |
" raise SystemError('GPU device not found')\n", | |
"print('Found GPU at: {}'.format(device_name))" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Found GPU at: /device:GPU:0\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "QXRh0DPiZRyG", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Observe TensorFlow speedup on GPU relative to CPU\n", | |
"\n", | |
"This example constructs a typical convolutional neural network layer over a\n", | |
"random image and manually places the resulting ops on either the CPU or the GPU\n", | |
"to compare execution speed." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "t9ALbbpmY9rm", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 119 | |
}, | |
"outputId": "c5ee74e3-f88b-4660-dcba-354d09fa5659" | |
}, | |
"cell_type": "code", | |
"source": [ | |
"import tensorflow as tf\n", | |
"import timeit\n", | |
"\n", | |
"# See https://www.tensorflow.org/tutorials/using_gpu#allowing_gpu_memory_growth\n", | |
"config = tf.ConfigProto()\n", | |
"config.gpu_options.allow_growth = True\n", | |
"\n", | |
"with tf.device('/cpu:0'):\n", | |
" random_image_cpu = tf.random_normal((100, 100, 100, 3))\n", | |
" net_cpu = tf.layers.conv2d(random_image_cpu, 32, 7)\n", | |
" net_cpu = tf.reduce_sum(net_cpu)\n", | |
"\n", | |
"with tf.device('/gpu:0'):\n", | |
" random_image_gpu = tf.random_normal((100, 100, 100, 3))\n", | |
" net_gpu = tf.layers.conv2d(random_image_gpu, 32, 7)\n", | |
" net_gpu = tf.reduce_sum(net_gpu)\n", | |
"\n", | |
"sess = tf.Session(config=config)\n", | |
"\n", | |
"# Test execution once to detect errors early.\n", | |
"try:\n", | |
" sess.run(tf.global_variables_initializer())\n", | |
"except tf.errors.InvalidArgumentError:\n", | |
" print(\n", | |
" '\\n\\nThis error most likely means that this notebook is not '\n", | |
" 'configured to use a GPU. Change this in Notebook Settings via the '\n", | |
" 'command palette (cmd/ctrl-shift-P) or the Edit menu.\\n\\n')\n", | |
" raise\n", | |
"\n", | |
"def cpu():\n", | |
" sess.run(net_cpu)\n", | |
" \n", | |
"def gpu():\n", | |
" sess.run(net_gpu)\n", | |
" \n", | |
"# Runs the op several times.\n", | |
"print('Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images '\n", | |
" '(batch x height x width x channel). Sum of ten runs.')\n", | |
"print('CPU (s):')\n", | |
"cpu_time = timeit.timeit('cpu()', number=10, setup=\"from __main__ import cpu\")\n", | |
"print(cpu_time)\n", | |
"print('GPU (s):')\n", | |
"gpu_time = timeit.timeit('gpu()', number=10, setup=\"from __main__ import gpu\")\n", | |
"print(gpu_time)\n", | |
"print('GPU speedup over CPU: {}x'.format(int(cpu_time/gpu_time)))\n", | |
"\n", | |
"sess.close()" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images (batch x height x width x channel). Sum of ten runs.\n", | |
"CPU (s):\n", | |
"8.350230318000058\n", | |
"GPU (s):\n", | |
"0.1842791589999706\n", | |
"GPU speedup over CPU: 45x\n" | |
], | |
"name": "stdout" | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment