Ubuntu 18.04 离线安装 CUDA 11.2 + cuDNN 8.2 (修复 Paddle 缺少 .so 报错)

适用场景: Ubuntu 18.04, ROS Melodic, PaddlePaddle, 只有本地安装包,网络不佳或为了避免依赖冲突。

1. 安装 CUDA 11.2 (只装核心组件)

为了避免安装整个 CUDA 包时触发 Java 依赖(Nsight工具)导致安装失败或系统冲突,我们只安装编译器和数学库

在包含 .deb 文件的目录下执行:

bash 复制代码
# 1. 安装本地仓库包
sudo dpkg -i cuda-repo-ubuntu1804-11-2-local_11.2.2-461.38-1_amd64.deb

# 2. 添加密钥 (根据终端提示执行,通常是下面这句)
sudo apt-key add /var/cuda-repo-ubuntu1804-11-2-local/7fa2af80.pub

# 3. 更新源
sudo apt-get update

# 4. 【关键】只安装编译器、数学库和命令行工具 (避开图形界面和Java)
sudo apt-get install cuda-compiler-11-2 cuda-libraries-dev-11-2 cuda-command-line-tools-11-2

2. 安装 cuDNN 8.2.1

在包含 .tgz 文件的目录下执行:

bash 复制代码
# 1. 解压
tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz

# 2. 拷贝头文件到 CUDA 目录
sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.2/include

# 3. 拷贝库文件到 CUDA 目录 (注意 -P 保留软链)
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-11.2/lib64

# 4. 赋予读取权限
sudo chmod a+r /usr/local/cuda-11.2/include/cudnn*.h /usr/local/cuda-11.2/lib64/libcudnn*

3. 【重点】修复 Paddle/ROS 报错 (libcublas.so / libcusolver.so not found)

问题原因: CUDA 安装后生成的库名带有版本号(如 libcusolver.so.11),但 Paddle 推理库死板地寻找不带版本号的文件名(libcusolver.so)。

解决方法: 创建软链接骗过程序。一次性执行下面所有命令,预防未来报错:

bash 复制代码
cd /usr/local/cuda-11.2/lib64

# 修复 libcublas 报错
sudo ln -sf libcublas.so.11 libcublas.so

# 修复 libcusolver 报错
sudo ln -sf libcusolver.so.11 libcusolver.so

# 预防性修复其他常见数学库 (cufft, curand 等)
sudo ln -sf libcufft.so.10 libcufft.so
sudo ln -sf libcurand.so.10 libcurand.so
sudo ln -sf libcusparse.so.11 libcusparse.so
sudo ln -sf libnppc.so.11 libnppc.so

4. 配置环境变量

确保 ~/.bashrc 中有以下内容:

bash 复制代码
export CUDA_HOME=/usr/local/cuda-11.2
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

生效并验证:

bash 复制代码
source ~/.bashrc
nvcc -V
# 输出 release 11.2 即为成功

补充:关于 TensorRT 警告

如果运行日志出现黄色警告:TensorRT dynamic library is not found。

  • 如果你的算法必须用 TensorRT 加速,则需要去 NVIDIA 官网下载对应 CUDA 11.2 的 TensorRT 8.x 包并解压配置。

  • 如果不需要,可在 ROS launch 文件中将 use_tensorrt 设为 false 忽略警告。

相关推荐
神梦流38 分钟前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫40 分钟前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
xuhe21 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_1 小时前
【Linux】进程信号(下半)
linux·运维·服务器
liuniu08181 小时前
VMware虚拟机安装ubuntu2022
ubuntu·ros
酉鬼女又兒2 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面2 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
zl_dfq2 小时前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke2332 小时前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器