{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4.6 GPU计算" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.123349Z", "start_time": "2019-03-17T08:12:14.979997Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sun Mar 17 16:12:15 2019 \r\n", "+-----------------------------------------------------------------------------+\r\n", "| NVIDIA-SMI 390.48 Driver Version: 390.48 |\r\n", "|-------------------------------+----------------------+----------------------+\r\n", "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\r\n", "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\r\n", "|===============================+======================+======================|\r\n", "| 0 GeForce GTX 1050 Off | 00000000:01:00.0 Off | N/A |\r\n", "| 20% 40C P5 N/A / 75W | 1213MiB / 2000MiB | 23% Default |\r\n", "+-------------------------------+----------------------+----------------------+\r\n", " \r\n", "+-----------------------------------------------------------------------------+\r\n", "| Processes: GPU Memory |\r\n", "| GPU PID Type Process name Usage |\r\n", "|=============================================================================|\r\n", "| 0 1235 G /usr/lib/xorg/Xorg 434MiB |\r\n", "| 0 2095 G compiz 171MiB |\r\n", "| 0 2660 G /opt/teamviewer/tv_bin/TeamViewer 5MiB |\r\n", "| 0 4166 G /proc/self/exe 397MiB |\r\n", "| 0 13274 C /home/tss/anaconda3/bin/python 191MiB |\r\n", "+-----------------------------------------------------------------------------+\r\n" ] } ], "source": [ "!nvidia-smi # 对Linux/macOS用户有效" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.512222Z", "start_time": "2019-03-17T08:12:15.124792Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.4.1\n" ] } ], "source": [ "import torch\n", "from torch import nn\n", "\n", "print(torch.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.6.1 计算设备" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.539276Z", "start_time": "2019-03-17T08:12:15.513205Z" } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.is_available() # cuda是否可用" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.543795Z", "start_time": "2019-03-17T08:12:15.540338Z" } }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.device_count() # gpu数量" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.551451Z", "start_time": "2019-03-17T08:12:15.544964Z" } }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.current_device() # 当前设备索引, 从0开始" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.555020Z", "start_time": "2019-03-17T08:12:15.552387Z" } }, "outputs": [ { "data": { "text/plain": [ "'GeForce GTX 1050'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.get_device_name(0) # 返回gpu名字" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.6.2 `Tensor`的GPU计算" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:15.562186Z", "start_time": "2019-03-17T08:12:15.556621Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([1, 2, 3])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = torch.tensor([1, 2, 3])\n", "x" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.441336Z", "start_time": "2019-03-17T08:12:15.563813Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([1, 2, 3], device='cuda:0')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = x.cuda(0)\n", "x" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.449383Z", "start_time": "2019-03-17T08:12:17.445193Z" } }, "outputs": [ { "data": { "text/plain": [ "device(type='cuda', index=0)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.device" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.454548Z", "start_time": "2019-03-17T08:12:17.450268Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([1, 2, 3], device='cuda:0')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", "\n", "x = torch.tensor([1, 2, 3], device=device)\n", "# or\n", "x = torch.tensor([1, 2, 3]).to(device)\n", "x" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.467441Z", "start_time": "2019-03-17T08:12:17.455495Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([1, 4, 9], device='cuda:0')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = x**2\n", "y" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.470297Z", "start_time": "2019-03-17T08:12:17.468866Z" } }, "outputs": [], "source": [ "# z = y + x.cpu()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.6.3 模型的GPU计算" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.474763Z", "start_time": "2019-03-17T08:12:17.471348Z" } }, "outputs": [ { "data": { "text/plain": [ "device(type='cpu')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net = nn.Linear(3, 1)\n", "list(net.parameters())[0].device" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.478553Z", "start_time": "2019-03-17T08:12:17.475677Z" } }, "outputs": [ { "data": { "text/plain": [ "device(type='cuda', index=0)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net.cuda()\n", "list(net.parameters())[0].device" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2019-03-17T08:12:17.957448Z", "start_time": "2019-03-17T08:12:17.479843Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([[-0.5574],\n", " [-0.3792]], device='cuda:0', grad_fn=)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = torch.rand(2,3).cuda()\n", "net(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }