【ml-engineering 翻译系列】计算加速器之 gpu

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode
本篇文档的来源:https://github.com/stas00/ml-engineering 。这篇文档详细介绍了机器学习加速器的现状和技术细节,涵盖了从 GPU、TPU 到 FPGA 等多种加速器类型,强调了训练和推理的不同计算需求。文中分析了 NVIDIA、AMD、Intel 等厂商的高端加速器规格,特别是 TFLOPS 性能和内存带宽的重要性,并提供了不同加速器的比较表。文档还讨论了在云端和本地部署加速器的选择,以及如何通过优化硬件和软件配置来提高投资回报率。最后,文档提醒我们在购买或租用加速器时要注意电源和散热问题,以确保设备的稳定运行。

加速器

计算加速器是机器学习训练的主力。最初只有 GPU。但现在还有 TPU、IPU、FPGA、HPU、QPU、RDU 等,而且还在不断发明新的加速器。

机器学习有两种主要工作负载 - 训练和推理。还有微调工作负载,通常与训练相同,除非执行更轻量级的 LORA 风格(https://arxiv.org/abs/2106.09685)微调。后者比普通微调需要的资源和时间要少得多。

在语言模型的推理过程中,生成是按顺序进行的 - 一次生成一个 token。因此,它必须重复相同的 forward 调用数千次,每次执行一个小型 matmul(矩阵乘法或 GEMM)。这可以在加速器(如 GPU)上完成,或者在一些最新的可以高效处理推理的 CPU 上完成。

在训练过程中,整个序列长度在一个巨大的 matmul 操作中处理。因此,如果序列长度为 4k,同一模型的训练将需要一个计算单元,能够处理比推理多 4k 倍的操作,并且要快速完成。加速器在这项任务中表现出色。事实上,它们需要相乘的矩阵越大,计算效率就越高。

另一个计算上的区别是,虽然训练和推理在 forward 过程中都需要执行相同总量的 matmul,但在只用于训练的 backward 过程中,还需要额外执行 2 倍的 matmul 来计算输入和权重的梯度。如果使用激活重计算,还会额外执行一次 forward。因此,训练过程需要比推理多 3-4 倍的 matmul

子章节

通用:

NVIDIA:

AMD:

高端加速器现状概览

虽然未来可能会发生变化,但与消费级 GPU 市场不同,截至本文撰写时,高端加速器的种类并不多。如果你在云端租用,大多数提供商提供的加速器选择都大同小异。

GPU:

  • 截至今天,ML 云/HPC 已开始从 NVIDIA A100 过渡到 H100,由于 NVIDIA GPU 的常见短缺,这个过程将持续数月。H200 即将推出 - 承诺在 2024 年第四季度。B100、B200、GB200 在 2024 年第一季度宣布,但由于生产延迟,我们可能要到 2025 年中才能使用这些产品。
  • AMD 的 MI250 开始零星出现,但目前还不清楚何时能够轻松获取。MI300X 现在开始在一些二线云提供商那里可用。

HPU:

  • 英特尔的 Gaudi2 开始在英特尔云上缓慢出现 - 有一个庞大的阵容。它也可通过 Supermicro、WiWynn 等公司提供本地部署实施,不久后还会有更多选择。
  • Gaudi3 预计将在 2024 年某个时候推出。

IPU:

TPU:

  • 谷歌的 TPU 当然是可用的,但它们并不是最受欢迎的加速器,因为你只能租用它们,而且软件在 GPU 和 TPU 之间的转换并不容易,所以许多(大多数?)开发者仍然停留在 GPU 领域,因为他们不想被锁定在谷歌垄断的硬件上。

关于 Pod 和机架:

  • Cerebras 的 WaferScale Engine (WSE)
  • SambaNova 的 DataScale
  • 数十种不同的 pod 和机架配置,将上述 GPU 与超快速互连组合在一起。

这就是 2024 年第三季度的情况。

由于我们大多数人都是租用计算资源,从未亲眼见过它们的样子,这里展示了一个 8xH100 节点的实物图(这是 Dell PowerEdge XE9680 机架服务器的 GPU 托盘):

image.png

nvidia-a100-spec

术语表

  • CPU: 中央处理器
  • FPGA: 现场可编程门阵列
  • GCD: 图形计算芯片
  • GPU: 图形处理器
  • HBM: 高带宽内存
  • HPC: 高性能计算
  • HPU: Habana Gaudi AI 处理器单元
  • IPU: 智能处理单元
  • MME: 矩阵乘法引擎
  • QPU: 量子处理单元
  • RDU: 可重构数据流单元
  • TPU: 张量处理单元

最重要的需要理解的事情

我将在本书中多次重复以下观点 - 仅仅购买/租用最昂贵的加速器并不足以期望获得高投资回报率(ROI)。

ML 训练的高 ROI 有两个指标:

  1. 训练完成的速度,因为如果训练时间比计划长 2-3 倍,你的模型可能在发布前就已经过时了 - 在当前竞争激烈的 ML 市场中,时间就是一切。
  2. 训练模型的总花费,因为如果训练时间比计划长 2-3 倍,你最终将花费 2-3 倍的金钱。

除非其他购买/租用的硬件经过仔细选择以匹配所需的工作负载,否则加速器很可能会大量闲置,从而浪费时间和金钱。最关键的组件是网络(https://github.com/stas00/ml-engineering/tree/master/network),其次是存储(https://github.com/stas00/ml-engineering/tree/master/storage),最不重要的是CPU和CPU内存(至少对于典型的训练工作负载而言,任何CPU限制都可以通过多个DataLoader工作进程来补偿)。

如果是租用计算资源,通常没有选择的自由 - 硬件要么是固定的,要么只有一些组件可以更换,但选择不多。因此,有时选择的云提供商可能无法提供足够匹配的硬件,在这种情况下,最好寻找其他提供商。

如果你购买自己的服务器,我建议在购买之前进行深入的尽职调查。

除了硬件,你当然还需要能够高效部署硬件的软件。

我们将在本书的各个章节中讨论硬件和软件方面的问题。你可以从这里(https://github.com/stas00/ml-engineering/tree/master/training/performance)和这里(https://github.com/stas00/ml-engineering/tree/master/training/model-parallelism)开始。

我们关心加速器的哪些特性

让我们在接下来的章节中以 NVIDIA A100 的规格作为参考点。

Image

nvidia-a100-spec

source(https://www.nvidia.com/en-us/data-center/a100/)

TFLOPS

如前所述,机器学习训练和推理的大部分工作都是矩阵乘法。如果你还记得代数中的矩阵乘法,它由许多乘法运算后跟着求和组成。可以计算每一个这样的运算,并定义芯片在一秒钟内可以执行多少这样的运算。

这是评判加速器的关键特征之一。TFLOPS 这个术语定义了芯片每秒可以执行多少万亿次浮点运算。数值越高越好。对于不同的数据类型,有不同的定义。例如,以下是来自 A100 规格(https://www.nvidia.com/en-us/data-center/a100/)的理论峰值 TFLOPS 的几个条目:

image.png

注意事项:

  • INT8 是以 TeraOperations(万亿次操作)来衡量的,因为它不是浮点运算。
  • FLOPS 这个术语可能指的是浮点运算的总数,例如在计算单个 Transformer 迭代需要多少 FLOPS 时;它也可能指每秒浮点运算次数 - 所以要注意上下文。当你阅读加速器规格时,它几乎总是指每秒定义。当讨论模型架构时,通常只是指浮点运算的总数。

因此,你可以看到 int8 的速度是 bf16 的 2 倍,而 bf16 又是 tf32 的 2 倍。

此外,TFLOPS 取决于矩阵的大小,如下表所示:

Image

nvidia-a100-matmul-tflops

source(https://developer.nvidia.com/blog/cuda-11-features-revealed/)

正如你所看到的,由于 tile 和 wave quantization 的影响(https://github.com/stas00/ml-engineering/tree/master/training/performance#tile-and-wave-quantization),性能差异是非线性的。

TFLOPS 比较表

让我们来看看高端加速器支持的数据类型(https://github.com/stas00/ml-engineering/blob/master/training/dtype.md)和相应的理论峰值 TFLOPS 规格(不包括稀疏性)。按 bf16 列排序。

image.png

特定行的注释:

  1. Intel Gaudi2 和 3 只发布了部分 TFLOPS 规格(https://www.intel.com/content/www/us/en/content-details/817486/intel-gaudi-3-ai-accelerator-white-paper.html),但它确实支持FP32、TF32、BF16、FP16和FP8、INT8和INT16。这些数字是针对MME(矩阵)计算的。
  2. 由于 GB200 是 2 个 B200 芯片,表格包含了每个芯片的 TFLOPS 以进行公平比较 - 对于真正的 GB200 你需要将其乘以 2 - 它似乎还将 B200 芯片运行得稍快,因此规格比独立的 B200 更高。这也意味着,与典型的 8-GPU 节点不同,使用 GB200 你将获得 4-GPU 节点(但它相当于 8 个 B200,计算速度还要快约 10%)。
  3. 我没有包括"NVIDIA H100 双 NVL",因为它实际上是 2 个 GPU - 所以这不公平 - 它的 FLOPS 与 H100 相同,但所有参数都是 2 倍,而且它的内存稍多一些(每个芯片 94GB,相比 H100 的 80GB),内存也稍快。
  4. H200 与 H100 相同,但内存为 141GB,而不是 80GB 的 HBM 内存,其内存更快,HBMe@4.8TBps vs HBM@3.35TBps - 所以基本上 H200 解决了 H100 的计算效率问题。
  5. 奇怪的是,NVIDIA A100 PCIe 和 SXM 版本的规格(https://www.nvidia.com/en-us/data-center/a100/)报告有相同的TFLOPS,这很奇怪,因为SXM版本使用30%更多的功率,并使用快5%的HBM。
  6. GH200 - 与 GB200 相同的注释 - 这是 2 个芯片,所以表格包含了每个芯片的规格,不包括稀疏性。

一般注释:

  • int8 是以 TeraOperations 来衡量的,因为它不是浮点运算。
  • 如果你发现数字是上述的两倍 - 通常意味着包含了稀疏性(目前几乎没有人能从中受益,因为我们的矩阵是密集的)。
  • 查看规格时要非常小心你正在阅读的数字 - 许多供应商经常发布带有稀疏性的 TFLOPS,因为它们大约是 2 倍大,但即使他们指出了这一点,通常也是用小字体。我不得不要求 NVIDIA 在他们的 H100 规格中添加一个注释,说明这些数字是带有稀疏性的,因为他们最初没有提到这个重要的技术事实。而且在撰写本文时,99%的情况下你不会使用稀疏性,因此你大多数时候关心的实际理论 TFLOPs 是不包括稀疏性的(即上表中的数据)。
  • 还要注意,如果加速器 A 发布的 TFLOPS 高于加速器 B,并不意味着 A 更快。这些是理论数字,不仅在实践中永远无法达到 - 实际的 TFLOPS 效率(HFU)可能因供应商而异,甚至对于同一供应商的不同加速器架构也可能有很大差异。
最大可实现的 FLOPS

理论峰值 FLOPS 是加速器规格中公布的数值。它的计算方式如下:

理论FLOPS = 计算单元时钟速度 * 每个计算单元每个时钟周期的flops * 计算单元数量

其中:

  • 计算单元时钟速度 - 计算单元时钟每秒滴答的次数(以 Hz 为单位)
  • 每个计算单元每个时钟周期的flops - 计算单元每个时钟周期可以执行的操作数。
  • 计算单元数量 - 设备中有多少个单元

公布的理论峰值 FLOPS 的问题在于,它们是非常理论化的,即使在所有完美条件下也无法在实践中实现。每个加速器都有自己的现实 FLOPS,这些数值并未公布,而且有一些来自社区的轶事报告尽力找出实际的最佳值,但我还没有找到任何官方报告。

如果你找到可靠的报告(论文?)显示本章讨论的一个或多个高端加速器可以预期的实际 TFLOPS,请 kindly 提交一个 PR 包含这些信息。关键是要有一个参考来源,读者可以验证所提议的信息。

为了给我所说的内容提供一个数字感,让我们以 A100 为例,其规格中的 bf16 峰值性能为 312 TFLOPS。在 FlashAttention 发明之前,众所周知,对于 fp16/bf16 混合精度训练模式,150TFLOPS 接近可以达到的最高水平。而使用 FlashAttention,它大约在 180+TFLOPS 左右。当然,这是针对 LLM 训练测量的,其中涉及网络和 IO,这些会造成额外的开销。所以在这里,最大可实现的峰值性能可能在 200 到 300 TFLOPS 之间。

你可以通过在单个加速器上执行完美对齐的最大尺寸矩阵matmul来测量实际的峰值 TFLOPS。你可以使用最大可实现矩阵乘法 FLOPS 查找器(https://github.com/stas00/ml-engineering/tree/master/compute/accelerator/benchmarks#maximum-achievable-matmul-flops-finder)来重现结果。但是,当然,这只会告诉你你的给定加速器及其软件栈在matmul上的表现如何 - 根据工作负载,这可能是你需要知道的全部,也可能不是。

最大可实现矩阵乘法 FLOPS 比较表

以下测量结果是针对 BF16 输入(无稀疏性)的 matmul TFLOPS(关于 MAMF 的含义请参见上文)。按加速器效率排序:

image.png

注意事项:这些数字是通过对各种形状执行matmul的非穷尽子空间进行暴力搜索获得的。请参见:最大可实现矩阵乘法 TFLOPS 查找器(https://github.com/stas00/ml-engineering/tree/master/compute/accelerator/benchmarks#maximum-achievable-matmul-flops-finder),使用测量时可用的软件组件,因此我强烈建议您在您的特定设置上重新运行mamf-finder.py,以获得真实的数据。此表中的数字是粗略估计,不应作为绝对值使用。随着软件的改进,这些数字将会提高,更接近理论规格。因此,理想情况下应该每6个月左右重新运行一次。

注意:

  • 完整的理论数据集请参见理论加速器 TFLOPS(https://github.com/stas00/ml-engineering/blob/master/compute/accelerator/README.md#tflops-comparison-table)
  • 效率是 MAMF/理论值*100
  • 最佳形状是脚本检测到的,但可能还有许多其他形状具有类似的性能 - 列出它是为了可重现性
  • 如果您获得的性能远低于此表中的数字,请检查目标硬件是否有足够的散热,如果加速器过热,通常会降低其性能。当然,这里假设电源供应符合规格。后者在数据中心很少出现问题,但散热不良并非闻所未闻。
  • 您使用的软件可能会产生巨大的差异 - 例如,使用 MI300X 时,我使用 ROCm-6.1 达到了 450TFLOPS,但正如您所看到的,ROCm-6.2 有了显著改进,增加了惊人的 300 TFLOPS
  • 然后还有各种系统优化 - 例如,对于 MI300X,禁用内核设置中的 numa_balancing 是必须的。
  • AMD MI250X 有 2 个 GCD - 所以理论 TFLOPS 需要减半,因为单个 matmul 只使用其中一个,而 383 TFLOPS 是针对 2 个 GCD 报告的。

此外,需要理解的是,知道在某个特定形状(如 4352x13568x3840)下的最大可实现 Matmul TFLOPS,并不意味着在实际应用中可以获得相同的性能,因为几乎不可能正好遇到这个形状。相反,要真正了解你的系统,你需要使用模型在训练过程中实际使用的形状运行 MAMF Finder(最大可实现矩阵乘法性能工具)。这才是该工具的核心意图。一旦得到了这些 TFLOPS 的测量结果,你就能大致判断,当你测量训练过程中的实际 TFLOPS 时,优化工作何时可以停止。

最后,我想再次重申,这里的目的不是指出哪个加速器比另一个更高效,而是让人们了解情况,如何理解这些理论规格,并帮助您了解何时需要继续优化系统,何时停止。因此,从这些笔记和数字开始作为起点,然后测量您自己的用例,并使用后者的测量来获得最佳结果。

加速器内存大小和速度

加速器使用高带宽内存(https://en.wikipedia.org/wiki/High_Bandwidth_Memory) (HBM),这是 SDRAM 内存的 3D 版本。例如,A100-SXM 配备了 1.6TBps 的 HBM2,而 H100-SXM 配备了 3.35TBps 的 HBM3。

以下是规格:

image.png

由于 HBM 是多个 DRAM 芯片的堆叠,堆叠高度指定了每个设备有多少个芯片。

通常,加速器拥有的片上内存越多越好。在任何给定时刻,通常大部分模型权重都没有被使用,因为它们在等待轮到被处理,因此大内存允许更多的模型存储在加速器内存中,并可立即访问和更新。当内存不足时,有时模型必须分割到多个加速器上,或卸载到 CPU 和/或磁盘。

以下是最近高端加速器的内存规格(有些尚未正式发布),按内存大小,然后按带宽排序:

image.png

注意:

  • 我没有包括 NVIDIA H100 dual NVL,因为它是 2 个 H100 GPU,每个芯片额外有 14GB 内存,内存速度略快(3.9TBps vs 3.35TBps)- 但在上表中它会有不公平的优势,因为其他所有条目都是按单芯片计算的。(我猜 AMD250 也是 2 个 GCD,但它们无论如何都不太具有竞争力,很快就会被这个表中的新产品取代)

内存速度(带宽)当然非常重要,因为如果速度不够快,计算单元最终会闲置,等待数据在内存之间移动。

散热

这对于购买自己的硬件时很重要,当你在云上租用时,供应商应该会负责适当的散热。

关于散热,唯一重要的实际理解是,如果加速器没有保持冷却,它们将降低计算时钟速度并减慢一切(有时甚至可能崩溃,尽管降频应该可以防止这种情况)。

用于 LLM/VLM 工作负载的高端加速器

云端和本地加速器集群

加速器

最常见的可以在计算云上租用或购买的加速器:

NVIDIA:

AMD:

Intel:

Graphcore:

SambaNova:

本地加速器集群

Cerebras:

仅云端解决方案

这些只能通过云使用:

Google

Cerebras:

如何获得最优惠的价格

请记住,只要你愿意批量购买/租用或租用 1-3 年,广告价格几乎总是可以协商的。你会发现,你最终支付的实际价格可能比广告的"公开"价格低很多倍。一些云提供商在你在他们的网站上选择更长期承诺时已经包含了折扣,但直接与他们的销售团队协商总是最好的。除了或代替$$折扣,你可能会得到一些有用的免费功能/升级。

如果你的公司有风险投资者 - 提到这一点可能会有很大帮助,因为这样云提供商就知道你可能会在未来购买更多计算资源,更有可能给出更多折扣。

二级云可能会比一级云给出更好的价格。截至本文撰写时,一级云包括 AWS、OCI、Azure 和 GCP。

对于基准价格,应该很容易找到一些提供最新跨云公开价格比较的好网站 - 只需搜索类似 cloud gpu pricing comparison(https://www.google.com/search?q=cloud+gpu+pricing+comparison)的内容。一些好的起点:vast.ai(https://cloud.vast.ai/create/),特别是对于集群gpulist.ai(https://gpulist.ai)。

在寻找解决方案时,请记住,仅仅租用最强大的加速器是不够的。你还需要快速的节点内(https://github.com/stas00/ml-engineering/tree/master/network#intra-node-networking)和节点间(https://github.com/stas00/ml-engineering/tree/master/network#inter-node-networking)连接以及足够快的存储(https://github.com/stas00/ml-engineering/tree/master/storage) - 没有这些,昂贵的加速器将闲置等待数据到达,你可能会浪费大量金钱并损失时间。

加速器详细信息

NVIDIA

缩写:

  • CUDA:统一计算设备架构(NVIDIA 专有)

NVIDIA 特有的 GPU 关键特征:

  • CUDA Core - 类似于 CPU 核心,但与通常有 10-100 个强大核心的 CPU 不同,CUDA Core 较弱,数量以千计,允许执行大规模通用计算(并行化)。与 CPU 核心一样,CUDA Core 在每个时钟周期执行单个操作。
  • Tensor Core - 专门设计用于执行快速乘法和加法运算(如矩阵乘法)的特殊计算单元。这些核心在每个时钟周期执行多个操作。它们可以对低精度或混合精度数据类型进行极快的计算,但会有一些精度损失(fp16、bf16、tf32、fp8 等)。这些核心专为 ML 工作负载设计。
  • 流式多处理器(SM)是 CUDA Core、Tensor Core 和其他组件的集群。

例如,A100-80GB 有:

  • 6912 个 CUDA Core
  • 432 个 Tensor Core(第 3 代)
  • 108 个流式多处理器(SM)

H100 有:

  • 16896 个 FP32 CUDA Core
  • 528 个 Tensor Core(第 4 代)
  • 132 个流式多处理器(SM)
AMD

AMD 特有的 GPU 关键特征:

  • 流处理器 - 在功能上类似于 CUDA Core - 即这些是并行计算单元。但它们并不相同,所以不能仅通过比较 CUDA Core 数量与流处理器数量来比较两个 GPU。
  • 计算单元 - 是流处理器和其他组件的集群

例如,AMD MI250 有:

  • 13,312 个流处理器
  • 208 个计算单元
Intel Gaudi2

架构(https://docs.habana.ai/en/latest/Gaudi_Overview/Gaudi_Architecture.html)

  • 芯片上集成 24 个 100 千兆以太网(RoCEv2)- 其中 21 个用于节点内,3 个用于节点间(因此节点内有21*8=168张卡(每 GPU 262.5GBps),节点间有3*8=24张卡(节点间 2.4Tbps))
  • 板载 96GB HBM2E 内存,每芯片带宽 2.45 TBps,每节点总计 768GB

一个服务器/节点由 8 个 GPU 构建,然后可以用这些服务器的机架扩展。

没有发布官方的 TFLOPS 信息(据与 Intel 代表交谈,他们也无意发布任何信息)。他们发布了以下基准测试(https://developer.habana.ai/resources/habana-models-performance/),但我不确定如何使用这些来与其他提供商进行比较。

比较:据说 Gaudi2 与 NVIDIA H100 竞争

API

部署高端 GPU 需要哪些软件?

NVIDIA

NVIDIA GPU 运行在 CUDA(https://developer.nvidia.com/cuda-toolkit)上

AMD

AMD GPU 运行在 ROCm(https://www.amd.com/en/products/software/rocm.html)上 - 注意,在 PyTorch 中,你可以在基于 ROCm 的 GPU 上使用基于 CUDA 的软件!因此,切换到最近的 AMD MI250、MI300X 和其他新兴 GPU 应该很简单。

Intel Gaudi

API 通过 Habana SynapseAI® SDK(https://habana.ai/training-software/)提供,支持PyTorch和TensorFlow。

有用的集成:

公平比较

很难比较不同产品的规格,因为几乎所有竞争对手都采用营销技巧,使人无法通过比较两组规格来了解实际差异。

只是我完全不知道该如何使用它——几乎无法理解或控制这个界面。在我看来,这个本意很好的工具因为过度设计而失去了价值,没有考虑用户如何真正受益。例如,我并不关心 CV 数据,我只想快速查看 LLM(大语言模型)相关的行,但我做不到。而且,这些比较也不是一对一的公平比较,所以我完全不知道该如何判断哪个硬件更好。

电源和散热

很可能你是租用加速器节点,由他人负责确保它们正常运行,但如果你拥有加速器,你确实需要知道如何提供足够的电源和适当的散热。

电源

一些高端消费级 GPU 显卡配有 2 个甚至 3 个 PCI-E 8 针电源插座。请确保每个插座都插入独立的 12V PCI-E 8 针电源线。不要使用同一根线分出的两个接口(也叫“猪尾线”)。也就是说,如果显卡有 2 个插座,你需要从电源(PSU)拉出两根独立的 PCI-E 8 针电源线,而不是一根线末端分出两个 PCI-E 8 针接口的那种!否则,显卡将无法发挥其全部性能。

每根 PCI-E 8 针电源线需要连接到电源的一条 12V 轨道上,每根线可提供最多 150W 的功率。

另外,有些显卡可能使用 PCI-E 12 针接口,这种接口可以提供高达 500-600W 的功率。

低端显卡可能使用 6 针接口,这类接口最多可提供 75W 的功率。

此外,你需要使用电压稳定的高端电源。某些低质量电源可能无法为显卡提供所需的稳定电压,从而导致其无法达到最佳性能。

当然,电源还需要有足够的剩余功率来支持显卡的运行。

散热

当 GPU 过热时,它会开始降频,无法发挥全部性能,如果温度过高,甚至可能关机。

很难说在 GPU 重负载时应该追求的确切最佳温度,但可能任何低于+80°C 的温度都是好的,但越低越好 - 也许 70-75°C 是一个极好的范围。降频可能在 84-90°C 左右开始。但除了降低性能外,长期的非常高温可能会减少 GPU 的寿命。

END

作者:BBuf
来源:GiantPandaCV

推荐阅读

欢迎大家点赞留言,更多 Arm 技术文章动态请关注极术社区嵌入式 AI 专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
18838
内容数
1371
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息