运行深度学习的环境理解及安装;cosyvoice的GPU推理实现;请求头中的请求体编码规则书;
运行深度学习的环境理解及安装;
回顾一下深度学习运行环境问题,与后面遇到的大坑有关,如有不对请指正;
深度学习的环境理解
运行深度学习,必须要安装NVIDIA Driver(显卡驱动)。
CUDA(准确叫 CUDA Runtime)、CUDA Toolkit(开发工具包)以及cuDNN(深度学习加速库)反而是选装。
-
NVIDIA Driver(显卡驱动)(系统必须安装)
对应查看命令nvidia-smi(注意:显示的 CUDA 12.8 是驱动支持的最高 CUDA 版本) -
CUDA(准确叫 CUDA Runtime)(可选安装)(一般可由pytorch自带)
GPU 程序运行时用的动态库 -
CUDA Toolkit(开发工具包)(系统可选安装)
CUDA Toolkit包含CUDA + 编译器 + SDK + 工具;
系统级安装它主要是防止一些库系统级的调用,对应验证命令nvcc --version -
cuDNN(深度学习加速库)(系统可选安装)
专门给 CNN / Transformer 用的 GPU 库;
PyTorch、ORT、TensorRT 都严重依赖它,系统中安装它主要是防止一些库系统级的调用; -
PyTorch(最容易让人混的)
PyTorch基本都自带了CUDA Runtime、cuDNN、cuBLAS、cuFFT、NCCL;
但是有些库(flash-attn)不会使用PyTorch自带的CUDA Runtime或者cuDNN。
PyTorch 自带 CUDA,是“私有”的,系统 CUDA + cuDNN,是“公共的”。
cosyvoice的GPU推理实现;
cosyvoice部署完以后,发现根本就没有用GPU进行推理,原因是ONNX Runtime GPU找不到 libcudnn.so.8;
找不到 libcudnn.so.8 → 这是 NVIDIA cuDNN 库,cuDNN 是 CUDA 的深度学习加速库。
ONNX Runtime 尝试使用 CUDA GPU 加速(CUDAExecutionProvider);
系统中没有安装对应版本的cuDNN 库,而ONNX Runtime也没有用PyTorch的cuDNN,于是就产生了这个问题;
ONNX Runtime GPU 没有用 PyTorch wheel 里的 cuDNN,它就去找系统里的cuDNN
- PyTorch GPU ✅ 能跑
- ONNX Runtime GPU ❌ 找不到cuDNN的libcudnn.so.8
所以 GPU 推理失败,ONNX 会退回 CPU 推理。
要让 ONNX Runtime 正常用 GPU,需要安装cuDNN到系统里面;
请求头中的请求体编码规则书;
因为以前没用过拿python做服务,所以看到python直接从请求体直接拿参数有点懵,于是再重新整理一下;
请求头中Content-Type其实就是告诉后端:
我接下来 body 里的内容,指定的规则进行解析
Content-Type:text/plain👉请你 按 text 规则解析application/json👉请你 按 json 规则解析application/x-www-form-urlencoded👉简单 key-valuemultipart/form-data👉请求规则解析里可以混:文本 + JSON + 文件
之前所有的模型都需要传文件,一直都是用的multipart/form-data规则解析
UploadFile + JSON Form,
JSON Form有两种校验方式:
- 通过后端json.loads转为json格式,
- 更优雅一点通过以下方式👇结构校验
class Config(BaseModel):
texts: list[str]
threshold: float
config_obj = Config.model_validate_json(config)
所以请求中没有文件就可以用application/json规则解析,直接从请求体拿参数最方便;
但只要请求里有文件,真实的 Content-Type 一定是 multipart/form-data,JSON 只能“塞进字符串里”,不能当顶层结构
浙公网安备 33010602011771号