logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 01 章:模型到底是什么?

很多人用了很久深度学习,但如果你问他"模型在计算机里到底是什么",他会开始含糊——“就是一个神经网络嘛”、“就是个 AI 嘛”。这一章我们就把这个问题说清楚。画面里这台标着"MODEL"的机器就是本课的主角。车间里的所有东西都是为了描述它:左边墙上那张蓝图是网络结构,地面传送带上的零件箱是参数权重,传送带从入口走到出口的过程是一次推理。蓝色机器人导师站在旁边,扮演车间主任——它会贯穿这个系列的每一

#人工智能#深度学习
【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 02 章:Tensor 与 shape

把模型拆成了参数和网络结构,数据在传送带上流动。但那些流动的"数据箱"到底是什么格式?装了多少东西?怎么描述它的规格?这一章专门回答这个问题。你做 AI Infra,打交道最多的不是模型的数学原理,而是数据的形状。报错了先看 shape,优化了先算 shape,做显存估算要从 shape 算起。这一章从最基础的"一个数"开始,一路讲到 forward pass 里 shape 怎么一层层变化。读完

#人工智能#深度学习#transformer
【AI专栏】图解深度学习-AI infra工程师必知必会:第 03 章:常见层与算子

好了,逛完了所有的工位,咱们往后退一步,再看看整个车间。其实再复杂的大模型,也就是把咱们刚才看的这些算子,像搭积木一样串联起来。比如一个标准的 Transformer Block,大概也就是:进门先做个 Norm,然后跑两个 Linear 算 Attention,再做个 Norm,最后跑两个 Linear 算 MLP。咱们 AI Infra 工程师看一个网络,其实视角很简单:第一步,认出它是由哪些

#人工智能#深度学习#transformer
【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 04 章:训练 vs 推理

最后看这幅决策全景图。以后接到模型任务,在分叉路口,先认准方向。如果是走左边去搞推理,你脑子里想的就是怎么管理瘦身后的显存(比如优化 KV cache),怎么把吞吐量拉高,怎么降低延迟让用户等得少一点。如果是走右边去搞训练,面对那四座大山(特别是庞大的优化器状态),你想的就得是怎么做分布式,怎么把梯度在多张卡之间切分和同步,怎么抠下每一点显存来塞进更大的 batch。路选对了,账本才能算对,后面要

#人工智能#深度学习
【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 05 章:数值精度与显存账本

咱们拿大家最熟悉的 7B 模型(比如 Llama-2-7B)来实操一下。70 亿个参数,现在业界默认的发布格式基本都是 FP16。70亿×2字节140亿字70亿 \times 2字节 = 140亿字70亿×2字节140亿字,约等于 14GB。你看右边那张 A100 的对比图,14GB 的权重放进 80GB 的显存条里,也就是占了底下的一小截。这就是为什么大家说推理一个 7B 模型,单张卡轻轻松松。

#人工智能#深度学习#transformer
【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 06 章:模型怎么跑在 GPU 上

回过头来看,为什么深度学习里的算子能如此完美地契合 GPU 这套并行逻辑?关键就在于——深度学习的大部分计算,全都是矩阵乘法(Linear、Attention 基本上全是它)。你看中间这个拆解图:算一个输出矩阵 C,它里面的每一个小格子,只和 A 的某一行以及 B 的某一列有关,和其他格子完全独立。这意味着什么?意味着这几万个输出格子,可以直接分配给 GPU 里的几万个线程,大家不用互相商量,不用

#人工智能#深度学习#transformer
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里

有序关联容器常见的底层实现是平衡二叉树(通常是红黑树),每次插入新元素时,容器会比较新元素的键和已有节点的键,沿着树的路径找到应该挂载的位置。容器的名字和接口只是表象,真正决定每个容器行为、性能、适用场景的,是它如何组织元素在内存中的位置,是一段连续数组、一组分散的节点、一棵按键排序的树,还是一张按哈希值分桶的表。选择一个糟糕的哈希函数,或者负载因子(load factor,即元素总数除以桶数量的

#c++#开发语言
【C++进阶】STL容器与迭代器 - 02 vector 为什么是一段会长大的连续数组

有序关联容器常见的底层实现是平衡二叉树(通常是红黑树),每次插入新元素时,容器会比较新元素的键和已有节点的键,沿着树的路径找到应该挂载的位置。容器的名字和接口只是表象,真正决定每个容器行为、性能、适用场景的,是它如何组织元素在内存中的位置,是一段连续数组、一组分散的节点、一棵按键排序的树,还是一张按哈希值分桶的表。选择一个糟糕的哈希函数,或者负载因子(load factor,即元素总数除以桶数量的

#c++#开发语言#容器
【C++进阶】STL容器与迭代器 - 03 string、array 和 deque 各自守住什么边界

读完vector的章节,你肯定会有疑问:既然vector用连续内存解决了这么多问题,那把所有的顺序数据都扔进vector不就行了吗?这个问题的答案藏在三个"不是"里:不是所有连续序列都只有"通用元素"一种语义,不是所有数组都需要动态长度,也不是所有顺序容器都适合用一整段连续数组来实现。std::array和std::deque从三个不同方向回答了这组问题。string告诉你有一种连续序列,它的元素

#c++#开发语言#容器
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置

中间的一个节点时,容器只做了三件事:把被删节点的前驱的后继指针指到被删节点的后继,把被删节点的后继的前驱指针指到被删节点的前驱,然后销毁被删节点本身。旁边的两个节点动都没动,它们还住在原来的地址上,指向它们的指针、引用、迭代器全部有效。的操作方式反映了单向链表的物理现实:要在一个位置之前插入,你需要它前驱的后继指针,但在单向链表里,你从某个节点出发找不到它的前驱是谁。在有序关联容器中,节点不再按插

#c++#list#开发语言
    共 81 条
  • 1
  • 2
  • 3
  • 9
  • 请选择