【踩坑笔记】Nvidia T4计算卡在Windows服务器使用docker

1、背景

业务上有个需求,希望在 Windows Server 2022 内通过 wsl2 部署 docker 运行类似 Ollama 的 GPU 服务。但 T4 计算卡使用通用方案直接安装官网下载的 GPU 驱动 + docker desktop 无法在 docker 内调用 GPU。

具体表现为:wsl 内nvidia-smi命令正常;nvcc -V命令正常,docker 内nvidia-smi命令异常。网上找到修改注册表可以强启WDDM模式,尝试后,docker 内能看到 GPU,但程序无法调用。

阅读更多

根据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参数用于输出详细日志目录。

阅读更多

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 已被弃用

阅读更多