Title: 深度学习GPU环境配置及建模(Python) · Issue #66 · aialgorithm/Blog · GitHub
Open Graph Title: 深度学习GPU环境配置及建模(Python) · Issue #66 · aialgorithm/Blog
X Title: 深度学习GPU环境配置及建模(Python) · Issue #66 · aialgorithm/Blog
Description: 对于深度学习开发者,操作系统的选择、到深度学习相关依赖包安装、环境配置上,这些步骤看似简单基础,但其实也经常是有不少麻烦的。本文简要梳理了,从环境配置到深度学习建模的完整的流程,有所帮助的话,可以文末点个赞。 一、操作系统的选择 1.1 Linux 如果是深度学习的重度用户,首选的操作系统是Linux,虽然操作门槛搞一些(如命令行操作),但linux的开发环境很友好,可以减少很多依赖包不兼容的问题,可以大大提高效率。linux的发行版很多,比较常用的的可以安装个包含图形...
Open Graph Description: 对于深度学习开发者,操作系统的选择、到深度学习相关依赖包安装、环境配置上,这些步骤看似简单基础,但其实也经常是有不少麻烦的。本文简要梳理了,从环境配置到深度学习建模的完整的流程,有所帮助的话,可以文末点个赞。 一、操作系统的选择 1.1 Linux 如果是深度学习的重度用户,首选的操作系统是Linux,虽然操作门槛搞一些(如命令行操作),但linux的开发环境很友好,可以减少很多依赖包不兼容...
X Description: 对于深度学习开发者,操作系统的选择、到深度学习相关依赖包安装、环境配置上,这些步骤看似简单基础,但其实也经常是有不少麻烦的。本文简要梳理了,从环境配置到深度学习建模的完整的流程,有所帮助的话,可以文末点个赞。 一、操作系统的选择 1.1 Linux 如果是深度学习的重度用户,首选的操作系统是Linux,虽然操作门槛搞一些(如命令行操作),但linux的开发环境很友好,可以减少很多依赖包不兼容...
Opengraph URL: https://github.com/aialgorithm/Blog/issues/66
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"深度学习GPU环境配置及建模(Python)","articleBody":"对于深度学习开发者,操作系统的选择、到深度学习相关依赖包安装、环境配置上,这些步骤看似简单基础,但其实也经常是有不少麻烦的。本文简要梳理了,从环境配置到深度学习建模的完整的流程,有所帮助的话,可以文末点个赞。\r\n\r\n## 一、操作系统的选择\r\n\r\n### 1.1 Linux\r\n\r\n 如果是深度学习的重度用户,首选的操作系统是Linux,虽然操作门槛搞一些(如命令行操作),但linux的开发环境很友好,可以减少很多依赖包不兼容的问题,可以大大提高效率。linux的发行版很多,比较常用的的可以安装个包含图形界面及命令行的Ubuntu。\r\n\r\n\r\n\r\n### 1.2、 Windows\r\n\r\n 如果要兼顾生活及开发,就笔记本上面看看视频、写写博客、跑跑代码(像我平时就是ctrl c ,再跑跑代码的),windows就够了,操作简单而且上面的各种依赖包也很齐全。(下文主要以Windows系统为例展开介绍,其他系统也是大同小异,有不清楚地方可以找相应教程)。\r\n\r\n### 1.3、 双系统的方案\r\n\r\n如果即想要linux做开发、windows兼顾生活,可以借助安装双系统或者虚拟机,那么有几种选择:\r\n\r\n1、 安装双系统\r\n\r\n硬件资源够的话,安装双个系统是比较直接的,能够比较纯粹地使用windows或者Linux,但是最麻烦的点在于切换间比较麻烦,需要开关机地切换。\r\n\r\n2、 虚拟机\r\n\r\n通过在虚拟机(如vmware)上面再安装另一个操作系统,这样打开虚拟机就可以很方便使用另一个系统了,但是缺点是虚拟机的硬件资源消耗也很高,而且有性能问题及各种bug。按我之前的尝试,这里更推荐linux作为主系统+虚拟机的windows,能更好发挥出Linux开发的效能。\r\n\r\n\r\n\r\n\r\n\r\n3、 WSL\r\n\r\n适用于 Linux 的 Windows 子系统 (WSL)是微软官方发布的应用,通俗来说它也就是Windows上面启用的Linux子系统。wsl安装非常简单,运行WSL的开销比运行一个虚拟机低很多,在wsl上面还可以配置cuda调用其GPU资源(但貌似配置复杂),用于日常学习是完全够用了。缺点是不如原linux来的纯粹,用于高强度开发的话,性能会弱些,还容易卡各种bug。\r\n\r\nwsl安装简单,在windows功能上打勾启用wsl功能后,\r\n\r\nWIN+R运行cmd,一句命令行`wsl --install`就可以安装好ubuntu系统了,安装好后 wsl就可以使用Linux系统了(命令行cli版),\r\n\r\n\r\n\r\n两个系统之间数据可以自由访问,如访问D盘数据只要 `cd /mnt/d`,双系统使用上是非常方便的。\r\n\r\n可以参考WSL官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/install\r\n\r\n\r\n\r\n## 二、Python环境配置\r\n搞定操作系统(比如Windows),接下来配置个Python环境。实现PYthon环境配置及依赖包管理最方便的就是安装个 anaconda,官网下载https://www.anaconda.com/download,\r\n\r\n如果网速慢,也可以到清华镜像上面快速下载一个https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/\r\n\r\n安装也很简单,一路确认就安装好了。这里可以勾选Add path 就可以配置好环境变量,也可以再勾选anaconda作为默认Python版本,后面比较省心。\r\n\r\n\r\n\r\n通过点击jupyter notebook就可以进入python开发环境了,\r\n\r\n\r\n\r\n如果平时以小项目、数据分析、调调模型为主,jupyter notebook作为开发工具是够的。如果平时任务以大型项目居多,还可以再安装个IDE编辑器如vscode、pycharm。\r\n\r\n## 三、安装相关的库\r\n这里有两种方案,如果只有CPU资源直接选择【3.1 CPU环境配置】就可以很快开始深度学习建模。如有GPU资源,可以选择【3.2 GPU环境配置】开始繁琐的安装配置及建模。\r\n\r\n### 3.1 CPU环境配置\r\n安装相关的python依赖包,主要的如数据处理库pandas、机器学习库scikit-learn、深度学习库tensorflow、pytorch等等。简单安装几个必要的包,后面运行项目代码,有发现缺什么包再补什么。\r\n\r\n可以点击prompt打开命令行安装,\r\n\r\n\r\npython安装依赖也很简单,比如`pip install tensorflow` 就可以安装好tensorflow神经网络库。\r\n\r\n安装好相关的依赖包后,基本上就可以开始在CPU运算环境的深度学习、机器学习的代码开发了。\r\n\r\n### 3.2 GPU环境配置\r\n在大数据量、大模型炼丹的场景下,深度学习会耗费大量的算力及时间,这时可以用GPU来加速神经网络模型训练(唠叨一句,购置gpu首选大显存的!)。\r\n\r\n如果硬件配置有nvdia的GPU的话(使用 AMD 的 GPU 也可行但很麻烦,相关信息可参阅:https://rocmdocs.amd.com/en/latest/),接下来就可以开始GPU开发环境cuda的配置,这个流程稍微繁琐容易出错,请耐心配置。\r\n\r\n\r\n- 安装cuda\r\n\r\n通过桌面鼠标右键进入nvdia的控制面板,看到显卡类型,可以看到我的游戏本有配了个独立显卡950M(算力仅仅为5,虽然这是GPU中的渣渣..但也比纯cpu香啊!),\r\n\r\n\r\n\r\n\r\n依据显卡算力我们可以知道对应支持的cuda版本号范围,像算力为5对应的cuda版本号就可以选择cuda-10.1\r\n\r\n(好像也可以在nvdia控制面板的系统信息看到相关cuda的版本号)\r\n\r\n\r\n\r\n相应的,我们到官网下载相应版本的cuda,https://developer.nvidia.com/cuda-toolkit-archive\r\n\r\n然后,运行cuda安装包,我直接精简安装,一路确认就安装好了。\r\n\r\n\r\n\r\n\r\n\r\n\r\nwin+R 输入cmd,进入命令行界面:\r\n\r\n输入以下指令:`nvcc -V` 能够正常显示版本号,cuda就安装好了\r\n```\r\n# $ nvcc -V\r\n# nvcc: NVIDIA (R) Cuda compiler driver\r\n# Copyright (c) 2005-2019 NVIDIA Corporation\r\n# Built on Fri_Feb__8_19:08:26_Pacific_Standard_Time_2019\r\n# Cuda compilation tools, release 10.1, V10.1.105\r\n\r\n```\r\n- 安装cudnn\r\ncuda安装完了还需要下载个cudnn(即 CUDA Deep Neural Network 软件库),这是一个 GPU 加速的深度神经网络基元库。不同版本的cuda 对应着不同的cudnn版本(我这边cuda10.1对应cudnn7.5的),详情可以从英伟达官网找到具体信息https://developer.nvidia.com/rdp/cudnn-archive ,下载cudnn还需要去英伟达官网注册。\r\n\r\ncudnn解压以后将各个子文件夹\r\n\r\n\r\n拷贝到cuda安装目录下,到此,cuda整个环境就配置好了。\r\n\r\n\r\n\r\n- Pytorch\r\n\r\n最后,安装Python相关的(支持GPU)的深度学习库,本文建模用的是pytorch(tensorflow、keras等其他库也是可以的)\r\n\r\n可以到官网下载相应的pytorch版本,https://pytorch.org/get-started/locally/\r\n\r\n官网会很友好地给出相应的所选的cuda版本对应的安装命令,\r\n\r\n比如我这边cuda10.1对应的命令如下,在anaconda命令行输入就可以安装相关依赖包。\r\n\r\n`conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.1 -c pytorch` \r\n\r\n\r\n安装以后,可以检查GPU的可用性 ,通过调用torch.cuda.is_available()。如果结果为 True,则表明系统已正确安装Nvidia驱动。进入jupyter notebook运行:\r\n`import torch torch.cuda.is_available()`\r\n\r\n\r\n\r\n## 四、 深度学习模型训练\r\n\r\n本节的示例是调用GPU或CPU版的pytorch搭建深度学习图像分类模型(CNN),并对比下性能差异。详细的深度学习建模过程可以参考之前文章 [《一文搞定深度学习建模》](http://mp.weixin.qq.com/s?__biz=MzI4MDE1NjExMQ==\u0026mid=2247486048\u0026idx=1\u0026sn=bbbe904159a9f9a65940057992a2ce8b\u0026scene=19#wechat_redirect)\r\n \r\n```\r\n%%time\r\nimport torch,torchvision\r\nimport torch.nn as nn\r\nimport torchvision.transforms as transforms\r\n ## 项目源码可以到https://github.com/aialgorithm/Blog\r\n#定义CNN神经网络模型\r\nclass CNNCifar(nn.Module):\r\n def __init__(self):\r\n super(CNNCifar,self).__init__()\r\n self.feature = nn.Sequential(\r\n nn.Conv2d(3,64,3,padding=2), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2,2),\r\n nn.Conv2d(64,128,3,padding=2), nn.BatchNorm2d(128), nn.ReLU(), nn.MaxPool2d(2,2),\r\n nn.Conv2d(128,256,3,padding=1),nn.BatchNorm2d(256), nn.ReLU(), nn.MaxPool2d(2,2),\r\n nn.Conv2d(256,512,3,padding=1),nn.BatchNorm2d(512), nn.ReLU(), nn.MaxPool2d(2,2)\r\n )\r\n self.classifier=nn.Sequential(\r\n nn.Flatten(),\r\n nn.Linear(2048, 4096),nn.ReLU(),nn.Dropout(0.5),\r\n nn.Linear(4096,4096), nn.ReLU(),nn.Dropout(0.5),\r\n nn.Linear(4096,100)\r\n )\r\n \r\n def forward(self, x):\r\n \r\n x = self.feature(x)\r\n output = self.classifier(x)\r\n return output\r\n \r\nnet = CNNCifar()\r\nprint(net)\r\n \r\n#加载数据集\r\napply_transform = transforms.Compose([\r\n transforms.ToTensor(),\r\n transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),\r\n ])\r\n \r\ntrain_dataset = torchvision.datasets.CIFAR10(root='../data/cifar100', train=True, download=True,transform=apply_transform)\r\ntest_dataset = torchvision.datasets.CIFAR10(root='../data/cifar100', train=False, download=True,transform=apply_transform)\r\n \r\ntrain_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, num_workers=2,\r\n pin_memory=True,shuffle=True)\r\ntest_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, num_workers=2,\r\n pin_memory=True,shuffle=False)\r\n \r\n#定义损失函数和优化器\r\ncriterion = torch.nn.CrossEntropyLoss()\r\noptimizer = torch.optim.Adam(net.parameters(), lr=0.001,weight_decay=5e-4)\r\n \r\n#获取设备:如果有gpu就使用gpu,否则使用cpu\r\ndevice = torch.device('cuda'if torch.cuda.is_available() else 'cpu')\r\nnet = net.to(device) # 简单通过.to(device), 数据或模型就可以转移至GPU\r\n \r\n#训练模型\r\nprint('training on: ',device)\r\ndef test(): \r\n net.eval()\r\n acc = 0.0\r\n sum = 0.0\r\n loss_sum = 0\r\n for batch, (data, target) in enumerate(test_loader):\r\n data, target = data.to(device), target.to(device)\r\n output = net(data)\r\n loss = criterion(output, target)\r\n acc+=torch.sum(torch.argmax(output,dim=1)==target).item()\r\n sum+=len(target)\r\n loss_sum+=loss.item()\r\n print('test acc: %.2f%%, loss: %.4f'%(100*acc/sum, loss_sum/(batch+1)))\r\n\r\ndef train(): \r\n net.train()\r\n acc = 0.0\r\n sum = 0.0\r\n loss_sum = 0\r\n for batch, (data, target) in enumerate(train_loader):\r\n data, target = data.to(device), target.to(device)\r\n optimizer.zero_grad()\r\n output = net(data)\r\n loss = criterion(output, target)\r\n loss.backward()\r\n optimizer.step()\r\n\r\n acc +=torch.sum(torch.argmax(output,dim=1)==target).item()\r\n sum+=len(target)\r\n loss_sum+=loss.item()\r\n\r\n if batch%200==0:\r\n print('\\tbatch: %d, loss: %.4f'%(batch, loss.item()))\r\n print('train acc: %.2f%%, loss: %.4f'%(100*acc/sum, loss_sum/(batch+1)))\r\n\r\n \r\n## 开始训练模型\r\nfor epoch in range(5):\r\n print('epoch: %d'%epoch)\r\n train()\r\n test()\r\n```\r\n可以通过`device = torch.device('cuda'if torch.cuda.is_available() else 'cpu')`分别修改相应的运算设备gpu或者cpu, 对比使用cpu、gpu资源占用的变化:\r\n\r\n\r\n同一超参数下模型预测效果上面来看两者差不多,但运行时间CPU是GPU的5倍左右,GPU对深度学习训练的效率提升还是很明显的!\r\n```\r\n###################\r\ntraining on: cpu\r\nepoch: 0\r\n\tbatch: 0, loss: 4.5887\r\n\tbatch: 200, loss: 1.5186\r\n\tbatch: 400, loss: 1.3614\r\n\tbatch: 600, loss: 1.2306\r\ntrain acc: 42.96%, loss: 1.5834\r\ntest acc: 54.61%, loss: 1.2249\r\nWall time: 18min 27s\r\n###################\r\ntraining on: cuda\r\nepoch: 0\r\n\tbatch: 0, loss: 4.6759\r\n\tbatch: 200, loss: 1.5816\r\n\tbatch: 400, loss: 1.6414\r\n\tbatch: 600, loss: 1.2504\r\ntrain acc: 43.72%, loss: 1.5647\r\ntest acc: 53.02%, loss: 1.2784\r\nWall time: 3min 22s\r\n\r\n```\r\n\r\n---\r\n","author":{"url":"https://github.com/aialgorithm","@type":"Person","name":"aialgorithm"},"datePublished":"2023-05-05T14:22:03.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/66/Blog/issues/66"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:21f40294-258f-2835-09c9-58f77b80d237 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8632:E8423:147A110:1B5B11D:696ADC02 |
| html-safe-nonce | b9b0eb79c108bc38a1d02db97132b17510180b8fc180690abab553eb80fc0972 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NjMyOkU4NDIzOjE0N0ExMTA6MUI1QjExRDo2OTZBREMwMiIsInZpc2l0b3JfaWQiOiIxOTIwNzc5MDk5Nzc2NTIyMjYiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b76f30e2ac5b94d2af4d4fbecf24e17ac972762c16625a0952f0ead4522e49d2 |
| hovercard-subject-tag | issue:1697709929 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/aialgorithm/Blog/66/issue_layout |
| twitter:image | https://opengraph.githubassets.com/12c8ba2c81d6f4443e87455b1781fc8b8c787cf4fce952ad74c4cc677e2501e4/aialgorithm/Blog/issues/66 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/12c8ba2c81d6f4443e87455b1781fc8b8c787cf4fce952ad74c4cc677e2501e4/aialgorithm/Blog/issues/66 |
| og:image:alt | 对于深度学习开发者,操作系统的选择、到深度学习相关依赖包安装、环境配置上,这些步骤看似简单基础,但其实也经常是有不少麻烦的。本文简要梳理了,从环境配置到深度学习建模的完整的流程,有所帮助的话,可以文末点个赞。 一、操作系统的选择 1.1 Linux 如果是深度学习的重度用户,首选的操作系统是Linux,虽然操作门槛搞一些(如命令行操作),但linux的开发环境很友好,可以减少很多依赖包不兼容... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | aialgorithm |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| turbo-cache-control | no-preview |
| go-import | github.com/aialgorithm/Blog git https://github.com/aialgorithm/Blog.git |
| octolytics-dimension-user_id | 33707637 |
| octolytics-dimension-user_login | aialgorithm |
| octolytics-dimension-repository_id | 147093233 |
| octolytics-dimension-repository_nwo | aialgorithm/Blog |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 147093233 |
| octolytics-dimension-repository_network_root_nwo | aialgorithm/Blog |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 524a93f2c1f36522a3b4be4c110467ee4172245d |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width