基础环境

CPU:INTEL(R) XEON(R) PLATINUM 8558P 48 Cores 96 Threads × 2

GPU:NVIDIA H20-3e NVL 141G × 8,NVLINK × 4

MEM:2TB

SYS:Ubuntu Desktop 22.04 LTS

环境安装

八张H20 141GB显卡拥有1128G巨量显存,可以支持DeepSeek R1/V3全量部署

但客户公司没有运维人员懂如何安装显卡驱动,无奈我们软件人员为了完成任务只好接下硬件驱动安装问题。在使用常规方式安装驱动与容器工具包后,即使驱动与nvcc都能检测到显卡存在,容器内torch无法检测到正确的显卡数量导致无法正常执行推理。

root@fe29691aa24c:/vllm-workspace# python3
Python 3.12.11 (main, Jun 4 2025, 08:56:18) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
/usr/local/lib/python3.12/dist-packages/torch/cuda/__init__.py:174: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount().
Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 802: system not yet initialized (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:109.)

安装踩坑

  • 550版本驱动与H20显卡或者Ubuntu系统不兼容(不确定,没有时间继续测试了),导致开机系统加载驱动时卡死,需要尽量新版本驱动
  • .run格式驱动安装包依赖对应gcc版本,可以在/usr/bin内添加ccgcc对应版本(在570驱动下为gcc12)可执行文件的的软链接
  • 带有NVLINK桥的系统必须安装nvidia-fabricmanager依赖,否则即使驱动与nvcc显卡识别正常,torch也无法正常检测到显卡
  • nvidia-fabricmanager的大版本与小版本必须与显卡驱动完全对应,否则无法安装
  • nvidia-fabricmanager可下载的版本只有有限的一些:Index of /compute/cuda/repos/ubuntu2204/x86_64 (注意操作系统版本对应),需要首先确定可用nvidia-fabricmanager版本再确定cuda-driver、显卡驱动版本
  • 装驱动这一类动系统内核较高风险软件前,尽量提前问客户要服务器远程BMC权限,方便自己重装系统,防止后续可能出现的经常性系统级翻车带来的沟通麻烦和面子问题

正确安装步骤

  1. 确定Ubuntu系统版本
  2. 确定可下载的nvidia-fabricmanager版本并下载Index of /compute/cuda/repos/ubuntu2204/x86_64
  3. 根据可下载的fabricmanager版本找到对应的cuda-toolkit的.run文件并下载安装CUDA Toolkit Archive
    1. 配置cuda toolkit依赖:安装gcc-12;执行ln -s /usr/bin/cc /usr/bin/gcc-12
    2. 运行安装勾选驱动和toolkit安装
    3. 安装后重启
    4. 重启后系统未冻结且nvidia-smi与nvcc指令运行正常说明版本与硬件兼容良好
  4. 使用dpkg -i命令安装与驱动版本完全一致的nvidia-fabricmanager
  5. 正常安装docker、Nvidia Container Toolkit(最新版就可以)并运行工具配置docker
  6. 现在可以测试容器内torch与vllm的工作情况了

FAQ

如何确定系统是否带有NVLINK桥?

执行lspci | grep NVIDIA如果显示有bridge设备则带显卡桥

H20 大模型推理系统环境配置踩坑的更多相关文章

  1. 记一次 Spring 事务配置踩坑记

    记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...

  2. mybatis-generator:generate 生成代码配置踩坑详解

    mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一.mysql返回时间问题 错误信息: [ERROR] Failed to execute goa ...

  3. 在mac版virtual box中安装ubuntu虚拟机的NAT/Host-Only网络配置踩坑记录

    之前用惯了vmware和parallels desktop,网络配置十分智能,基本不用自己配置.由于版权原因,工作电脑上换了免费的virtual box用,四五年都完全在虚拟机里干活的本菜鸡居然在虚拟 ...

  4. XXLJOB2.1.0数据源配置踩坑记录

    最近在看XXLJOB,因为截至到发文时间最新的版本是2.1.0而且需要建立的数据库与Quartz解耦了,所以就用了最新的版本. 首先说一下踩坑过程: 代码开发完成之后,在定时跑的时候第一次跑的多数失败 ...

  5. Gradle AndroidStudio内网离线构建配置踩坑记录

    最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ...

  6. Kafka SASL ACL配置踩坑总结

    源起:工程现阶段中间件采用的是kafka.满足了大数据的高吞吐,项目间的解耦合,也增强了工程的容错率与扩展性.但是在安全这一块还有漏洞,kafka集群中,只要网站内的任何人知道kafka集群的ip与t ...

  7. LAMP环境配置踩坑2外网无法访问

    理论上我们配置LAMP环境的时候都会对httpd.config进行更改 vi /etc/httpd/conf/httpd.conf 把override node改成override all 并且开启8 ...

  8. jdk 环境配置踩坑

    其实在网上已经有很多环境配置的介绍了.不过我还是想用切身经历告诉大家这里面可能遇到的坑. 首先,先给大家讲一下JAVA_HOME,path,CLASSPATH JAVA_HOME 指向的是JDK的安装 ...

  9. Gitlab Jenkins WebHook 持续集成配置踩坑记

    Jenkins相关介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 目的 配置Gitla ...

  10. react中的路由配置踩坑记

    react 路由配置中,如果根路由(/)匹配一个组件,另一个路由(/list)在进行匹配的时候也会匹配到根路由(/),即在 /list 页面展示的时候 / 页面总是展示在上方. 此时如果想进行严格匹配 ...

随机推荐

  1. dxSpreadSheet的报表

    这个玩意还真的很棒.几乎把excel的都融进来了.现在说Repoert. In addition to all the functionality available in the Spreadshe ...

  2. SMU Autumn 2024 Trial 2

    A. Stand-up Comedian 只要a不为0,那么由于b和c是相互制约的,比如2 5 10 6这个样例,讲完两个笑话以后两个人的容量为2 2,可以选择一个人+1,一个人-1,那么就可进行mi ...

  3. ThreadPoolExecutor的内部类Worker详细解析

    一.定义 ThreadPoolExecutor 的内部类 Worker 是线程池的核心实现之一,它封装了线程和任务,并负责执行任务.Worker 类继承自 AbstractQueuedSynchron ...

  4. java8接口新特性:default、static

    java8之前接口中的方法默认类型都是public abstract,也就是抽象方法,具体实现都交给实现类.而java8对接口功能做了增强,增加了default方法和static方法,也就是说从jav ...

  5. chatGPT:清理 master 分支的文件,并让这个分支只有一个提交

    Q 我的开发工作都在 master 分支上做的,master 分支有很多的开发的时候产生的临时文件.我想清空 master 分支的历史记录.并且只保留 README.md 和 main.py A 你可 ...

  6. 遇到的问题之“动态数据源报错-recyle error java.lang.InterruptedException”

    Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决 一.线 ...

  7. 在ARM笔记本和KylinOS桌面操作系统上安装docker

    目标 手头有一台华为L420笔记本,CPU为ARM(HUAWEI Kirin 9006C),OS为Kylin桌面操作系统V10(SP1),内核5.4.96,已激活. 需要安装docker,但在软件商店 ...

  8. Gin 封装原生sql + jwt 实现 web

    最近工作之余学了一下 Go 语言, 在此之前是先学了一段时间的 rust, 真的是从入门到放弃, 根本搞不懂, 于是果断转 Go 了, 为啥不继续用 Java 呢, 就是觉得它很啰嗦, 代码量还大, ...

  9. vue3 基础-插件 plugin

    前几篇我们介绍了 mixin 混入的的方式能实现对代码的复用, 而本篇将要介绍的 plugin 将会更加适合这种通用性功能的代码的复用和扩展. 最常用的场景, 比如轮播图就非常实用 plugin 来实 ...

  10. Python 深拷贝 vs 浅拷贝

    在一些业务场景中, 有时候我们需要复制一个对象, 但是又不想对原来的对象产生影响, 就想搞个 副本 来为所欲为地操作嘛. 但是呢, 在 Python中呢, 又不能通过 赋值 的方式达到效果, 为啥呢? ...