随着学习的深入,对算力的要求越来越高。但我实验室的电脑并没有配置显卡,所以便需要使用学院的服务器。成功拿到账号后,却发现这个平台并没有我想象的那么好用😇为了达到最舒适的使用体验,开搞!
#
配置开发镜像
平台里虽然预置了一些开发环境,但仍然缺少一些需要的软件,每次连入后再重新安装实在是不优雅。那么最好的方案就是配置好一套环境,直接拉取就能使用。在我之前,已经有位大佬构建了一套开发环境并进行了分享,可是镜像大小达到了惊人的18.4G😯(容量大说明功能多,此处并没有贬低的意思)。我个人比较喜欢Arch的哲学,即Keep It Simple, Stupid(对应中文为“保持简单,且一目了然”)。为此,我决定构建一个最小化的开发环境且可以开箱即用。
通过探究发现,这个平台上所有的开发环境都是一个Docker容器。所以,我们只要构建好镜像并上传就OK了。构建镜像有两种方式,一种是进入容器手动配置然后使用docker commit ...
保存修改;另一种则是使用Dockerfile
。为了便于维护和修改,我选择了第二种。
接下来就是明确需求了,我对其的要求有几点:
- 安装好显卡驱动,可以直接使用cuda
- 安装好conda,可以便捷的管理python开发环境
- 有一个易用的终端,方便调试
cuda很好解决,直接在nvidia官方的镜像上进行修改就行了
对于conda,原版的Anaconda过于臃肿,不符合KISS原则。同时,当环境复杂(conda
和pip
混用)时,solving environment
这一步可以卡到你怀疑人生,于是我选择了使用C++重构的mamba,并选择micromamba
进一步压缩体积。
对于终端,那就无脑使用zsh
并加载oh-my-zsh
并安装我日常使用的插件。
如此一来,就可以开写Dockerfile了。
📃展开代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# base image
FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04
MAINTAINER luoboQAQ
# 设置国内镜像源并安装软件
RUN set -ex \
&& sed -i 's@/archive.ubuntu.com/@/mirrors.bfsu.edu.cn/@g' /etc/apt/sources.list \
&& apt-get clean \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-client openssh-server git zsh curl vim \
&& rm -rf /var/lib/apt/lists/*
# 配置openssh[https://github.com/wjyzzu/inpsur-dockerfile/blob/main/base/ubuntu/Dockerfile]
RUN set -ex \
&& mkdir -p /var/run/sshd \
&& /usr/bin/ssh-keygen -A \
&& cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \
&& echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \
&& cat /etc/ssh/sshd_config | grep -v PermitRootLogin> /etc/ssh/sshd_config.new \
&& echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.new \
&& mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \
&& mv /etc/ssh/sshd_config.new /etc/ssh/sshd_config
# 配置oh-my-zsh
RUN set -ex \
&& git clone https://gitee.com/mirrors/oh-my-zsh ~/.oh-my-zsh \
&& cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc \
&& git clone https://gitee.com/lightnear/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting \
&& sed -i "s/plugins=(git.*)$/plugins=(git zsh-syntax-highlighting)/" ~/.zshrc \
&& chsh -s /bin/zsh \
&& rm -rf /var/lib/apt/lists/*
# 安装micromamba并配置国内源
RUN set -ex \
&& curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba \
&& ./bin/micromamba shell init -s zsh -p ~/micromamba \
&& echo "\nalias conda='micromamba'" >> ~/.zshrc \
&& echo "channels: \n\
- defaults \n\
show_channel_urls: true \n\
default_channels: \n\
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/main \n\
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/r \n\
- https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2 \n\
custom_channels: \n\
conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
pytorch-lts: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud \n\
deepmodeling: https://mirrors.bfsu.edu.cn/anaconda/cloud/" > ~/.condarc \
&& echo "[global] \n\
index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple" > /etc/pip.conf
# 配置网络代理
RUN set -ex \
&& echo "\nexport HTTP_PROXY='http://127.0.0.1:3128'" >> ~/.zshrc \
&& echo "export HTTPS_PROXY='http://127.0.0.1:3128'" >> ~/.zshrc \
&& echo "export ALL_PROXY='http://127.0.0.1:3128'" >> ~/.zshrc
EXPOSE 22
WORKDIR /root
ENTRYPOINT ["/bin/zsh"]
|
除了上面提到的几点,我还增加了:
- 镜像已配置好国内镜像源,方便构建以及使用时安装新的包
- 配置openssh,使其可以被浪潮平台接入并提供SSH服务
- 预先安装好vim,便于配置文件的修改
- 提前设置好网络代理,便于连接互联网
- 设置别名:
conda
->micromamba
,方便日常使用
由于服务器没有网络,需要我们手动上传镜像,使用命令docker save -o [TAGS]
打包成tar包并上传至系统中。
#
小结
希望这篇文章可以帮助大伙快速上手该平台,毕竟有这么好的资源就要好好利用起来。