大语言模型的工程技巧(一)——GPU计算

相关说明

这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。
本文涉及到的代码链接如下:regression2chatgpt/ch07_autograd/gpu.ipynb

本文将讨论如何利用PyTorch实现GPU计算。本文讨论的内容将在后续的模型搭建中应用非常广泛:

  • 利用神经网络学习语言(五)——长短期记忆网络(LSTM)
  • 理解大语言模型(二)——从零开始实现GPT-2

关于GPU更多的使用技巧请参考:大语言模型的工程技巧(二)——混合精度训练

内容大纲

  • 相关说明
  • 一、概述
  • 二、CPU v.s. GPU
  • 三、代码实现

一、概述

在人工智能领域,模型运算通常涉及大量可以并行执行的操作。以简单的线性回归模型为例,如图1所示,在单个数据点的模型运算中,相应的计算节点之间并没有依赖关系,每个乘法操作都可以并行执行。从数学角度来看,这样的运算可以表示为张量的矩阵乘法,产生单一的数值输出。

图1

图1

对于只有一个输出值的矩阵乘法,都可以使用并行计算来提高执行速度。更进一步,如果考虑多个模型对多个数据点的运算,相应的矩阵乘法输出是一个张量,而这个张量中的每个元素的运算都是相互独立的,这使得并行执行更加可行。类似地,张量的其他运算,例如加法和减法,也可以通过并行执行来加速计算。在神经网络领域,这一点尤为重要,因为神经网络中包含多个线性模型。整个运算过程中涉及大量的张量运算,如何有效加速这些运算过程成为这个领域工程实现中要考虑的首要问题。

二、CPU v.s. GPU

默认情况下,在提到计算机运算时,通常指的是由中央处理器(CPU)作为计算核心执行的运算任务。然而,CPU的设计原则使它并不擅长处理并行计算。举个例子,考虑矩阵乘法,如图2所示,CPU会按顺序逐个元素相乘,导致整个运算过程时间过长。虽然我们可以利用多核CPU进行并行计算以加速任务,但多核CPU价格昂贵,在实际应用中难以普及。

图2

图2

与CPU不同,GPU(图形处理器)最初是为图形处理而设计的,属于边缘计算组件。它通常拥有大量的计算核心(有时高达上千个),可以并行地执行大量的简单计算任务。因此,使用GPU进行张量运算能够显著缩短运算时间。对于神经网络而言,这一点具有重要意义,它使得构建更大、更复杂的模型成为可能(使用GPU,模型训练时间可以从几年缩短到几天)。事实上,GPU的大规模应用是神经网络,尤其是深度学习得以迅猛发展的原因之一。因此,在涉及神经网络模型的实际应用中,总是优先考虑使用GPU作为计算的核心(这是编程领域一次重大的范式转变)。随着神经网络的迅猛发展,业界甚至在考虑重新设计计算机架构来提升GPU在硬件中的地位,以便更好地适应这一快速发展的领域。

三、代码实现

借助PyTorch(基于CUDA1)在GPU计算方面的卓越工作,GPU计算的代码实现并不复杂。如程序清单7-9所示(完整代码),只需简单地将数据移动到相应的GPU中即可。与CPU的架构设计不同,GPU无法直接读取在内存(RAM)中的数据进行运算,因此需要将数据复制到GPU专用的内存(GPU Dedicated Memory)中。同理,GPU也不支持跨计算核心的运算。这包括跨CPU和GPU的计算,因为数据一部分存放在内存中,另一部分存放在GPU专用内存中;以及跨不同GPU的计算,因为数据分布在不同的GPU专用内存中。在实际使用中,面对这样的需求,需要在进行计算之前将数据移动到同一个计算核心上。

程序清单1 GPU计算
 1 |  # 检查是否有GPU
 2 |  torch.cuda.is_available()        # True
 3 |  # GPU的个数
 4 |  torch.cuda.device_count()        # 1
 5 |  # 默认情况下,创建的张量存放在内存中,使用CPU进行计算
 6 |  x = torch.randn(2, 3)
 7 |  print(x.is_cuda)                 # False
 8 |  # 可以使用张量提供的函数,将数据移到GPU上
 9 |  # 当有n个GPU时,相应的设备id是cuda:0, cuda:0,... ,cude:n-1
10 |  print(x.to('cuda:0').is_cuda)    # True
11 |  # 在创建张量时,通过指定device将张量移到GPU上 
12 |  y = torch.randn(2, 3, device='cuda:0')
13 |  print(y.is_cuda)                 # True
14 |  print(y.to('cpu').is_cuda)       # False
15 |  # 不支持跨计算核心运算
16 |  x + y                            # error

想要正确使用GPU进行计算,关键是要充分利用其并行计算的特性,而不是仅仅进行串行计算,图3所示的例子很好地阐述了这个观点。当计算任务主要是串行的时,CPU往往比GPU更具优势。当计算任务能够被有效地并行化时,GPU的优势才能充分显现出来。

图3

图3


  1. CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型。它允许开发者利用NVIDIA的GPU进行通用目的的并行计算,包括科学计算、机器学习、深度学习等领域的任务。CUDA的出现彻底改变了GPU的角色,使其从原本的图形渲染加速变为通用计算的利器。使用CUDA,开发者可以将计算任务分配到GPU上,并利用其大量的计算核心实现并行处理,从而大幅提升计算速度。
    为了使用CUDA,开发者需要编写基于CUDA的GPU核心代码,然后通过相应的编译工具将其与CPU代码结合起来,以充分利用GPU的计算能力。同时,许多深度学习框架(如TensorFlow、PyTorch等)也提供了对CUDA的支持,使开发者能够更方便地在GPU上进行模型训练和推断。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638388.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十一节 SpringBoot Starter 面试题

一、面试题 很多同学的简历都写着熟悉 SpringBoot, 而 Starter 的实现原理被当作的考题的的情况越来越多。 来源牛客网关于 starter 的一些面试题 情景一、路虎一面 情景二、蔚来 情景三、同花顺 Starter 频频出现,因此在面试准备时,这道题…

Qt_电脑wifi相关操作

项目描述: 在做项目时用到了获取wifi的操作。在网上查找了好久资料,这里做一些总结。 这里有显示当前电脑wifi连接状态,列出wifi列表,连接断开wifi等函数。欢迎大家留言添加文章内容。 使用范围: windows电脑(中文的环境) 使用技术:windows的cmd命令。和对字符串的解析…

概念解析 | 3D Referring Expression Comprehension (3D-REC):让计算机“听懂“人类的3D语言指令

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:3D Referring Expression Comprehension (3D-REC)。 概念解析 | 3D Referring Expression Comprehension (3D-REC):让计算机"听懂"人类的3D语言指令 PDF]…

FIFO-Diffusion,一个无需额外训练即可生成长视频的框架。通过确保每个帧引用足够多的先前帧来生成高质量、一致的长视频。

简单来讲,FIFO-Diffusion先通过一些模型如VideoCraft2、zeroscope、Opem-Sora Plan等与FIFO-Diffusion的组合生成短视频,然后取结尾的帧(也可以取多帧),再用这一帧的图片生成另一段短视频,然后拼接起来。FI…

工大智信智能听诊器:开启个人健康管理的全新模式

工大智信智能听诊器:开启个人健康管理的全新模式 在快节奏的现代生活中,健康管理已成为人们关注的焦点。工大智信智能听诊器,作为一款创新的医疗设备,不仅提供高级数据管理功能,而且成为了个人健康管理的得力助手。 这…

6款网站登录页(附带源码)

6款网站登录页 效果图及部分源码123456 领取源码下期更新预报 效果图及部分源码 1 部分源码 <style>* {margin: 0;padding: 0;}html {height: 100%;}body {height: 100%;}.container {height: 100%;background-image: linear-gradient(to right, #fbc2eb, #a6c1ee);}.l…

Application Development using Large Language Models笔记

诸神缄默不语-个人CSDN博文目录 这是2023年NeurIPS Andrew Ng和Isa Fulford做的tutorial&#xff0c;关于如何用LLM来开发新产品的技术和思路&#xff1a;NeurIPS Tutorial Application Development using Large Language Models 文章目录 1. LLM基础2. 提示工程技巧3. 微调4.…

图片、视频画质增强变清晰工具分享(免费)

生活中可能会修一下模糊图片那么这就有一款用来修图片的管理工具&#xff0c;也有可能会修一下模糊的视频&#xff0c;在吾爱上有大佬开发了这么一款工具&#xff0c;免费的&#xff0c;不需要开任何VIP&#xff0c;我试了一下&#xff0c;好用&#xff0c;分享出来&#xff0c…

linux 上除了shell、python脚本以外,还有什么脚本语言用得比较多?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;说到在 Linux下的编程&#xf…

TypeScript-泛型

泛型(Generics) 指在定义接口&#xff0c;函数等类型的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性&#xff0c;使用泛型可以复用类型并且让类型更加灵活 泛型接口-interface 语法&#xff1a;在 interface 接口类型的名称后面使用…

如何使用Unity XR Interaction Toolkit

使用环境&#xff1a; Unity2021.3.21f XR Interaction Toolkit v3.0.0 各类函数可用的&#xff1a; 简单项目配置&#xff1a; 第一步&#xff0c;导包&#xff08;samples可以不用导这么多&#xff0c;两个就够了&#xff09;&#xff1a; 第二步&#xff0c;构建场景&a…

基于STM32实现智能空气质量监测系统

目录 文章主题环境准备智能空气质量监测系统基础代码示例&#xff1a;实现智能空气质量监测系统 配置传感器并读取数据数据处理与显示数据存储与传输应用场景&#xff1a;室内环境监测与空气质量控制问题解决方案与优化收尾与总结 1. 文章主题 文章主题 本教程将详细介绍如何…

Xline社区会议Call Up|在 CURP 算法中实现联合共识的安全性

为了更全面地向大家介绍Xline的进展&#xff0c;同时促进Xline社区的发展&#xff0c;我们将于2024年5月31日北京时间11:00 p.m.召开Xline社区会议。 欢迎您届时登陆zoom观看直播&#xff0c;或点击“阅读原文”链接加入会议&#xff1a; 会议号: 832 1086 6737 密码: 41125…

【人工智能】模型性能评估

模型性能衡量介绍 混淆矩阵 混淆矩阵(Confusion Matrix&#xff09; TP(真阳性)&#xff1a;预测为阳性&#xff0c;且预测正确。 TN(真阴性)&#xff1a;预测为阴性&#xff0c;且预测正确。 FP(伪阳性)&#xff1a;预测为阳性&#xff0c;但预测错误&#xff0c;又称型一误…

Generic Segmentation Offload(GSO)

Generic Segmentation Offload汉语意思是啥&#xff1f; Generic Segmentation Offload&#xff08;GSO&#xff09;的汉语意思是“通用分段卸载”。在网络通信中&#xff0c;GSO 是一种技术&#xff0c;用于在网络栈中将较大的传输单元分段为更小的单元&#xff0c;以提高网络…

Ai指令-公众号内训课:学会ai指令+公众号的底层逻辑(7节课)

课程目录 第一课:详解公众号的流量机制.mp4 第二课:快速搞定公众号号设化装修.mp4 第三课:一期学员直呼牛X的课程&#xff0c;正确的爆文利用姿势.mp4 第五课:颗粒度级别拆解AI公众号爆文.mp4 第六课:AI提示词进阶技巧课。提示词自动化.mp4 第七课.实操演示提示词撰写工作…

web自动化之PO模式

PO模式 1、为什么需要PO思想&#xff1f; 首先我们观察和思考一下&#xff0c;目前我们写的作业脚本的问题&#xff1a; 元素定位和操作动 作写到一起了&#xff0c;这就就会用导致一个问题&#xff1a; UI的页面元素比较容易变化的&#xff0c;所以元素定位和脚本操作写到一…

24-LINUX-UDP网络连接

一UDP协议特点 TCP 协议提供的是&#xff1a;面向连接、可靠的、字节流服务。使用 TCP 协议通信的双发必须 先建立连接&#xff0c;然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源&#xff0c;以管理 连接的状态和连接上数据的传输。TCP 连接是全双工的&…

Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片

IC-Light代表Impose Constant Light,是一个控制图像照明的项目。可以操控图像生成时的光照&#xff0c;对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体 ID 需求的最大的问题解决了。 目前&#xff0c;已经发布了两种类型的模型…

多线程、进程、线程五种状态、synchronized、volatile、Lock、CAS、死锁、ThreadLocal

1、并发编程 并发编程三要素 原子性&#xff1a;只一个操作要么全部成功&#xff0c;要么全部失败可见性&#xff1a;一个线程对共享变量的修改&#xff0c;其他线程能够立刻看到有序性&#xff1a;程序执行的顺序按照代码的先后顺序执行 synchronized&#xff0c;Lock解决原…