Pytorch 在 Kaggle 上使用 GPU

Kaggle 上使用 GPU

0. 环境介绍

环境使用 Kaggle 里免费建立的 Notebook

教程使用李沐老师的 动手学深度学习 网站和 视频讲解

小技巧:当遇到函数看不懂的时候可以按 Shift+Tab 查看函数详解。

1. Kaggle 上使用 GPU

找到右边 Settings 里面的 Accelerator:

Pytorch 在 Kaggle 上使用 GPU
选择 GPU:
Pytorch 在 Kaggle 上使用 GPU
每周可以使用 36 小时:
Pytorch 在 Kaggle 上使用 GPU
查看显卡信息:
!nvidia-smi

Pytorch 在 Kaggle 上使用 GPU
可以看到显卡为 Tesla P100,拥有 16G 显存。

2. 计算设备

我们可以指定用于存储和计算的设备,如 CPU 和 GPU。 默认情况下,张量是在内存中创建的,然后使用 CPU 计算它。

在 PyTorch 中,CPU 和 GPU 可以用 torch.device('cpu')torch.device('cuda') 表示。 应该注意的是,cpu 设备意味着所有物理 CPU 和内存, 这意味着 PyTorch 的计算将尝试使用所有 CPU 核心。 然而,gpu 设备只代表一个卡和相应的显存。 如果有多个GPU,我们使用 torch.device(f'cuda:{i}') 来表示第 i i i 块 GPU(从 0 0 0 开始)。 另外, cuda:0cuda 是等价的。

import torch
from torch import nn

torch.device('cpu'), torch.device('cuda'), torch.device('cuda:1')

Pytorch 在 Kaggle 上使用 GPU
查询可用 gpu 的数量:
torch.cuda.device_count()

Pytorch 在 Kaggle 上使用 GPU
定义了两个函数, 这两个函数允许我们在不存在所需所有GPU的情况下运行代码:
def try_gpu(i=0):
    """如果存在,则返回gpu(i),否则返回cpu()"""
    if torch.cuda.device_count() >= i + 1:
        return torch.device(f'cuda:{i}')
    return torch.device('cpu')

def try_all_gpus():
    """返回所有可用的GPU,如果没有GPU,则返回[cpu(),]"""
    devices = [torch.device(f'cuda:{i}')
             for i in range(torch.cuda.device_count())]
    return devices if devices else [torch.device('cpu')]

try_gpu(), try_gpu(10), try_all_gpus()

Pytorch 在 Kaggle 上使用 GPU

3. 张量与 GPU

查询张量所在的设备。 默认情况下,张量是在 CPU 上创建的:

x = torch.tensor([1, 2, 3])
x.device

Pytorch 在 Kaggle 上使用 GPU

3.1 存储在 GPU 上

X = torch.ones(2, 3, device=try_gpu())
X

Pytorch 在 Kaggle 上使用 GPU
存储在另一个 GPU,实际上我是没有另外一个 GPU 的,所以会使用 CPU :
Y = torch.rand(2, 3, device=try_gpu(1))
Y

Pytorch 在 Kaggle 上使用 GPU

无论何时我们要对多个项进行操作, 它们都必须在同一个设备上。 例如,如果我们对两个张量求和, 我们需要确保两个张量都位于同一个设备上, 否则框架将不知道在哪里存储结果,甚至不知道在哪里执行计算。

X 在 GPU 上, Y 在 CPU,我们对它们进行求和:

X + Y

Pytorch 在 Kaggle 上使用 GPU
可以使用 X.cpu() 或者 Y.cuda() 使它们在一个设备上进行运算:
X.cpu() + Y, X + Y.cuda()

Pytorch 在 Kaggle 上使用 GPU

3.2 旁注

人们使用GPU来进行机器学习,因为单个 GPU 相对运行速度快。 但是在设备(CPU、GPU 和其他机器)之间传输数据比计算慢得多。 这也使得并行化变得更加困难,因为我们必须等待数据被发送(或者接收), 然后才能继续进行更多的操作。 这就是为什么拷贝操作要格外小心。 根据经验,多个小操作比一个大操作糟糕得多。 此外,一次执行几个操作比代码中散布的许多单个操作要好得多(除非你确信自己在做什么)。 如果一个设备必须等待另一个设备才能执行其他操作, 那么这样的操作可能会阻塞。 这有点像排队订购咖啡,而不像通过电话预先订购: 当你到店的时候,咖啡已经准备好了。
最后,当我们打印张量或将张量转换为 NumPy 格式时, 如果数据不在内存中,框架会首先将其复制到内存中, 这会导致额外的传输开销。 更糟糕的是,它现在受制于全局解释器锁,使得一切都得等待 Python 完成。

4. 神经网络和 GPU

神经网络模型可以指定设备。 下面的代码将模型参数放在 GPU 上:

net = nn.Sequential(nn.Linear(3, 1))
net = net.to(device=try_gpu())

net(X)

Pytorch 在 Kaggle 上使用 GPU
确认模型参数存储在同一个 GPU 上::
net[0].weight.data.device

Pytorch 在 Kaggle 上使用 GPU

Original: https://blog.csdn.net/qq_39906884/article/details/124294192
Author: 哇咔咔负负得正
Title: Pytorch 在 Kaggle 上使用 GPU

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/706264/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • yolov3原理解析及代码流程

    一.原理解析 1.yolov3在yolo、yolov2基础之上进行了优化,使得模型既保提升了一定的性能又在速度上做了折中;结构网络示意图如下: (注:图片借鉴网上相关领域大佬制作的…

    人工智能 2023年7月12日
    093
  • 2022-车道线检测综述

    未经许可,请勿转载! 课程论文,快速水一下👋 车道线检测综述 摘要 车道线检测是一种环境感知应用,其目的是通过车载相机或激光雷达来检测车道线。近年来,随着计算机视觉的应用发展和落地…

    人工智能 2023年6月24日
    089
  • 为什么Bert的三个Embedding可以进行相加,数学证明及代码

    这是一个知乎上的经典问题,为什么 Bert 的三个 Embedding 可以进行相加? 其中,苏剑林老师的解释感觉很有意思: Embedding的数学本质,就是以one hot为输…

    人工智能 2023年5月28日
    088
  • ResNet与Densenet之间的关系以及区别

    一、ResNet和DenseNet的之间的关系以及区别,如参数量和训练速度。 简单介绍下ResNet以及DenseNet ResNet的最大的贡献是缓解深层的神经网络训练中的梯度消…

    人工智能 2023年7月12日
    066
  • 什么是卷积

    目录 卷积是什么鬼 卷积为什么这么牛 卷积神经网络是个啥 卷积是什么鬼 卷积(convolution)卷积: f ( t ) ∗ g ( t ) = ∫ f ( τ ) g ( τ…

    人工智能 2023年7月28日
    076
  • 辐射神经场算法——NeRF算法详解

    辐射神经场算法——NeRF算法详解 辐射神经场算法——NeRF算法详解 * 1. Volume Rendering方法 2. NeRF中的积分公式推导 3. NeRF中应用的技巧 …

    人工智能 2023年6月16日
    0135
  • 2022-2028年全球与中国化学抑尘剂行业市场深度调研及投资预测分析

    本文研究全球与中国市场化学抑尘剂的发展现状及未来发展趋势,分别从生产和消费的角度分析化学抑尘剂的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点…

    人工智能 2023年6月11日
    086
  • 【语音信号处理课程设计】基于MATLAB的隐马尔可夫和矢量量化的语音识别研究

    目录 摘 要 引 言 1 孤立字语音识别实验 1.1 语音识别系统和基本识别原理 1.2 语音识别系统和基本识别原理 1.3 MFCC参数算法 1.4 识别算法核心部分的具体实现 …

    人工智能 2023年5月25日
    072
  • 数学建模学习笔记(清风)——多元线性回归

    基础部分: 适用范围: 步骤: Stata的学习: 适用范围: 1、识别重要变量 2、判断相关性方向 3、估计权重 步骤: 1、确定回归模型,定义自变量和因变量 2、利用最小二乘法…

    人工智能 2023年6月17日
    082
  • 简述Pytorch多卡训练原理与实现

    一、多卡训练原理 1.为什么要多卡训练: 简单来说,有两种原因:第一种是模型在一块GPU上放不下,两块或多块GPU上就能运行完整的模型(如早期的AlexNet)。第二种是多块GPU…

    人工智能 2023年7月21日
    063
  • 爬虫项目 | 爬取XX网站招聘信息

    /本人代码小白 ,第一次做爬虫,代码仅供参考,欢迎大神指点,/ 项目背景和功能 毕业将近,身为大三的我们,面临找工作的压力,如何快速的找到自己心仪的岗位并且及时投递简历成为同学们关…

    人工智能 2023年7月17日
    063
  • LeetCode – 207 课程表

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 207. 课程表 – 力扣(LeetCode) 题目描述 你这个学期必须选修 numCourses …

    人工智能 2023年6月27日
    075
  • 爬虫的三大库

    大家好,我是爱吃饼干的小白鼠。大家安装完python的requests,beautifulsoup ,lxml三个库,之后,我们就来说说怎么使用吧。然后我教大家一个简单的爬虫程序。…

    人工智能 2023年7月3日
    072
  • 机器学习和人工智能之间的区别

    💂 个人网站:【海拥 】【保卫机器人 】【骑士冒险 】【开发文档导航 】 🤟 风趣幽默的前端学习课程:👉28个案例趣学前端 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼家…

    人工智能 2023年5月31日
    080
  • NVIDIA CUDA各版本下载链接(包括最新11版本和以往10.2版本)

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    人工智能 2023年7月21日
    062
  • 因子分解机 FM

    特征组合/特征交叉 为什么要特征交叉? 特征交叉的目的是「提升模型的效果」: 通过特征交叉,将样本映射至高维空间,从而增加模型的非线性能力,提升模型的预测效果。 从辛普森悖论的角度…

    人工智能 2023年6月4日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球