小白的实验室服务器深度学习环境配置指南

安装nvidia

本文在ubuntu server 22.04上实验成功,其他版本仅供参考

注意,本文仅适用于ubuntu server,不需要图形界面,没有对图形界面进行特殊考虑和验证!依赖图形操作界面的读者慎用

查看是否安装了gcc

gcc -v

若没有安装,则输入下面的命令,直接把包括gcc在内很多开发工具包一同安装

sudo apt-get install build-essential

禁用nouveau驱动

编辑 /etc/modprobe.d/blacklist-nouveau.conf 文件,添加以下内容:

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

关闭nouveau:

echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

注意,本文仅适用于ubuntu server,不需要图形界面,没有对图形界面进行特殊考虑和验证!依赖图形操作界面的读者慎用!

完成后,重新生成内核并重启:

sudo update-initramfs -u
sudo reboot

重启后,执行:lsmod | grep nouveau。如果没有屏幕输出,说明禁用nouveau成功。否则,应重新执行第禁用nouveau驱动小节。

因为实验室服务器不方便重启,我没有重启,但执行:lsmod | grep nouveau,没有屏幕输出,说明禁用nouveau成功。

安装驱动

使用命令ubuntu-drivers devices获取可用驱动信息,如果命令不存在自己安装一下。

输出为:

== /sys/devices/pci0000:72/0000:72:00.0/0000:73:00.0 ==
modalias : pci:v000010DEd00002204sv00001028sd00003880bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA102 [GeForce RTX 3090]
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

注意recommend的版本是535,加上是在服务器上安装,初步确定安装nvidia-driver-535-server

还可以查看内核中nvidia的版本:cat /proc/driver/nvidia/version

输出为:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  535.129.03  Thu Oct 19 18:56:32 UTC 2023
GCC version:  gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 

可以看到版本是535

因此执行命令安装:sudo apt install nvidia-driver-535-server

等待安装完成后,执行nvidia-smi可以输出gpu监控界面,则驱动安装成功!

执行nvidia-smi的输出结果

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03             Driver Version: 535.129.03   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3090        Off | 00000000:73:00.0 Off |                  N/A |
| 55%   66C    P2             163W / 350W |   1575MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A   1331109      C   python3                                    1562MiB |
+---------------------------------------------------------------------------------------+

上图显示的显卡信息,第一行是版本信息,第二行是标题栏,第三行是具体的显卡信息。如果有多个显卡,就会有多行对应标题栏的信息。例如我上面显示了共0~4号,共5个卡。

  • GPU:显卡编号,从0开始。
  • Fan:风扇转速,在0~100%之间变动。这个速度是计算机期望的风扇转速,实际情况下如果风扇堵转,可能就不会显示具体转速值。有的设备不会返回转速,因为它不依赖风扇冷却,而是通过其他外设保持低温,比如我们实验室的服务器是常年放在空掉房间里面的。
  • Name:显卡名,以上都是Tesla。
  • Temp:显卡内部的温度,以上分别是54、49、46、50、39摄氏度。
  • Perf:性能状态,从P0到P12,P0性能最大,P12最小 。
  • Persistence-M:持续模式的状态开关,持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少。以上都是Off的状态。
  • Pwr:能耗表示。
  • Bus-Id:涉及GPU总线的相关信息。
  • Disp.A:是Display Active的意思,表示GPU的显示是否初始化。
  • Memory-Usage:显存的使用率。
  • GPU-Util:GPU的利用率。
  • Compute M.:计算模式。
  • 下面的Process显示每块GPU上每个进程所使用的显存情况。

卸载显卡驱动

如果遇到Nvidia NVML Driver/library version mismatch的问题,又不方便重启实验室服务器,只能重装显卡驱动。因此将卸载显卡驱动的命令记录于此。

卸载显卡驱动:sudo apt-get remove --purge nvidia*

再执行:dpkg -l | grep nvidia

如果还有其他包,也全部卸载。

安装CUDA Toolkit

就安装nvidia-smi中适用于nvidia 535.129.03的最大的cuda版本:12.2

1、去官网选择要安装的版本

2、以cuda 12.2为例,选择系统配置。一定要选择runfile安装,因为使用runfile安装可以选择不安装nvidia驱动,而使用deb安装默认安装nvidia驱动,会出现driver/library version mismatch的问题

在这里插入图片描述

在这里插入图片描述

3、执行命令,由于前面已经安装了nvidia驱动,所以在安装选项里要取消Driver

在这里插入图片描述

4、将cuda写入环境变量,由于是多用户系统,在~/.bashrc文件(仅当前用户生效)的末尾写入

#####################cuda12.2#######################
export PATH=$PATH:/usr/local/cuda-12.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.2/lib64

5、source刷新环境变量

source /etc/profile

Anaconda虚拟环境配置

安装Anaconda

1、安装Anaconda

在使用服务器时,可以使用Anaconda来创建和管理多个虚拟环境,非常好用。安装步骤如下:

1、去官网下载安装文件

在这里插入图片描述

2、上传至服务器并赋予执行权限

chmod +x Anaconda3-2023.09-0-Linux-x86_64.sh

3、安装

sudo ./Anaconda3-2023.09-0-Linux-x86_64.sh

注意,安装路径默认是当前用户的home目录下的anaconda3,例如:~/anaconda3。在询问是否执行conda initialization时,选择yes,这样就不需要自己配置环境变量了(默认写入~/.bashrc文件)。

配置虚拟环境

1、新建一个Python环境

conda create -n test python=3.9 # 新建一个名为test的python3.9环境
conda activate test # 激活test环境

如果激活失败,可以先进入base环境再激活test环境,执行以下命令:

source activate
conda activate test

2、在虚拟环境中配置conda和PyTorch-GPU

去官网查看对应版本的安装命令并执行

不幸的发现最高的pytorch只支持cuda12.1版本

在这里插入图片描述

因此我们选择在虚拟环境中安装低版本cuda

conda install cuda=11.8

继续安装版本匹配的pytorch

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

验证是否安装成功

import torch
print(torch.__version__)
print(torch.cuda.is_available())

注意conda-forge这个通道会比较慢,所以安装pytorch的时候,最好选择不带conda-forge的命令

3、在虚拟环境中配置cudnn

去官网查看cudnn和cuda的版本对应关系

在这里插入图片描述

conda找不到对应版本的cudnn

输入命令: conda search cudnn -c conda-forge 然后出现了各个版本的cudnn:

在这里插入图片描述

选择一个合适的版本安装,这里选择cudnn 8.9.2.26

conda install cudnn=8.9.2.26

验证cudnn安装成功:conda list | grep cudnn

输出如下,安装成功

cudnn                     8.9.2.26               cuda11_0

参考

[1] nvidia-smi查看GPU的使用信息并分析

[2] 【2022新教程】Ubuntu server 20.04如何安装nvidia驱动和cuda-解决服务器ssh一段时间后连不上的问题

[3] 这绝对是你见过的最全深度学习服务器管理配置手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/271173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何快速删除pdf周围的空白

问题:写论文往往需要pdf格式的图片,但pdf往往四周存在大量空白需要手动截图很麻烦 解决: 打开命令行输入:pdfcrop 图片名.pdf

【Mysql】InnoDB统计数据的收集(十三)

我们前边在计算查询成本的时候会用到一些统计数据,比如通过 SHOW TABLE STATUS 可以看到关于表的统计数据,通过 SHOW INDEX 可以看到关于某个索引的统计数据,那么这些统计数据是怎么来的呢?本章节将分享 InnoDB 存储引擎的统计数据…

深圳锐科达SIP矿用电话模块SV-2801VP

深圳锐科达SIP矿用电话模块SV-2801VP 一、简介 SV-2800VP系列模块是我司设计研发的一款用于井下的矿用IP音频传输模块,可用此模块打造一套低延迟、高效率、高灵活和多扩展的IP矿用广播对讲系统,亦可对传统煤矿电话系统加装此模块,进行智能化…

在Vue3中使用vue-qrcode库实现二维码生成

本文主要介绍在Vue3中使用qrcode库实现二维码生成的方法。 目录 一、基础用法实现vue-qrcode库的参数介绍 在Vue3中实现二维码生成需要使用第三方库来处理生成二维码的逻辑。常用的库有 qrcode和 vue-qrcode。 一、基础用法实现 在Vue3中使用vue-qrcode库实现二维码生成的方…

记录一次云主机故障排查

云上某云主机,在安全组test-a中,同一安全组下还有另外两台主机。 从本地可以ping 通另外两台主机的公网地址。但是不能ping通这个主机的公网地址。 与是重启主机,发现问题依然存在。依然是不能ping 通,主机上部署的业务也不能访…

LabVIEW在齿轮箱故障诊断中的应用

LabVIEW在齿轮箱故障诊断中的应用 在现代机械工业中,齿轮箱作为重要的传动设备,其性能稳定性对整体机械系统的运行至关重要。故障的及时诊断和处理不仅保障了设备的稳定运行,还减少了维护成本。利用LabVIEW强大数据处理和仿真能力&#xff0…

新版IDEA中Git的使用(二)

说明:前面介绍了在新版IDEA中Git的基本操作,本文介绍关于分支合并、拉取等操作; 例如,现在有一个项目,分支如下: main:主分支; dev:开发分支; test&#x…

Springboot整合MVC进阶篇

一、概述 1.1SpringBoot整合SpringMVC配置 SpringBoot对SpringMVC的配置主要包括以下几个方面: 自动配置:SpringBoot会自动配置一个嵌入式的Servlet容器(如Tomcat),并为我们提供默认的SpringMVC配置。这样我们无需手动…

【Java、Python】获取电脑当前网络IP进行位置获取(附源码)

我相信看到这篇博客的时候心里肯定是想解决自己的一个问题的,而这篇博客我就以简单快速的方式解决这些烦恼! 一、获取当前IP 在Java中自带了一些自己的流对象来获取当前的IP地址,不多说我们直接上代码。 //获取当前网络ip地址 ipAddress Ine…

在k8s中将gitlab-runner的运行pod调度到指定节点

本篇和前面的 基于helm的方式在k8s集群中部署gitlab 具有很强的关联性,因此如果有不明白的地方可以查看往期分享: 基于helm的方式在k8s集群中部署gitlab - 部署基于helm的方式在k8s集群中部署gitlab - 备份恢复基于helm的方式在k8s集群中部署gitlab - 升…

论文阅读——X-Decoder

Generalized Decoding for Pixel, Image, and Language Towards a Generalized Multi-Modal Foundation Model 1、概述 X-Decoder没有为视觉和VL任务开发统一的接口,而是建立了一个通用的解码范式,该范式可以通过采用共同的(例如语义&#…

实战:朴素贝叶斯文本分类器搭建与性能评估

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

生成超清分辨率视频,南洋理工开源Upscale-A-Video

大模型在生成高质量图像方面表现出色,但在生成视频任务中,经常会面临视频不连贯、图像模糊、掉帧等问题。 这主要是因为生成式抽样过程中的随机性,会在视频序列中引入无法预测的帧跳动。同时现有方法仅考虑了局部视频片段的时空一致性,无法保证整个长视频的整体连贯…

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

关于OpenCV中 CV_Assert() 的使用引起程序中止/崩溃问题

CV_Assert() 的作用是:若括号中的表达式值为 false ,则返回一个错误信息,并终止程序执行。 但是 CV_Assert() 与 assert 不同,CV_Assert() 会通过异常抛出,所以如果使用 CV_Assert(),可以通过捕获异常而不是…

三列布局 css

实现如下图的三列布局: .box {width:1400px;margin:0 auto;padding-bottom:40px;> .left {float:left;width:180px;margin-top:100px;text-align:center;}> .center {float:left;margin-top:100px;margin-left:130px;item-box {float:left;text-align:left;…

oom问题

问题描述 虚拟机集群节点上pod报oom,最后pod被驱逐,主节点上查看kubectl top node的mem使用率很高,重启系统后,mem会降下来,但还会慢慢增长。 node节点上查看 /sys/fs/cgroup/memory/memory.usage_in_bytes内存使用超…

Spring Boot简单多线程定时任务实现 | @Async | @Scheduled

Spring Boot简单多线程定时任务实现 实现步骤 1 创建一个Spring Boot项目 2 定义定时任务: package com.jmd.timertasktest.task;import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; impor…

GenerateBlocks Pro插件 构建更好的WordPress网站

GenerateBlocks Pro插件 构建更好的WordPress网站 GenerateBlocks Pro插件是一个 WordPress 插件,几乎可以完成任何事情,可让您创建轻量级和多功能的网站。由与流行且快速的 GeneratePress 主题相同的创作者构建,该插件不负众望。使用 Genera…

H266/VVC帧间预测编码技术概述

帧间预测编码简述 帧间预测利用视频时间域的相关性,使用邻近已编码图像像素值预测当前图像的像素值,能有效去除视频时域冗余。 目前主要的视频编码标准中,帧间预测都采用基于块的运动补偿技术,不同的编码标准有不同的分块方式。 …