【踩坑记录】搭建 RTX3090 深度学习服务器 (从系统重装到跑起DL)

1 重装 Linux 系统

我选的是 Ubuntu 18。 Ubuntu 16 也行,其他版本没试过: Ubuntu官网

如果有一台 Windows 系统的电脑,可以用 UltraISO 软件制作启动 U 盘。如果没有 Windows 电脑,可以去借一台 。操作过程可以参考这个博客: CSDN

( PS. Macbook 不能用 balenaEtcher 这个软件,raspbian 系统是可以直接烧录的,但制作 ubuntu 系统的启动盘不行。)

然后就是开机从 U 盘启动,和所有系统重装是一样的套路。

运行安装程序的时候,记得勾选下载各种音视频无线网卡之类的第三方驱动,我曾自信地以为我不需要我可以自己装,直到我发现没有无线网卡驱动(也没有有线网口),我什么都干不了……

2 显卡驱动

NVIDIA 官网选择产品型号,点搜索就能找到对应的驱动。
比如RTX3090,对应的驱动文件就是: NVIDIA-Linux-x86_64-455.23.04.run
先给这个文件权限,然后运行:

sudo chmod 777 NVIDIA-Linux-x86_64-455.23.04.run
sudo sh NVIDIA-Linux-x86_64-455.23.04.run

3 CUDA

pytorch至今还没有发布支持 CUDA 11.1 及以上的版本,最多只能 11.0,所以可以暂时先装 CUDA 11.0. 官网链接

按照官网给的这两条命令:

wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run
sudo sh cuda_11.0.3_450.51.06_linux.run

安装过程中会选安装哪些东西,第一项 NVIDIA 驱动可以 X 掉,因为上一步已经安装过了。(如果不单独安装NVIDIA 驱动,在这一步和 cuda 一起安装,我是从来没成功过……)

安装完之后,路径在/usr/local/cuda.
然后更新一下PATH:

vim ~/.bashrc

在最后加入

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

激活一下

source ~/.bashrc

网上说要重启命令行界面,我是 ssh 连的,重连也没用。于是就 reboot 了,命令行 reboot 可以参考以下代码:

reboot # 重启,可能没权限
sudo shutdown -r now # 立即重启
halt # 关机,可能没权限
sudo shutdown -h now # 立即关机

测试是否安装成功:

cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery

输出:

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce RTX 3090"
  CUDA Driver Version / Runtime Version          11.1 / 11.0
  CUDA Capability Major/Minor version number:    8.6
  Total amount of global memory:                 24268 MBytes (25447170048 bytes)
  ...
  ...
  ...
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.1, CUDA Runtime Version = 11.0, NumDevs = 1
Result = PASS

可以看下安装的版本对不对。

Note: 这里CUDA Driver Version / Runtime Version 版本号不同,我查了一下。Driver Version 主要是根据显卡型号来的,如果是 RTX 3090,其实它需要 CUDA 11.1 才能带动。Runtime Version 是运行时的版本,是实际我安装的版本。当执行命令nvidia-smi的时候,可能会显示CUDA Version: 11.1,但其实运行的时候可能是 11.0。目前推荐 11.0,因为pytorch 没有支持到 11.1,在实际跑代码的过程中可能无法将数据写入到 GPU 里而报错。

4 Anaconda

可以去 清华的镜像站 找想要的Anaconda 版本。命令可参考:

wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.0-Linux-x86_64.sh
sudo chmod 755 Anaconda3-5.3.0-Linux-x86_64.sh
sudo sh Anaconda3-5.3.0-Linux-x86_64.sh

添加环境变量:

vim ~/.bashrc    # 有的机器是 ~/.bash_profile
export PATH="/home/your_username/anaconda3/bin:$PATH"
source ~/.bashrc # 或者重启

创建 Conda 环境:

conda create -n your_env_name python=X.X (e.g. 3.7 or 3.6 etc.)
source activate your_env_name # 激活新的环境

删除 Conda 环境

conda remove -n env_name --all

给 Conda 重命名

conda create -n new_env_name --clone old_env_name
conda remove -n old_env_name --all

Conda 同服务器环境克隆

conda create -n new_env_name --clone old_env_name

Conda 跨服务器环境克隆

# -n 后面的参数 env_to_be_copied 是从服务器上要克隆的环境名称
conda env export -n env_to_be_copied > environment.yaml
# -n 后的参数是在新服务器上要创建的虚拟环境名称, -f 后参数指的是yaml环境内容
conda env create -n new_env_name -f environment.yaml
# 或者从文件夹克隆
conda create -n new_env_name --clone path_to_old_env

另一些常用 conda 命令:

conda activate your_env_name # 进入某个 conda 环境
conda info -e # 看看有哪些 conda 环境
conda clean -p # 删除没有用的包
conda clean -y -all # 删除所有的安装包及cache

有过的报错

5 PyTorch

python 版本应该是随意,我觉得 3.6 的不错,比较稳定。
pytorch 要装最新的 1.7.1,不然 CUDA 11.0 貌似不适配,命令可参考官网,用 pip 下载的命令复制如下:
torch 1.7 + cuda 11.0

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

torch 1.8 + cuda 11.1

pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
或
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

torch 1.9 + cuda 11.1

pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

tensorflow 我暂时用不到,还没试过。

然后就是装一些依赖什么的,可以开始跑代码了!

6 Jupyter Notebook

参考这个 CSDN博客

生成配置文件 jupyter_notebook_config.py (在路径~/.jupyter下)

jupyter notebook --generate-config

设置 Jupyter 的密码,复制输出的一行乱码:

ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Out[1]: sha1:blablabla # 是一串字母+数字的乱码,复制这行输出

打开 jupyter_notebook_config.py 配置文件,修改以下四处:

c.NotebookApp.ip = '*' #设置为 * 表示所有 IP 都可以访问  
c.NotebookApp.password = u'sha1:blablabla' #填写刚刚生成的密钥  
c.NotebookApp.open_browser = False # 禁止Notebook 启动时自动打开浏览器
c.NotebookApp.port = 8889 #指定访问的端口,默认是8888,设置得与默认值不同,方便区分本地和远端的 Jupyter 程序

启动服务器上的 Jupyter Notebook:

jupyter notebook

在本地服务器上输入http://remote_ip:8889/ ,并输入密码,即可登录远端的Jupyter Notebook.
BTW: (1) 服务器端的 Jupyter 启动命令在什么路径上执行,本地服务器登录 Jupyter 之后,根目录就是哪个路径;(2) 挂 vpn 的时候浏览器可能会打不开 Jupyter。

给 Jupyter 添加 Conda 环境

conda activate env_name  # 首先进入想要添加的 conda 环境
conda install ipykernel  # 安装ipykernel
python -m ipykernel install --user --name env_name --display-name "Python conda:env_name"  # 将环境写入notebook的kernel中 
jupyter notebook  # 打开notebook服务器

jupyter kernelspec remove env_name  # 删除kernel环境

7 碰到过的报错

  1. An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel...
    这个忘记是从哪个 CSDN 的博客上找来的了,我输入了前两条命令,解决了我的问题。

    # 禁用图形目标
    sudo systemctl isolate multi-user.target
    
    # 卸载Nvidia驱动程序
    modprobe -r nvidia-drm
     
    # 安装驱动完成之后再次启动图形环境,可以使用此命令:
    sudo systemctl start graphical.target
    
  2. Finished with code: 256 , [ERROR]: Install of driver component failed...
    这个报错出现过很多次,github 上有 issue,但讨论中的版本是cuda 10,当时给出的答复是 cuda 10.1 的 update 2 已经解决了这个问题,但是后来的一些评论也看到 cuda 10.2 还是存在相同问题,包括我安装的这个 cuda 11。
    我觉得可能是因为 cuda 和 NVIDIA 驱动版本不匹配,或者装了好几个驱动程序导致的。每次碰到这个报错的时候我就把 cuda 和 NVIDIA 都删了,反正要reinstall……总之删干净之后,先单独装 NVIDIA 的驱动,然后在之后选择安装哪些组件的时候,把第一项 NVIDIA 给 X 掉,只装后面的一些工具包。
    卸载 NVIDIA 驱动:

    sudo apt-get --purge remove nvidia-*
    

    或者

    sudo apt-get --purge remove "*nvidia*"
    

    卸载 cuda:

    cd /usr/local/cuda/bin
    ./cuda-uninstaller
    
  3. 在跑代码的时候跑到一半出现:
    RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasGemmEx( handle, opa, opb, m, n, k, &falpha, a, CUDA_R_16F, lda, b, CUDA_R_16F, ldb, &fbeta, c, CUDA_R_16F, ldc, CUDA_R_32F, CUBLAS_GEMM_DFALT_TENSOR_OP)
    可能是 pytorch 版本的问题,确认 pytorch==1.7.1,cuda==11.0,再试试。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值