本文总结了在Ubuntu上的深度学习环境配置方法,大部分可类比到其他机型、系统上。尽管笔者装过不少系统,但鲜有总结方法经验。之前即没有形成一个体系成笔记记录下来,也没有形成自己的dotfiles使得能方便地移植到其他环境中。这造成的结果就是,每次换系统都要花大量时间进行折腾。为了加速上手新系统的速度而成此文,并初步构建了自己的dotfiles,目前能够在mac和linux上同步使用。谨以此文致敬在机器上折腾的青春~
实验室师兄毕业,笔者接管服务器一台,开始了维护机器的脏乱累之旅。中间经历了
拆
拆
以及出了问题蹲在一角研究到深夜的时刻…
Anyway,对一个Unix爱好者来讲,这是痛并快乐着的。
笔者安装的第一台机器为戴尔Precision 7920塔式工作站,原本系统为windows,直接重装成Ubuntu18.04.04。第二台为一个组装机,两个2080Ti显卡,但安装的系统和上一台一样。
远程桌面安装其实不难,一个安装脚本就能搞定xrdp桌面的安装,笔者尝试了多种远程桌面的方式,虽然安装时挺折腾,但最后都成功了:
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
尽管下一条解决了这个问题,但是还是建议配好镜像源,毕竟快~
笔者目前经常需要apt
, conda
, pip
,docker等进行联网下载,因此镜像源是必须要配置的。源头可以使用清华源,建议把配置操作自动化成脚本。
略
笔者最开始ip相关配置是直接在图形界面设置好的,因此没有使用命令行。图形界面配置一般不会有问题。中间笔者配第二台机器的时候,把子网掩码写错了,外界网站一直连不上,为此又折腾命令行的相关网络配置。查找资料的时候发现ubuntu管理网络的命令比较繁杂,ubuntu18.04.04使用的是netplan
。
网络的配置写在/etc/netplan/01-network-manager-all.yaml
这个文件。如果你想通过配置文件和命令行的方式来配置的话,可以编辑这个文件,初始内容如下
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文件的同级缩进一致,以及和自己的网络各种配置保持一致。填错一个配置,可能会坑你一些时间!
我装的ubuntu18.04没有ssh服务端,还需要安装,才能从外界ssh连入。参考
sudo apt-get install openssh-server
管理用户和组是系统管理员最基本的要求
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命令了。
实验室新买了两块2TB硬盘,放进机器后进行了分区、创建文件系统、开机自启设置操作,才能够进行使用。参考这里
fdisk /dev/sdc # 对2TB硬盘进行分区,sd后面具体实际根据fdisk -l来看
mkfs.ext4 /dev/sdc # 在硬盘上创建文件系统
partprobe /dev/sdc #不使用这个会报错
mount /dev/sdb /mnt/2TB
/etc/fstab
,对要开机自动加载的硬盘设置如下:我希望在每个硬盘下都建立了以用户为名字的文件,并建立了软链接到所有用户家目录。这样每个用户的家目录下面都可以看到对应硬盘的文件夹,同时又不会公用一个文件夹。像这样:
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
一台空机器往往需要一些必备的工具,干活起来才会更“舒服”。不同人喜欢不同的软件,不同的配置。笔者也有自己的一套习惯,比如命令行终端的ohmyzsh,编辑文件使用neovim再加上自己的vimrc等等。而在新机器手动安装不同的软件、配置往往会花掉我们很多功夫。想要加速这个过程,可以编写自己的安装脚本,又或者使用容器技术,使得在任何环境下都有同样的配置。在知乎大神韦易笑的文章下,我建立自己的Qdotfiles,并自动化了配置和安装的过程,只需下面一个命令:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/QiangZiBro/Qdotfiles/master/scripts/bootstrap.sh)"
并写了一个Dockerfile,让我的配置在容器里也能测试成功,这个过程中联系了一波docker的使用。要注意的是,Qdotfiles还处于个人维护阶段,直接拿到自己的系统使用也许仍然会有一些问题,但是可以使用容器,进行一些小的尝试。
下面常见的安装,都会总结到Qdotfile项目里。
以前一直想装一次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
从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好多了,哈哈!
安装脚本来自我的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
for i in {12..17}
do
conda create -n torch$i python=3.7 -y
done
再从官网下载对应的包。
conda create -n 项目名称 --clone torch12
激活环境并在这个环境下进行构建:
conda activate 项目名称
conda install ...
pip install ...
我写的安装脚本,包括了
等操作。更多常用软件安装,会总结在自己的dotfiles里。
查看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)
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的驱动,也是在这里找到对应的驱动!切记不要盲目下驱动!看清楚对应自己的版本,系统。
下载后,可能还需一些配置,笔者成功安装之前至少做了两个配置
留个纪念吧,致敬我在上面浪费掉的时间
失败原因:没有下载对正确的驱动,参考上面的链接进行下载
流程复现:直接进入英伟达官网,就开始选择驱动进行安装。看了官方安装步骤文档,我采用runfile安装的方式,盲目地下载了官网首页给的安装包 ,这个文件有2G多,下载到了/usr/softwares/downloads/
下,照着官方文档的步骤安装,没有成功。
报错:
打开这个日志文件
注意到官网说GP100支持cuda10.2,我装的是cuda11.0
再去装10.2,仍以失败告终。
tmux是一个优秀的终端复用软件,如果您经常使用终端,建议马上使用它!相信我你不会后悔。
sudo apt install tmux -y
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 '[email protected]:user/plugin'
# set -g @plugin '[email protected]: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
让配置生效 I
就可以安装插件。
是tmux的前缀键,默认是Ctrl+B
U 更新所有已安装插件
Alt U 移除所有插件列表中不存在的插件
服务器配好了,配置一些服务供日常使用,下面是经常用的几个:
参考韦大佬的文章,真的只要半分钟!
搭建一个gitlab其实非常简单,只需要半分钟,前提是用对合适的工具, 这个工具就是docker,参考搭建教程。作为管理员,搭建好之后直接docker-compose up -d
就可以舒舒服服放在后台运行了。
~/.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"
参考知乎文章。
Overleaf是开源的在线Latex编辑器软件,个人用户可以在Overleaf官网注册并免费使用Overleaf,Overleaf官网还具有Review等团队协作功能。但是Overleaf官网在国内的访问速度不佳,科学上网后速度才满足日常需求。因此,对于科研团队来说,在自己的服务器上部署Overleaf,从此为整个团队都省去了安装Latex各种包的繁琐,多么幸福的事。需要说明的事,目前开源的个人版本的Overleaf功能没有Overleaf官网齐全,也许还有些小bug,但是就目前的使用来说,足够日常使用了。
我对docker compose文件改了两个地方,一个是映射端口,另一个是挂载目录:
建议每位学习计算机的小伙伴都学习一下linux,因为了解之后,对许多方向(比如做深度学习、后端开发等等)同学的工作非常方便。你可以不用纠结开发系统和娱乐系统之间的定夺,linux系统就用来做开发好了,两者兼得mac了解一下?
应该把软件装在哪个地方?
说实话,之前使用了Linux这么久,我并没有特别注意装哪里,有时候装在家目录,有时候装在系统里。一般情况下,我们知道的软件,可以联系管理员装在/usr/local或者 /opt/。我现在选用的方式是,把软件装在/usr/softwares
,然后给这个文件夹赋给一个组,组员都能访问到。
https://askubuntu.com/questions/6897/where-to-install-programs
新用户创建
https://www.tecmint.com/manage-users-and-groups-in-linux/
共享文件夹的创建
https://www.tecmint.com/create-a-shared-directory-in-linux/
戴尔工作站(Precision 7920)安装双系统win10+ubuntu18.04
https://blog.csdn.net/jcsm__/article/details/105937544
Linux有哪些命令行神器值得使用?
https://mp.weixin.qq.com/s/Mn5Vlftwm_mSt3RY-rI8dw