根据LLM参数量估算显存/内存占用

✨ Tips:文中“显存”指GPU可使用的内存空间,如有SoC使用Unified Memory(如Apple M1~M3系列、Nvidia AGX Orin等)则可简单理解为系统内存。

推理显存

对于一个70亿参数(7B)的模型,以 qwen2-7B 为例,预计需要的显存需求如下:

  • FP32浮点精度:28GB
  • BF16精度:14GB
  • int8精度:7GB

虽然其他因素也在占用显存,但推理期间使用显存的主要是参数量。

  • 比如,qwen2-7B-BF16 模型需要的显存等于参数数量乘以类型大小:70亿参数 x 2字节 = 140亿字节。因此,140亿字节 = 14 x 1,000 x 1,000 x 1,000 / 1024 / 1024 / 1024 ≈ 13 GB(考虑1000/1024)³ ≈ 0.93。

    注1:(1000/1024)³ ≈ 0.93,为了估算目的,简单地将此比率视为1。

    注2:对于7B-BF16模型,显存需求大约是7 x 2 = 14 GB。上述估算略高于精确计算,但更实用,因为推理需要超出参数之外的额外内存。

  • 假设要估算llama2-13B模型的显存需求,对应各种类型的分别是:float:13 x 4 = 52 GB,half/BF16:13 x 2 = 26 GB,int8:13 GB,int4:13 x 0.5 = 6.5 GB

阅读更多

Nvidia GPU & 算能Sophon TPU 算子耗时分析

1、Nvidia GPU

该分析方法适合onnx模型或trt模型,NV的工具栏较为易用,可使用 trtexec 命令直接输出算子耗时。注意,有些易于优化计算的算子(例如 Conv+Relu 、Conv+BN+Relu),会作为一个算子集计算,此时无法直接读取到每个独立算子的耗时。

首先需要安装Nvidia TensorRT库、CUDA ToolKit(没这俩咋玩呀),然后使用trtexec命令行工具进行推理。

示例命令:

1
trtexec --onnx=pfe+backbone_v12.onnx --loadInputs=input.1 --fp16 --exportProfile=bmap_dbg.json --verbose

其中,--onnx参数指定onnx文件路径,--loadInputs参数指定输入层name,--fp16选项指定启用FP16推理。后面的两个参数为用于分析推理过程,--exportProfile参数用于将每个算子层的耗时及占比信息存入.json文件, --verbose参数用于输出详细日志目录。

阅读更多

FastPillars-论文笔记-激光雷达点云感知算法

1
2
论文链接:https://arxiv.org/abs/2302.02367
github:https://github.com/StiphyJay/FastPillars

1 引言

目前基于激光雷达的主流方法分为基于点云的方法和基于体素的方法。前者能保留最多的几何信息,但逐点查询和遍历较为耗时;后者使用3D/2D卷积处理体素化点云,但用于提高效率的3D稀疏卷积对实际部署不友好。

PointPillars作为deploy-friendly的方法,使用对部署有利的2D卷积。但由于其使用最大池化提取每个柱体内点的特征,无法获取细粒度特征,影响最终性能(特别是对于小物体)。此外,其neck网络FPN直接融合多尺度特征,缺少充分的特征交互。尽管PillarNet提高了PointPillars的性能,但其使用了部署困难的稀疏卷积。

论文提出FastPillars,基于标准卷积,容易部署。网络包含4个部分:piller柱体编码、特征提取、特征融合和3D边界框回归。对于piller编码,提出最大-注意力柱体编码(MAPE)模块,在不引入额外计算时间的情况下自动学习局部几何模式。对于特征提取,提出紧凑而高效的主干网络CRVNet。特征融合模块中,通过层次融合不同尺度和感受野的特征丰富语义特征。3D边界框回归使用基于中心的方法。

framework_of_fpp

阅读更多

NVIDIA GPU 架构与 CUDA 算力

使用NVCC编译时,Gencodes(’-gencode‘)后带arch和code参数。arch标志(’arch‘)指定了CUDA文件将被编译的英伟达(NVIDIA®)GPU架构名称,code标志(’code‘)指定了GPU算力。例如 (’-gencode arch=compute_75,code=sm_75‘)

以下是 NVIDIA GPU 架构名称及其算力对照表:

Fermi †Kepler †Maxwell ‡PascalVoltaTuringAmpereAdaHopperBlackwell
sm_20sm_30sm_50sm_60sm_70sm_75sm_80sm_89sm_90sm_95
sm_35sm_52sm_61sm_72
(Xavier)
sm_86sm_90a (Thor)
sm_37sm_53sm_62sm_87 (Orin)

从 CUDA 9 和 11 开始,Fermi 和 Kepler 已被弃用
自 CUDA 11.6 起,Maxwell 已被弃用

阅读更多