记一次Linux内核切换

记一次Linux内核切换

近日,准备在服务器上进行huggingface大模型的本地部署,但需要如下的环境配置:

cuda 12.2.0+Python 3.9+miniconda+pytorch2.1.2

然而当前服务器的情况如下:

操作系统:ubuntu 22.04(Linux-x86_64)
GPU:NVIDIA GeForce RTX 3090 *1
Linux 内核:6.2.0-39-generic
NVIDIA 驱动:515.105.01
CUDA runtime API:11.7(nvcc -v)
CUDA driver API:11.7(nvidia-smi)

如果要部署大模型,首先需要升级cuda版本,但已有的anaconda虚拟环境都是基于当前的驱动版本部署的,一旦出现驱动更换,很容易导致很多原有的代码无法work,因此尝试安装多个cuda驱动。
但在尝试过程中不小心更新了Linux内核,导致了如下问题

使用 nvidia-smi 命令出现错误
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

且在python代码中显示无法调用gpu.

随后开始Debug:

  1. nvcc -V (查看是不是cuda崩了 结果正常运行)
  2. ls /usr/src | grep nvidia (查看安装的nvidia驱动是否被删除,文件依然存在)
  3. sudo apt-get install dkms (尝试使用dkms:动态内核模块支持是Linux生态系统中一个功能强大的程序/框架。)
  4. sudo dkms install -m nvidia -v 515.105.01 (尝试为当前运行的内核构建特定模块:nvidia 515.105.01)

结果报错:
ERROR: Cannot create report: [Errno 17] File exists: ‘/var/crash/nvidia-kernel-source-515.0.crash’
Error! Bad return status for module build on kernel: 6.5.0-35-generic (x86_64)

随后查看报错的文件夹其中消息提示:

/var/lib/dkms/nvidia/515.105.01/build/common/inc/nv-mm.h: In function ‘NV_GET_USER_PAGES_REMOTE’:
/var/lib/dkms/nvidia/515.105.01/build/common/inc/nv-mm.h:164:45: error: passing argument 1 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types]

make[2]: *** [/usr/src/linux-headers-6.5.0-35-generic/Makefile:2039:/var/lib/dkms/nvidia/515.105.01/build] 错误 2

猜测可能是gcc和内核不匹配。发现近期更新了内核。查看内核列表:

dpkg -l |grep linux-image

发现存在两个内核,于是尝试更新默认启动的内核,步骤如下(参考:https://blog.csdn.net/u010608421/article/details/115658479):

  1. 查看内核位置

gedit /boot/grub/grub.cfg

  1. 重新启动
  2. 内核更换,work,所有问题都迎刃而解。
  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要切换Linux内核版本,可以按照以下步骤进行操作: 1. 下载所需的内核版本,可以从官方网站或其他可靠的源获取。 2. 解压下载的内核文件,进入解压后的目录。 3. 运行make menuconfig命令,进入内核配置界面,根据需要进行配置。 4. 运行make命令编译内核,这可能需要一些时间。 5. 运行make modules_install命令安装内核模块。 6. 运行make install命令安装新内核。 7. 修改/boot/grub/grub.conf文件,将默认启动的内核版本修改为新安装的版本。 8. 重启计算机,选择新安装的内核版本启动。 注意:在进行内核版本切换时,需要谨慎操作,避免出现意外情况。建议在备份数据后再进行操作。 ### 回答2: 在Linux操作系统中,内核是核心部件之一,它是操作系统的底层构件,直接与硬件进行交互。Linux内核版本的切换主要分为以下几种方式: 1.升级内核 升级内核一般是在原有的Linux操作系统的基础上升级版本。升级内核需要手动下载内核源代码,并对其进行编译和安装,常见的编译工具有GCC等。这种方式需要对Linux操作系统有一定的了解,并且需要具备较强的技术能力和工具技巧。 2.降级内核 降级内核是将当前的Linux内核版本降低到较低的版本,主要是为了解决升级后发生的问题,同时保持系统的稳定性。降级内核需要先安装低版本内核,并对内核进行编译和安装等操作,同时需要注意依赖库和配置文件的变更。 3.多内核并存 多内核并存是指在同一台机器上同时安装多个内核版本,以便用户可以在需要时选择不同的内核运行。多内核环境是Linux操作系统的保障之一,可以提供多样的应用场景和解决不同的技术需求。 4.切换启动项 切换启动项也叫切换grub选项,用户可以通过编辑grub配置文件来切换内核版本。grub是Linux的一个引导程序,负责在开机时加载内核,用户可以通过selector菜单选择不同的内核版本启动。在grub配置文件中,用户可以指定默认启动的内核版本,以及将不需要的内核版本删除。 总结:内核版本的切换可以通过多种方式进行,选择不同方式可以根据使用场景和个人技术水平做出决策。在切换内核版本时,需要注意配置文件和依赖库的变更,以免影响系统的稳定性和性能。 ### 回答3: Linux内核版本切换是在Linux系统中更新内核版本或者回滚到之前的旧版本的过程。通常情况下,内核的版本更新是为了改进系统的性能、安全性和稳定性。在进行内核版本切换前,需要先备份当前的内核版本,以便在出现问题时可以恢复到之前的状态。 Linux内核版本切换的方法有多种,以下是其中的三种常见方法: 1.手动编译安装新版本内核 首先需要从Linux官网下载需要更新到的内核版本的源代码,然后进行编译安装。这个过程需要自行处理依赖关系、解决编译错误等问题。编译安装新版本内核后,需要修改GRUB配置文件以便启动新内核。 2.利用包管理器更新内核 在有些Linux系统中,可以使用包管理器(如yum或apt-get)直接安装新版本内核。通过命令行或软件中心等方式更新内核,方便快捷。但是要注意,更新后需要重新引导系统,否则新内核将无法启动。 3.使用系统备份工具回滚到旧版本内核 当新版本内核出现问题无法正常使用时,可以使用系统备份工具(如Timeshift或Clonezilla等)回滚到之前的旧版本内核。这种方法比较安全,但是需要提前进行备份,并且不适用于需要更新内核以修复漏洞的情况。 需要注意的是,在更新或回滚内核版本时,需要根据不同的Linux发行版和版本号选择正确的更新方法和适配的内核。同时,更新后需要重新进行相应的配置和测试,以确保系统能够正常使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值