揭秘GPU

简介: GPU在机器学习中至关重要,但很少有人能解释清楚,本文对此进行了一番研究。

如果你从事机器学习,或者碰巧是NVidia的投资者,你一定听说过GPU对这个领域至关重要。但对我来说,GPU一直是个谜。我对GPU=快速”有很的理解,但仅此而已。

老实说,这能让你走得更远。我开始着手使用Keras进行ML工作,Keras是谷歌的TensorFlow库之上的API。Keras是一个设计精美的API,它做出了一个非常实际的决定:大多数事情应该是简单的,困难的事情应该是可能的。

正因为如此,我真的不需要学习任何关于GPU的知识。我只是运行了一些神奇的操作系统命令和一些神奇的代码行-嘣!-大规模模型训练加速。我对这种情况非常满意。

然而,在feedly最新的项目中,我们决定试用PyTorch,因为它越来越流行。但也有一些有利的数据。新的(强烈推荐fast.ai课程顺序从Keras切换到PyTorch。 PyTorch模型也赢得了很多最近的Kaggle比赛。

所以我们深入研究并发现PyTorch通过清晰一致的API使所有事情成为可能。它比Keras更灵活,所以权衡的是简单的事情变得更难,但困难的事情变得更容易。如果你正在尝试新的或不寻常的模型(或者你碰巧是一个控制狂),PyTorch绝对是一个更好的选择。

当GPU加速我的PyTorch模型的时候,我谷歌了一下神奇的“GPU -> on”代码,我发现它不存在!一如既往,Pytorch使这比Keras更难实现,但是提供了一些关于如何着手做事的API。所有这一切的结果是,我不得不咬紧牙关,建立了一个关于GPU如何被用来加速模型训练的心智模型。

为什么GPU很快

模型通常具有许多很多参数。例如,流行的VGG图像分类模型有大约1.4亿个参数,分为16层!在运行推理(预测)时,需要将输入数据(图像)传递到每个图层,通常将该数据乘以图层参数。在训练期间,还必须稍微调整每个参数以更好地拟合数据。那是很大的计算量!

CPU很擅长快速完成一些事情。 这通常很好,有足够的分支(如果用户这样做,那样做),以及大规模并行性实际上不可能的其他顺序约束。GPU很好,可以做很多“慢”的事情。由于它们最初用于执行图形要求,因此它们希望一次性完成大量工作(考虑将图像的所有像素转换为灰度)。所以这里有一个权衡,对于ML来说GPU由于可以并行完成这些巨大的算术运算而赢得大量时间。

具体来说,我的macbook有一个运行速度为3.1Ghz且有4个内核的CPU。NVidia K80 GPU拥有近5000个内核,尽管运行速度要慢得多——562Mhz。虽然这样做并不公平,但你可以看到K80的时钟速度大约慢了6倍,但是并行速度提高了1250倍。

如何考虑GPU

PyTorch不是代码行“GPU -> on”,而是“CUDA”张量。CUDA是一个用于在GPU上执行操作的库。基本上,PyTorch要求你声明要在GPU上放置的内容,然后你可以像往常一样执行操作。所以我想,让我们试着在GPU上添加一个图层:

5f92df6161b2b19385d120d75aaafabfde7f7326

我运行代码,立即得到了一个错误在隐藏层计算中:

5e575d6c5c19685e920b8bcf2509fc223697cb36

为什么?我立即知道它与我添加的.cuda()代码有关,但我不知道为什么。在思考了GPU应该如何加速之后,我意识到,“当然它不工作,一个张量在GPU上,另一个仍然在主内存中!”一切都搞定了。Pytorch允许在GPU内存中分配张量,然后使用GPU对这些张量进行操作。但是这些操作的结果会怎样呢?让我们试试另一个例子:

58b0ad3b47143fe94b8007de241c6d7abf0e2e08

这是GPU内存中的另一个张量!经过更多的反复试验,我发现我不得不改变自己的思维方式。原来我以为内存、CPU和GPU都混在一起了:

f3e0a6d0f144436aabaaab38b94d40ea1a86df60

我意识到我需要这样想:

d1bd434ed738a72b7541dd92b4ee7986d398185d

从本质上说,CPU/主内存和GPU/GPU内存都位于各自的小宇宙中。来自软件工程背景的我开始将GPU操作看作是一个REST API。当你使用REST API时,真正的成本是来回发送数据。在本地执行任务的速度与在远程服务器上执行任务的速度一样快。但是你要避免的是大量的数据来回传输,因为这是纯粹的开销。

把这个类比往前推,我们可以看到,当然,PyTorch matmul结果是一个GPU张量是有道理的。这样就很容易在GPU上进行进一步的操作,而不需要将数据传送到主内存,然后再返回到GPU。所以如果我们想要使用GPU,我们真的想要GPU上的所有参数,因为这些参数将会被反复使用在前向传递中产生预测然后在后向传递中更新。每一批特性都必须被传送到GPU内存中。但是中间的和最终的结果(比如隐藏层的输出)只能存在于GPU内存中。我们需要做的就是不断向GPU发送命令,告诉它如何操作参数和权重。

因此,在API类比中,我们只做两个“重”请求(在上图中加星标的),一个用于初始化权重,另一个用于在训练后获得最终权重。但我们可能会在这两个请求之间发出数百万个轻量级请求来训练模型。

GPU性能的提高是真实的,而且是惊人的

那么什么样的加速是可能的呢?PyTorch有一个不错的MNIST小例子我们可以使用。使用CPU运行10个epoch需要153秒,使用GPU需要83秒。我们可以从理论上说,更大的模型可以获得更大的收益。 不错,真不错。

一些实验

这一切都很棒。经过一番思考和一些糟糕的绘图之后,我对GPU的了解要好得多,并且所需的额外编码也不错。但我的想法是否正确?回答这个问题的最好方法是建立一个实验。我想向自己证明运输数据是工作流程的“缓慢部分”。所以我尝试了以下三件事:

1.做一个200x200矩阵乘以numpy,一个高度优化的CPU线性代数库。

2.使用PyTorch cuda张量在GPU上进行200x200矩阵乘法运算。

3.使用PyTorch cuda张量在GPU上进行200x200矩阵乘法运算,每次都来回复制数据。

正如预期的那样,GPU只运行得更快,这一次大约是6倍。有趣的是,1和3几乎花费了相同的时间。GPU操作的效率几乎完全被数据传输的低效所平衡!


数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

以上为译文。

本文由阿里云云栖社区组织翻译。

文章原标题《Demystifying the GPU》,

作者:kireet,译者:Viola,审校:。

文章为简译,更为详细的内容,请查看原文

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
21天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34909 57
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
15天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
14503 44
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
|
11天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
2864 28
|
1月前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45834 160
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
6天前
|
弹性计算 人工智能 自然语言处理
阿里云Qwen3.6全新开源,三步完成专有版部署!
Qwen3.6是阿里云全新MoE架构大模型系列,稀疏激活显著降低推理成本,兼顾顶尖性能与高性价比;支持多规格、FP8量化、原生Agent及100+语言,开箱即用。
|
9天前
|
人工智能 弹性计算 安全
Hermes Agent是什么?怎么部署?超详细实操教程
Hermes Agent 是 Nous Research 于2026年2月开源的自进化AI智能体,支持跨会话持久记忆、自动提炼可复用技能、多平台接入与200+模型切换,真正实现“越用越懂你”。MIT协议,部署灵活,隐私可控。
2203 5

热门文章

最新文章