基础环境

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. JDK8-时间格式化类-时区类-工具类--java进阶day07

    1.时间格式化类:DateTimeFormatter 1.创建方式 使用DateTimeFormatter调用ofPattern方法即可 . 2.格式化方法 创建好DateTimeFormatter对 ...

  2. 【软件】DVDStyler报错找不到VOB文件

    DVDStyler失败报错找不到VOB文件 零.错误如下 ERR: 2 opening input video file "D:\Minuhy\Desktop\dvd\t\dvd-cache ...

  3. nodejs的http请求axios

    http相关modules HTTP – the Standard Library Request Axios SuperAgent 推荐使用axios 或者super agent 使用axios和s ...

  4. 干货分享!MCP 实现原理,小白也能看懂

    不知道大家有没有发现?对于添加到 MCP 服务市场的成千上万个 MCP 服务(而且这个数字每天还在增加),我们可以不写一行代码,轻松实现调用,但背后的原因究竟是啥呢? MCP 虽然用起来很方便,但搞不 ...

  5. mybatis底层源码

    一.运行原理 二.配置文件的解析以及创建SqlSessionFactory 首先通过配置文件的文件流创建SqlSessionFactoryBuilder对象 调用build方法,传入文件流 之后通过解 ...

  6. Asp.net mvc基础(十一)数据验证

    1.获取验证失败错误 asp.net mvc会自动根据属性的类型进行基本的校验,但Asp.net mvc并不是在请求验证失败的时候抛异常,而是把决定权交给开发人员,开发人员需要决定如何处理数据校验失败 ...

  7. eolinker响应预处理:传参解决方法(响应数据截取后设置为变量)

    特别注意:需要使用全局变量或者预处理前务必阅读本链接https://www.cnblogs.com/becks/p/13713278.html 一.案例1 1.场景描述: 后一个请求需要前一个请求提供 ...

  8. MySQL 中 EXISTS 和 IN 的区别是什么?

    在 MySQL 中,EXISTS 和 IN 都用于在子查询中进行条件判断,但它们的使用场景和性能有一定区别.以下是 EXISTS 和 IN 的主要区别: 1. 功能和用法 EXISTS: EXISTS ...

  9. 29.1K star!免费接入GPT-4/DeepSeek等顶级大模型,这个开源API神器绝了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 还在为天价API费用发愁?这个开源项目让你免费畅用GPT-4.DeepSeek.Claude ...

  10. WPF封装一个懒加载下拉列表控件(支持搜索)

    因为项目中PC端前端针对基础数据选择时的下拉列表做了懒加载控件,PC端使用现成的组件,为保持两端的选择方式统一,WPF客户端上也需要使用懒加载的下拉选择. WPF这种懒加载的控件未找到现成可用的组件, ...