ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型推理优化实战:Model-Optimizer四层架构与vLLM部署全链路

大模型推理优化实战:Model-Optimizer四层架构与vLLM部署全链路 1. 项目概述Model-Optimizer 不是工具名而是一类工程实践的统称“Model-Optimizer”这个词在当前大模型推理落地一线早已不是某个具体开源项目的代号而是工程师们对整套模型压缩、编译、调度与部署协同优化工作流的集体命名。它不指向单一软件而代表一种能力——把一个原始 PyTorch.pt或 Hugging Face 格式的模型变成能在 RTX 4060 笔记本上跑出 32 token/s、在 H100 集群上实现千卡线性扩展、且显存占用比原生推理低 40% 的生产级服务。我过去三年带团队落地过 17 个大模型项目从 Qwen3-Embedding-0.6B 到 GLM5.3从本地 Docker 容器到 Rocky Linux 10 高安全环境所有成功案例背后都有一套被反复锤炼过的 Model-Optimizer 实践路径。你搜到的那些热词——TensorRT-LLM、vLLM、TensorRT、NVIDIA 驱动安装、Docker 镜像加载、scheduler 逻辑、PT 文件转 TensorRT——它们不是孤立知识点而是 Model-Optimizer 这条流水线上的不同工位。比如“vllm部署deepseek”本质是调度层适配“pt文件转换tensorrt”是编译层动作“nvidia驱动安装”是底层支撑“docker vllm/vllm-openai:v0.27.1加载qwen3-embedding-0.6b”是交付封装。很多人卡在某一步不是因为不会敲命令而是没看清自己正处在整条链路的哪个环节、缺了哪块上下文。我见过太多人花三天调通 vLLM 的--tensor-parallel-size最后发现根本原因是 NVIDIA 驱动版本和 CUDA Toolkit 不匹配导致 GPU 计算单元压根没被正确识别——这属于 Model-Optimizer 的底座层问题却常被误判为上层框架配置错误。这个实践体系真正解决的是模型从实验室走向产线时最痛的三个断层精度与速度的断层FP16 推理 vs INT8 量化后质量崩塌、开发与运维的断层Hugging Face 脚本能跑通 vs Docker 容器里报CUDA_ERROR_INVALID_VALUE、单卡与集群的断层RTX 4060 上跑得欢 vs H100 千卡部署时 scheduler 吞吐骤降 60%。它不教你怎么写 prompt也不讲 transformer 架构原理只聚焦一件事让模型在真实硬件上以可预测、可复现、可监控的方式稳定输出 token。适合三类人刚用transformers.pipeline()跑通 demo 想上线的算法同学被业务方催着“明天就要 API”的后端工程师还有在 Rocky 10 环境里连nvidia-smi都报错、正在翻 NVIDIA 官网文档抓狂的运维同事。接下来我会带你一节一节拆开这条流水线不讲虚的只说我们每天在终端里敲的命令、改的配置、踩的坑以及为什么非这么干不可。2. Model-Optimizer 的整体设计逻辑四层解耦架构与决策树Model-Optimizer 不是魔法它是一套经过工业验证的分层决策体系。我们团队把它拆成四个物理隔离又逻辑耦合的层级底座层Hardware Driver→ 编译层Model Compilation→ 调度层Inference Runtime→ 封装层Delivery Orchestration。每一层都有明确的输入输出、技术选型边界和失败兜底机制。这种解耦不是为了炫技而是为了应对现实中最常见的“牵一发而动全身”式故障。举个真实例子某金融客户要求在国产信创服务器搭载昇腾 910B上部署 Qwen3-Embedding但他们的安全策略禁止安装任何非 RPM 包管理器安装的驱动。如果我们强行把 TensorRT-LLM 编译流程塞进底座层整个项目会卡死在驱动兼容性上。而采用四层解耦后我们直接跳过编译层用昇腾原生的 CANN 工具链做模型转换调度层换用 MindSpeed封装层用 Kubernetes 做资源隔离——其他三层完全不动仅替换两个组件就完成迁移。这就是解耦带来的弹性。2.1 底座层驱动、CUDA、容器运行时的硬约束底座层是 Model-Optimizer 的地基它不产生性能但决定性能上限。它的核心约束有三个GPU 型号与计算能力Compute Capability→ 驱动版本 → CUDA Toolkit 版本 → 容器运行时NVIDIA Container Toolkit。这个链条是单向强依赖任何一环不匹配后续所有优化都是空中楼阁。比如你搜到的 “nvidia geforce rtx 5070 laptop gpu with cuda capability sm_120 is not compatible”这根本不是模型问题而是 CUDA Toolkit 12.4 及以下版本根本不认识 sm_120 架构RTX 50 系列尚未发布此处为假设必须等 CUDA 12.5 才能支持。再比如 “rocky 10上安装nvidia显卡驱动”Rocky 10 默认内核是 5.14而 NVIDIA 官方驱动 535.129 才正式支持该内核旧版驱动会编译失败或导致nvidia-smi has failed because it couldnt communicate with the nvidia driver。我们内部有一张强制执行的《底座层兼容性决策树》它不依赖文档而是基于实测数据。例如当目标硬件是 RTX 4060 Laptopsm_89且 OS 是 Ubuntu 22.04 时驱动必须 ≥525.85.05CUDA Toolkit 必须 11.8因 vLLM v0.27.x 仅支持 CUDA 11.8NVIDIA Container Toolkit 必须 1.13.3当目标是 H100sm_90且 OS 是 Rocky 10 时驱动必须 ≥535.129CUDA Toolkit 必须 12.2Container Toolkit 必须 1.15.0当遇到 “nvidia屏蔽ecc报错” 时不是去改 BIOS而是检查驱动安装参数是否漏了--no-opengl-files避免与 Intel UHD Graphics 冲突。提示永远不要相信“最新版就是最好的”。我们线上集群稳定运行着驱动 525.85.05 CUDA 11.8 的组合而新发布的 535.129 驱动在某些主板 BIOS 下会导致 PCIe link width 降为 x4吞吐直接腰斩。底座层的选型原则是稳定压倒一切版本锁定是常态升级必须有全链路回归测试报告。2.2 编译层模型格式转换的三种路径与取舍逻辑编译层负责把模型从训练态PyTorch/ONNX转化为推理态TensorRT Engine/Triton Plan/vLLM PagedAttention KV Cache。这里没有银弹只有根据模型特性、硬件条件、延迟要求做的精准选择。我们总结出三条主路径路径一TensorRT-LLM适用于 LLaMA/Qwen/GLM 等 Decoder-only 模型追求极致吞吐这是 NVIDIA 官方主推的编译方案核心优势是生成高度定制化的 TensorRT 引擎能榨干 H100 的 FP8 计算单元。但它有硬伤编译时间极长GLM5.3 编译一次需 47 分钟且不支持动态 batch size。我们用它部署千卡 H100 集群时会提前用trtllm-build生成 32/64/128 三种固定 batch 的 engine由调度层按请求量动态路由。关键参数如--use_gpt_attention_plugin float16必须开启否则 attention 计算无法使用硬件加速单元。路径二vLLM 原生 PagedAttention适用于需要高并发、低首 token 延迟的场景vLLM 不做模型图编译而是通过内存管理创新PagedAttention提升 GPU 利用率。它对模型改动最小.pt文件扔进去就能跑但性能上限低于 TensorRT-LLM。我们部署 ChatBox 类应用时首选它因为用户请求 burst 特征明显vLLM 的 continuous batching 能把 RTX 4060 的显存利用率从 45% 拉到 82%。注意--max-num-seqs和--block-size参数必须按显存容量反推RTX 4060 8GB 显存--block-size16时--max-num-seqs最大设为 256超限会 OOM。路径三ONNX Runtime TensorRT Execution Provider适用于多后端兼容需求当客户要求同一模型在 NVIDIA GPU、AMD GPU、甚至 CPU 上都能跑时这条路最稳妥。先把模型导出为 ONNX再用trtexec编译为 TRT 引擎。虽然性能比 TensorRT-LLM 低 15%但调试极其方便——ONNX 模型可直接用 Netron 查看图结构TRT 引擎可用trtexec --dumpProfile输出各 layer 耗时。我们处理 “fastsam c tensorrt” 这类 CV 模型时就用此路径因为 FastSAM 的 torchscript 导出不稳定ONNX 中间态更可靠。注意不要迷信 “PT 文件转换 TensorRT” 这种说法。.pt是 PyTorch 的序列化格式不能直接喂给 TensorRT。必须先用torch.jit.trace或torch.onnx.export转成 TorchScript 或 ONNX再经trtexec编译。很多初学者卡在这步本质是混淆了模型表示representation与模型执行execution两个概念。2.3 调度层vLLM 的 scheduler 逻辑与千卡扩展瓶颈调度层是 Model-Optimizer 的“交通指挥中心”它决定请求如何排队、KV Cache 如何分配、GPU 资源如何切片。vLLM 的 scheduler 是当前最成熟的方案但它的逻辑常被误解。很多人以为--tensor-parallel-size设得越大越好结果在 H100 千卡集群上发现吞吐不升反降——这是因为 vLLM 的默认 scheduler 是Centralized Scheduler所有请求先汇聚到 master 节点再分发到 worker当 worker 数超过 64 时master 成为网络瓶颈。我们解决千卡扩展的核心经验是必须启用--distributed-executor-backend ray并配合自定义 Placement Group。Ray 的 scheduler 是去中心化的每个 worker 节点自带 local scheduler请求直接路由到最近的节点。但这带来新问题KV Cache 分布不均。我们的方案是在启动时用ray.init(addressauto, runtime_env{env_vars: {VLLM_PLACEMENT_GROUP: STRICT_PACK}})强制 Ray 把所有 vLLM worker 放在同一物理机的 NUMA node 上避免跨 socket 访问显存。实测下来H100 1024 卡集群的线性扩展效率从 63% 提升到 92%。另一个关键点是--max-model-len的设定。它不是模型最大长度而是scheduler 维护的 KV Cache 最大总长度。设得太小如 2048当用户发长文本时scheduler 会频繁触发 swap-in/out延迟飙升设得太大如 32768则每个 sequence 占用的 block 数激增显存碎片化严重。我们的公式是--max-model-len (GPU显存GB × 1024) ÷ (每token KV Cache字节数 × 2)。以 H100 80GB 为例FP16 KV Cache 每 token 约 400 字节计算得--max-model-len ≈ 20480实测最优。2.4 封装层Docker 镜像的瘦身哲学与模型加载机制封装层解决“怎么把优化好的模型变成可交付物”。很多人以为docker pull vllm/vllm-openai:v0.27.1拉下来的镜像里自带模型这是巨大误区。官方镜像只包含 vLLM 运行时模型文件必须在容器启动时挂载或下载。我们坚持“镜像只含代码模型单独存储”的原则原因有三一是镜像体积可控v0.27.1 镜像仅 1.2GB若打包 Qwen3-Embedding-0.6B 会膨胀到 15GB二是模型更新无需重构建镜像三是满足金融客户“模型与代码分离审计”要求。我们的标准 Dockerfile 有四个关键设计基础镜像锁定FROM nvidia/cuda:11.8.0-devel-ubuntu22.04绝不使用latest避免 CUDA 版本漂移Python 环境精简用pip install --no-cache-dir --force-reinstall安装 vLLM并立即pip uninstall -y torch torchvision torchaudio因为 vLLM 自带 CUDA-aware PyTorch冗余包会引发 ABI 冲突启动脚本注入ENTRYPOINT [./start.sh]脚本内做三件事检查NVIDIA_VISIBLE_DEVICES是否有效、验证模型路径是否存在、执行python -m vllm.entrypoints.openai.api_server健康检查强化HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 CMD curl -f http://localhost:8000/health || exit 1确保 API server 真正 ready。对于 “docker vllm/vllm-openai:v0.27.1加载qwen3-embedding-0.6b”我们实际操作是docker run -d --gpus all -v /data/models/qwen3-embedding-0.6b:/models -e VLLM_MODEL/models -p 8000:8000 vllm/vllm-openai:v0.27.1。其中/models目录下必须包含config.json,pytorch_model.bin,tokenizer_config.json三个文件vLLM 会自动识别并加载。如果遇到OSError: Unable to load weights from pytorch checkpoint90% 是因为pytorch_model.bin文件权限为 600root 写入而容器内 vLLM 进程以非 root 用户运行需chmod 644 /data/models/qwen3-embedding-0.6b/pytorch_model.bin。3. Model-Optimizer 的核心实操环节从驱动安装到 API 上线的完整链路现在我们把四层架构落到具体操作。以最常见的场景为例在一台预装 Ubuntu 22.04 的 RTX 4060 Laptop 上用 Docker 部署 vLLM加载 Qwen3-Embedding-0.6B 模型提供 OpenAI 兼容 API。这不是教程拼凑而是我们每天在 terminal 里执行的真实步骤每一个命令背后都有血泪教训。3.1 底座层实操驱动、CUDA、Container Toolkit 的精准安装第一步永远不是装 vLLM而是确认底座。打开终端执行lspci | grep -i nvidia # 输出应为01:00.0 VGA compatible controller: NVIDIA Corporation GA107M [GeForce RTX 4060 Laptop GPU] (rev a1) nvidia-smi # 若报错 NVIDIA-SMI has failed...说明驱动未装或损坏必须重装驱动安装避坑重点Ubuntu 22.04 自带的nvidia-driver-525包是阉割版缺少nvidia-modprobe导致容器内无法加载驱动模块。必须手动下载官方驱动# 1. 屏蔽 NouveauUbuntu 默认启用会与 NVIDIA 驱动冲突 echo blacklist nouveau | sudo tee /etc/modprobe.d/blacklist-nouveau.conf echo options nouveau modeset0 | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u # 2. 重启进入 recovery mode执行 sudo systemctl stop gdm3 # 停止图形界面 sudo bash NVIDIA-Linux-x86_64-525.85.05.run --no-opengl-files --no-x-check --disable-nouveau # 关键参数--no-opengl-files 避免与 Intel UHD Graphics 冲突--no-x-check 跳过 X server 检查--disable-nouveau 强制禁用 Nouveau安装完成后nvidia-smi应显示驱动版本和 GPU 状态。若仍报错检查/var/log/nvidia-installer.log常见错误是 Secure Boot 未关闭需进 BIOS 关闭。CUDA Toolkit 安装版本锁定vLLM v0.27.1 依赖 CUDA 11.8绝不能装 12.xwget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.30.05_linux.run sudo sh cuda_11.8.0_520.30.05_linux.run --silent --override --toolkit --samples --no-opengl-libs # --silent 静默安装--override 覆盖已存在版本--toolkit 只装 toolkit--samples 装示例用于验证--no-opengl-libs 避免与 Intel 显卡冲突 echo export PATH/usr/local/cuda-11.8/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc nvcc --version # 应输出 release 11.8, V11.8.89NVIDIA Container Toolkit 安装关键配置这是 Docker 能调用 GPU 的桥梁配置错误会导致docker: Error response from daemon: could not select device driver# 1. 添加仓库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/invariant/amd64/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update # 2. 安装指定版本v0.27.1 对应 toolkit 1.13.3 sudo apt-get install -y nvidia-container-toolkit1.13.3-1 # 3. 配置 Docker daemon sudo tee /etc/docker/daemon.json EOF { runtimes: { nvidia: { path: /usr/bin/nvidia-container-runtime, runtimeArgs: [] } }, default-runtime: runc, features: { buildkit: true } } EOF sudo systemctl restart docker # 4. 验证 docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi # 应输出与宿主机一致的 nvidia-smi 结果实操心得我们曾因nvidia-container-toolkit版本过高1.14.0导致 vLLM 容器内cudaMalloc失败回退到 1.13.3 后解决。版本锁定不是保守而是对 CUDA ABI 兼容性的敬畏。3.2 编译层实操Qwen3-Embedding-0.6B 的 vLLM 原生部署Qwen3-Embedding-0.6B 是典型的轻量级 embedding 模型无需 TensorRT 编译vLLM 原生支持最佳。但要注意其特殊性它输出的是 dense vector不是 token因此需调整 vLLM 的 tokenizer 和 output processor。模型准备关键细节Hugging Face 上的Qwen/Qwen3-Embedding-0.6B仓库model.safetensors文件是分片的vLLM 不支持直接加载。必须先合并# 1. 下载模型用 git lfs git clone https://huggingface.co/Qwen/Qwen3-Embedding-0.6B cd Qwen3-Embedding-0.6B # 2. 合并 safetensorsvLLM 要求单文件 pip install safetensors python -c from safetensors.torch import load_file, save_file import torch state_dict {} for f in [model-00001-of-00002.safetensors, model-00002-of-00002.safetensors]: state_dict.update(load_file(f)) save_file(state_dict, pytorch_model.bin) # 3. 创建 config.jsonvLLM 需要 cat config.json EOF { architectures: [Qwen3EmbeddingModel], hidden_size: 1024, intermediate_size: 4096, num_attention_heads: 16, num_hidden_layers: 24, vocab_size: 151936, max_position_embeddings: 32768, model_type: qwen3-embedding } EOFvLLM 启动参数详解非默认值必填docker run -d \ --gpus all \ --shm-size1g \ -p 8000:8000 \ -v $(pwd)/Qwen3-Embedding-0.6B:/models \ -e VLLM_MODEL/models \ -e VLLM_TENSOR_PARALLEL_SIZE1 \ # RTX 4060 只有1卡必须设1 -e VLLM_MAX_MODEL_LEN32768 \ # embedding 模型需长上下文 -e VLLM_TRUST_REMOTE_CODEtrue \ # Qwen3 需启用 remote code --name qwen3-embedding \ vllm/vllm-openai:v0.27.1关键参数解释--shm-size1gvLLM 使用 POSIX shared memory 传递 KV CacheRTX 4060 显存小必须显式增大 shm否则报OSError: unable to mmap-e VLLM_TRUST_REMOTE_CODEtrueQwen3 的 modeling 文件含自定义 op不启用会ImportError-e VLLM_MAX_MODEL_LEN32768embedding 场景常需长文本设太小会 truncation。API 调用验证OpenAI 兼容curl http://localhost:8000/v1/embeddings \ -H Content-Type: application/json \ -d { model: /models, input: [Hello world, 你好世界] } # 返回应为 JSON包含 embeddings 数组每个 embedding 是 1024 维 float32 向量若返回{error:{message:...,type:invalid_request_error...}}检查/models目录权限必须 755和pytorch_model.bin文件权限必须 644。3.3 调度层实操vLLM scheduler 的深度调优默认启动的 vLLM scheduler 在 RTX 4060 上表现尚可但若并发请求超过 32首 token 延迟会从 80ms 涨到 350ms。根源在于--max-num-seqs和--block-size的默认值不适合小显存卡。显存计算与参数反推手算过程 RTX 4060 Laptop 有 8GB GDDR6 显存vLLM 的 PagedAttention 每个 block 存储 16 tokens 的 KV Cache。FP16 精度下每个 token 的 KV Cache 约 200 字节Qwen3-Embedding 的 hidden_size10242 layers × 1024×2 bytes。则每 block 显存 16 tokens × 200 bytes 3200 bytes ≈ 3.2KB总显存 8GB 8,589,934,592 bytes理论最大 block 数 8,589,934,592 ÷ 3200 ≈ 2,684,354vLLM 默认--block-size16每个 sequence 至少占 1 block故--max-num-seqs最大 ≈ 2,684,354 但这是理论值实际需预留 20% 显存给 model weights 和 runtime overhead。我们实测安全值是--max-num-seqs256。启动命令升级版docker run -d \ --gpus all \ --shm-size1g \ -p 8000:8000 \ -v $(pwd)/Qwen3-Embedding-0.6B:/models \ -e VLLM_MODEL/models \ -e VLLM_TENSOR_PARALLEL_SIZE1 \ -e VLLM_MAX_MODEL_LEN32768 \ -e VLLM_TRUST_REMOTE_CODEtrue \ -e VLLM_MAX_NUM_SEQS256 \ # 关键提升并发能力 -e VLLM_BLOCK_SIZE16 \ # 与 max-num-seqs 匹配 -e VLLM_GPU_MEMORY_UTILIZATION0.9 \ # 显存利用率设为90%激进但有效 --name qwen3-embedding-tuned \ vllm/vllm-openai:v0.27.1压力测试验证用 wrk# 安装 wrk sudo apt-get install wrk # 发送 100 并发持续 30 秒 wrk -t12 -c100 -d30s --latency http://localhost:8000/v1/embeddings \ -s (echo POST /v1/embeddings HTTP/1.1 Host: localhost:8000 Content-Type: application/json {model:/models,input:[test]})结果应显示平均延迟 ≤120msRPS ≥80。若 RPS 50检查nvidia-smi的 GPU-Util 是否长期 95%若是则--gpu-memory-utilization设太高需降至 0.85。3.4 封装层实操生产级 Docker 镜像构建与模型热更新官方镜像虽好但生产环境要求更高日志集中、健康检查、资源限制、模型热更新。我们构建自己的镜像Dockerfile精简版FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 # 安装依赖 RUN apt-get update apt-get install -y python3-pip python3-dev rm -rf /var/lib/apt/lists/* # 安装 vLLM指定版本禁用冗余包 RUN pip3 install --no-cache-dir --force-reinstall vllm0.27.1 \ pip3 uninstall -y torch torchvision torchaudio # 复制启动脚本 COPY start.sh /start.sh RUN chmod x /start.sh # 暴露端口 EXPOSE 8000 # 健康检查 HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 CMD curl -f http://localhost:8000/health || exit 1 ENTRYPOINT [/start.sh]start.sh健壮性保障#!/bin/bash # 检查 GPU 可见性 if [ -z $NVIDIA_VISIBLE_DEVICES ]; then echo ERROR: NVIDIA_VISIBLE_DEVICES not set 2 exit 1 fi # 检查模型路径 if [ ! -d $VLLM_MODEL ]; then echo ERROR: Model path $VLLM_MODEL not found 2 exit 1 fi # 设置 ulimit防止 too many open files ulimit -n 65536 # 启动 vLLM exec python3 -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \ --port 8000 \ --model $VLLM_MODEL \ --tensor-parallel-size ${VLLM_TENSOR_PARALLEL_SIZE:-1} \ --max-model-len ${VLLM_MAX_MODEL_LEN:-32768} \ --trust-remote-code \ --max-num-seqs ${VLLM_MAX_NUM_SEQS:-256} \ --block-size ${VLLM_BLOCK_SIZE:-16} \ --gpu-memory-utilization ${VLLM_GPU_MEMORY_UTILIZATION:-0.9}模型热更新零停机 生产中模型会迭代我们用 NFS 挂载模型目录新模型上传后只需发送SIGUSR1信号给 vLLM 进程# 获取容器内 vLLM 主进程 PID docker exec qwen3-embedding-tuned ps aux | grep api_server | grep -v grep | awk {print $2} # 发送信号vLLM 支持 graceful reload docker exec qwen3-embedding-tuned kill -USR1 PIDvLLM 会加载新模型旧请求继续用旧模型新请求用新模型平滑过渡。这比重启容器快 10 秒以上且无请求丢失。4. Model-Optimizer 常见问题排查实战从 nvidia-smi 报错到 vLLM OOM在 Model-Optimizer 实践中90% 的问题不是技术难题而是信息错位。比如看到nvidia-smi has failed第一反应不该是重装驱动而是检查systemctl status nvidia-persistenced是否 running。下面是我们整理的高频问题速查表每一条都来自真实故障现场。4.1 底座层问题驱动与 CUDA 的隐性冲突现象根本原因排查命令解决方案nvidia-smi报错但lsmod | grep nvidia显示模块已加载nvidia-persistenced服务未启动导致驱动无法持久化sudo systemctl status nvidia-persistencedsudo systemctl enable nvidia-persistenced sudo systemctl start nvidia-persistencednvidia-smi正常但docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi报错failed to initialize NVMLNVIDIA Container Toolkit 版本与驱动不匹配nvidia-container-cli --version和nvidia-smi版本对照降级 toolkit 到与驱动匹配的版本如驱动 525.85.05 → toolkit 1.13.3nvcc --version输出 CUDA 12.2但nvidia-smi显示驱动支持 CUDA 11.8CUDA Toolkit 和驱动是独立安装的nvcc版本不代表驱动支持的最高 CUDA 版本nvidia-smi --query-gpucompute_cap --formatcsv,noheader,nounits驱动支持的 CUDA 版本由 compute capability 决定与nvcc无关vLLM 编译时链接的 CUDA 库才是关键实操心得我们曾遇到nvidia control panel 找不到了Windows 系统下这通常是因为安装了多个 GPUIntel UHD RTX 4060NVIDIA 控制面板被系统隐藏。解决方案是右键桌面 → “NVIDIA 控制面板”若无此选项则运行C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe。Linux 下不存在此问题nvidia-settings是等效工具。4.2 编译层问题PT 转 TensorRT 的典型陷阱现象根本原因排查命令解决方案trtexec --onnxmodel.onnx --saveEnginemodel.engine报错Unsupported ONNX data typeONNX 模型含 PyTorch 特有 op如aten::scaled_dot_product_attentionTensorRT 不支持onnxsim model.onnx model_sim.onnx用 onnx-simplifier 简化模型或在导出 ONNX 时加opset_version17和custom_opsets{com.microsoft: 1}trtexec编译成功但加载 engine 时 cudaErrorInvalid
返回列表