ubuntu18下深度学习环境的构建——安装配置篇

零、前言

本文总结了在Ubuntu上的深度学习环境配置方法,大部分可类比到其他机型、系统上。尽管笔者装过不少系统,但鲜有总结方法经验。之前即没有形成一个体系成笔记记录下来,也没有形成自己的dotfiles使得能方便地移植到其他环境中。这造成的结果就是,每次换系统都要花大量时间进行折腾。为了加速上手新系统的速度而成此文,并初步构建了自己的dotfiles,目前能够在mac和linux上同步使用。谨以此文致敬在机器上折腾的青春~

实验室师兄毕业,笔者接管服务器一台,开始了维护机器的脏乱累之旅。中间经历了

69266485

69305996

以及出了问题蹲在一角研究到深夜的时刻…

69425003

Anyway,对一个Unix爱好者来讲,这是痛并快乐着的。

机器型号

笔者安装的第一台机器为戴尔Precision 7920塔式工作站,原本系统为windows,直接重装成Ubuntu18.04.04。第二台为一个组装机,两个2080Ti显卡,但安装的系统和上一台一样。

一、必要配置

1.1 远程桌面安装

远程桌面安装其实不难,一个安装脚本就能搞定xrdp桌面的安装,笔者尝试了多种远程桌面的方式,虽然安装时挺折腾,但最后都成功了:

  • XRDP,写了一篇博客 总结了XRDP和nomachine的安装方式 ✨✨✨推荐
  • No machine 参考同上,这个方案还不错,但目前发现只能一个人连接(意思是需要氪金)。安装参考了这篇博客,并且还要按这篇博客来配置,方可正常使用。使用之余感慨Unix软件还是商业的做的漂亮…
  • VNC, 根据这个教程装好了,个人感受使用体验一般般,遂再也没用过。
  • 续:从github 找到的脚本,也安装成功了。
echo "================================="
echo " Installing firefox / xrdp / etc "
echo "================================="
sudo apt-get update -y 
sudo apt-get install -y xfce4 xfce4-goodies
sudo apt-get install -y firefox
sudo apt-get install -y xrdp
echo xfce4-session >~/.xsession
sudo service xrdp start

1.2 相关镜像源配置

尽管下一条解决了这个问题,但是还是建议配好镜像源,毕竟快~
笔者目前经常需要apt, conda, pip,docker等进行联网下载,因此镜像源是必须要配置的。源头可以使用清华源,建议把配置操作自动化成脚本。

1.3 命令行配置

1.4 网络配置

笔者最开始ip相关配置是直接在图形界面设置好的,因此没有使用命令行。图形界面配置一般不会有问题。中间笔者配第二台机器的时候,把子网掩码写错了,外界网站一直连不上,为此又折腾命令行的相关网络配置。查找资料的时候发现ubuntu管理网络的命令比较繁杂,ubuntu18.04.04使用的是netplan
网络的配置写在/etc/netplan/01-network-manager-all.yaml这个文件。如果你想通过配置文件和命令行的方式来配置的话,可以编辑这个文件,初始内容如下

68060119.png

renderer这一行表示你想通过图形界面配置网络,如果是的那么后面就不用写了。通过文件来管理笔者从网上找到的一个例子如下

# Let NetworkManager manage all devices on this system
network:
  version: 2
  # renderer: NetworkManager
  ethernets:
          ens33:
                  addresses: [192.168.0.111/24]
                  gateway4: 192.168.0.1
                  nameservers:
                        addresses: [192.168.0.1]

要注意yaml文件的同级缩进一致,以及和自己的网络各种配置保持一致。填错一个配置,可能会坑你一些时间!

1.5 ssh安装

我装的ubuntu18.04没有ssh服务端,还需要安装,才能从外界ssh连入。参考

sudo apt-get install openssh-server

1.6 创建用户和组

管理用户和组是系统管理员最基本的要求

groupadd deepones docker # 新增两个组,以后所有成员加到这个组。添加docker组是为了让用户不用sudo就可以使用docker
adduser qiangzibro # 新增成员
#把成员加到组里去
adduser qiangzibro sudo #这个操作更简单
usermod -a -G sudo qiangzibro #  等价
#改变login shell为zsh
chsh --shell /usr/bin/zsh qiangzibro
  • 将所有用户添加到deepones组下
    参考了一篇国外博客
for ID in $(cat /etc/passwd | grep /home | cut -d ':' -f1); \
do (sudo adduser $ID deepones);done

再更:直接用下面这种方式也很简单

for ID in  `ls /home`; \
do (sudo adduser $ID deepones);done

Note:后期要使用docker,还需要建一个叫docker的分组,把所有人加进来。解决了docker要用sudo的问题,也就是说,你不用sudo也能用docker命令了。

1.7 硬盘自动加载

实验室新买了两块2TB硬盘,放进机器后进行了分区、创建文件系统、开机自启设置操作,才能够进行使用。参考这里

fdisk /dev/sdc # 对2TB硬盘进行分区,sd后面具体实际根据fdisk -l来看
mkfs.ext4 /dev/sdc # 在硬盘上创建文件系统
partprobe /dev/sdc #不使用这个会报错
  • 手动挂载硬盘
mount /dev/sdb /mnt/2TB
  • 开机时自动挂载硬盘
    打开/etc/fstab,对要开机自动加载的硬盘设置如下:

70558222.png

  • 做软链接

我希望在每个硬盘下都建立了以用户为名字的文件,并建立了软链接到所有用户家目录。这样每个用户的家目录下面都可以看到对应硬盘的文件夹,同时又不会公用一个文件夹。像这样:

54072768.png

for hardware in `realpath *TB*`
do
        hardware_name=`basename $hardware`
        for user in `ls /home`
        do
                dir="$hardware"/"$user"
                linkdir=/home/"$user"/"$hardware_name"


                echo "$dir --> $linkdir"
                mkdir -p $dir
                ln -s $dir $linkdir


                chown -R "$user":deepones   $dir
                chown -R "$user":deepones -h $linkdir


        done
done

二、软件安装

2.0 dotfiles的哲学

一台空机器往往需要一些必备的工具,干活起来才会更“舒服”。不同人喜欢不同的软件,不同的配置。笔者也有自己的一套习惯,比如命令行终端的ohmyzsh,编辑文件使用neovim再加上自己的vimrc等等。而在新机器手动安装不同的软件、配置往往会花掉我们很多功夫。想要加速这个过程,可以编写自己的安装脚本,又或者使用容器技术,使得在任何环境下都有同样的配置。在知乎大神韦易笑的文章下,我建立自己的Qdotfiles,并自动化了配置和安装的过程,只需下面一个命令:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/QiangZiBro/Qdotfiles/master/scripts/bootstrap.sh)"

并写了一个Dockerfile,让我的配置在容器里也能测试成功,这个过程中联系了一波docker的使用。要注意的是,Qdotfiles还处于个人维护阶段,直接拿到自己的系统使用也许仍然会有一些问题,但是可以使用容器,进行一些小的尝试。
下面常见的安装,都会总结到Qdotfile项目里。

2.1 zsh

oh my zsh

以前一直想装一次ohmyzsh,所有用户使用,后来读了这条建议后,发现没有必要。ohmyzsh是一套配置,它的核心还是zsh,每个用户各安装各自的配置即可。安装方式:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

上面一条安装完了,想改变用户的登录shell为zsh,使用

sudo  chsh $USER -s $(which zsh)

插件管理

使用zplug,官方给的安装命令:

curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh

将类似于下面的语句放在~/.zshrc里面,我用的插件有

zplug 'plugins/git', from:oh-my-zsh, if:'which git'
zplug romkatv/powerlevel10k, as:theme, depth:1
# zplug "plugins/vi-mode", from:oh-my-zsh
zplug 'zsh-users/zsh-autosuggestions'
zplug 'zsh-users/zsh-completions', defer:2
zplug 'zsh-users/zsh-history-substring-search'
zplug 'zsh-users/zsh-syntax-highlighting', defer:2

2.2 替换你的cd命令 z.lua

从skywind3000大佬那里安利的工具

git clone https://github.com/skywind3000/z.lua /usr/softwares/z.lua
sudo apt install -y lua5.3
sudo ln -s /usr/bin/lua5.3 /usr/bin/lua
#接着在.zshrc添加
eval "$(lua5.3 /usr/softwares/z.lua/z.lua --init zsh)"

Note:笔者后来用了zsh-autosuggestions插件后,发现用z的机会也少了。不过各有千秋,目录跳转比刀耕火种的cd好多了,哈哈!

2.3 miniconda

安装脚本来自我的dotfiles,我将miniconda直接安装在了/usr文件夹,其实安装在/usr/softwares下更好,不过无伤大雅

conda_linux=~/.Qdotfiles/downloads/miniconda3_linux.sh
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O $conda_linux
sudo bash $conda_linux -p /usr/miniconda3 -b -u
  • conda安装后,将各个常见的pytorch版本创建了一遍
for i in {12..17}
do
    conda create -n torch$i python=3.7 -y
done

再从官网下载对应的包。

  • 使用Tips
    为每一个项目单独创一个环境,不同环境不要混用。比如自己项目需要torch12版本,以及其他依赖包,可以首先克隆torch12这个环境:
conda create -n 项目名称 --clone torch12

激活环境并在这个环境下进行构建:

conda activate  项目名称
conda install ...
pip install ...

2.4 nvim

我写的安装脚本,包括了

  • 下载
  • 安装
  • 插件配置

等操作。更多常用软件安装,会总结在自己的dotfiles里。

2.5 CUDA驱动安装

查看GPU版本

➜  ~ lspci | grep -i nvidia
3b:00.0 VGA compatible controller: NVIDIA Corporation GP100GL [Quadro GP100] (rev a1)
3b:00.1 Audio device: NVIDIA Corporation Device 0fb1 (rev a1)

2.5.1 成功安装方式

  • 安装必备软件
sudo su
apt-get install gcc linux-headers-generic linux-source build-essential -y
# 1
cat << EOF >>/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
# 2
update-initramfs -u
# 3
reboot
  • 在BIOS里禁用系统的secure boot

  • 下载驱动、安装

遇到很多错误后,最终谷歌到这个地址,安装了对应我们Quadro GP100的驱动。注意,一定要对应版本!!

注: 笔者又装了一个2080Ti的驱动,也是在这里找到对应的驱动!切记不要盲目下驱动!看清楚对应自己的版本,系统。
60450553.png
下载后,可能还需一些配置,笔者成功安装之前至少做了两个配置

2.5.2 失败安装方式

留个纪念吧,致敬我在上面浪费掉的时间

失败原因:没有下载对正确的驱动,参考上面的链接进行下载

流程复现:直接进入英伟达官网,就开始选择驱动进行安装。看了官方安装步骤文档,我采用runfile安装的方式,盲目地下载了官网首页给的安装包 ,这个文件有2G多,下载到了/usr/softwares/downloads/下,照着官方文档的步骤安装,没有成功。
69996576.png
报错:
70067327.png
打开这个日志文件
70101642.png
注意到官网说GP100支持cuda10.2,我装的是cuda11.0
71404346.png
再去装10.2,仍以失败告终。

2.6 tmux 配置

tmux是一个优秀的终端复用软件,如果您经常使用终端,建议马上使用它!相信我你不会后悔。

  • 首先安装 sudo apt install tmux -y
  • 安装好了就可以使用了,但为了更美(装)观(x)怎能止步于此!下载插件管理器
    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
  • 在配置文件~/.tmux.conf里写上你需要的插件,笔者使用了onedark主题,目前觉得还不错。
    笔者目前的配置文件内容
# Open in same directory
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'odedlaz/tmux-onedark-theme'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
  • tmux source ~/.tmux.conf让配置生效
  • 生效后,还不能立即看到效果,这是因为没下载插件,只需要打开tmux,然后<prefix> I就可以安装插件。<prefix>是tmux的前缀键,默认是Ctrl+B
    其他命令:
<prefix> U 更新所有已安装插件
<prefix> Alt U 移除所有插件列表中不存在的插件

3 docker服务部署

服务器配好了,配置一些服务供日常使用,下面是经常用的几个:

3.1 gitlab

参考韦大佬的文章,真的只要半分钟!

搭建

搭建一个gitlab其实非常简单,只需要半分钟,前提是用对合适的工具, 这个工具就是docker,参考搭建教程。作为管理员,搭建好之后直接docker-compose up -d就可以舒舒服服放在后台运行了。

使用

  1. 首先注册一个账号
    47921521.png
    接着登录就ok
  2. 免密使用
    使用https和ssh连接都可以,笔者使用的是https方式,进行下面的配置可以免得每次push都要输用户名和密码。在mac和Linux的~/.git-credentials里写入账号密码
# ~/.git-credentials
https://你的名字:你的密码@你的ip地址:8443   

让配置生效,不然会发现还是要输密码。

git config --global credential.helper store

3.屏蔽自签证书的验证,不然会报http错误git SSL certificate problem

git config --global http.sslVerify "false"

3.2 overleaf

参考知乎文章

Overleaf是开源的在线Latex编辑器软件,个人用户可以在Overleaf官网注册并免费使用Overleaf,Overleaf官网还具有Review等团队协作功能。但是Overleaf官网在国内的访问速度不佳,科学上网后速度才满足日常需求。因此,对于科研团队来说,在自己的服务器上部署Overleaf,从此为整个团队都省去了安装Latex各种包的繁琐,多么幸福的事。需要说明的事,目前开源的个人版本的Overleaf功能没有Overleaf官网齐全,也许还有些小bug,但是就目前的使用来说,足够日常使用了。

我对docker compose文件改了两个地方,一个是映射端口,另一个是挂载目录:
72125117.png

四、后话

建议每位学习计算机的小伙伴都学习一下linux,因为了解之后,对许多方向(比如做深度学习、后端开发等等)同学的工作非常方便。你可以不用纠结开发系统和娱乐系统之间的定夺,linux系统就用来做开发好了,两者兼得mac了解一下​?😄

参考与问题

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值