【踩坑记录】搭建 RTX3090 深度学习服务器 (从系统重装到跑起DL)
重装 Linux 系统我选的是 Ubuntu 18。 Ubuntu 16 也行,其他版本没试过: Ubuntu官网如果有一台 Windows 系统的电脑,可以用 UltraISO 软件制作启动 U 盘。如果没有 Windows 电脑,可以去借一台 。操作过程可以参考这个博客: CSDN。显卡驱动在 NVIDIA 官网选择产品,点搜索就能找到对应的驱动。如我的是:...
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 碰到过的报错
-
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
-
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
-
在跑代码的时候跑到一半出现:
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,再试试。
更多推荐
所有评论(0)