目录
- 一. Ubuntu系统中安装Docker
- 二. Docker中配置Ubuntu18.04镜像
- 安装版本查看
- Step 1: 登录Docker
- Step 2: 拉取Ubuntu18.04镜像
- Step 3: 查看已有镜像
- Step 4: 在容器中运行带有`GPU`组件的`Ubuntu18.04`镜像并设置容器名称(名称以`transformers`为例)
- Step 5: 配置容器
- 5.1 安装Python3.8.12
- 5.2 导出原环境python库
- 5.3 将`requirements.txt`文件移入`transformers`容器中
- 5.4 在`transformers`容器中使用`pip`指令安装依赖包
- 5.5 上传容器至`Docker Hub`
- 5.5.1 为了不变动原容器,使用`export`指令导出原容器
- 5.5.2 将导出的容器快照导入作为新镜像
- 5.5.3 镜像规范化命名(用户名/镜像名)
- 5.5.4 上传至`Docker Hub`
- 5.5.5 [登录 Docker Hub 官网](https://hub.docker.com/)验证上传成功
- 5.6 镜像介绍
- 补充:容器常用指令
一. Ubuntu系统中安装Docker
官网安装Docker
适用于
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Impish 21.10
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
二. Docker中配置Ubuntu18.04镜像
安装版本查看
docker --version
显示 docker 安装版本为20.10.18
Step 1: 登录Docker
sudo docker login
Step 2: 拉取Ubuntu18.04镜像
sudo docker pull ubuntu:18.04
Step 3: 查看已有镜像
sudo docker images
发现ubuntu
镜像已经出现在目录中
注:如果安装错误版本可以使用下面指令强制删除镜像
sudo docker rmi -f image-id
image-id
表示镜像的ID(上一条指令中第三个属性显示IMAGE ID)
Step 4: 在容器中运行带有GPU
组件的Ubuntu18.04
镜像并设置容器名称(名称以transformers
为例)
sudo docker run -it -e NVIDIA_DRIVER_CAPABILITIES=compute,utility --gpus all --name transformers ubuntu:18.04
2023.8.15更新日志:
由于docker容器下调用nvidia-smi
显示CUDA Version:N/A,因此在定义容器时加入下面属性:
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
-t
表示为容器重新分配一个伪输入终端,通常与 -i 同时使用-i
表示以交互模式运行容器
更多run指令介绍
Step 5: 配置容器
此处以在容器中ubuntu18.04系统配置深度学习开发环境为例给出配置方法
5.1 安装Python3.8.12
apt update
apt install sudo
apt install vim
apt install module-init-tools kmod # NVIDIA驱动依赖包
apt install wget
wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz # 安装指定版本
tar -zxvf Python-3.8.12.tgz -C ~
cd ~/Python-3.8.12
apt install zlib1g-dev libbz2-dev libssl-dev libpcre3-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev # Python依赖包
6 # 选择地区亚洲
19 # 选择城市重庆
./configure --prefix=/usr/
make # 3 min
make test # 2 min 30 sec
make install # 10 sec
ln -s /usr/bin/python3 /usr/bin/python
ln -s /usr/bin/pip3 /usr/bin/pip
mkdir /home/Documents # 新建Documents文件夹用于后面存一些交互文件
mkdir /home/Downloads # 新建Downloads文件夹用于存取下载文件
5.2 导出原环境python库
在原环境下激活conda
环境后导出包, pip
导出命令如下
pip list --format=freeze > requirements.txt
会导出当前环境conda
中安装的包以及包的版本,并在当前目录生成requirements.txt
文件
5.3 将requirements.txt
文件移入transformers
容器中
sudo docker cp /home/lab501/文档/requirements.txt transformers:/home/Documents/requirements.txt
注:从transformers
容器将文件移入主机的命令将上述路径调换即可,例如:
sudo docker cp transformers:/home/Documents/requirements.txt /home/lab501/文档/requirements.txt
5.4 在transformers
容器中使用pip
指令安装依赖包
pip install -r /home/Documents/requirements.txt
注:
- 用
conda
指令导出包,使用pip
安装会报错,原因在于conda
和pip
导出的txt
文件中包的表述形式不同
conda list -e > requirements.txt
例如conda
导出包的表述形式为
scipy=1.4.1=pypi_0
pip
导出包的表述形式为
scipy==1.4.1
pip
导出包使用pip
安装时也会出错,原因在于这些发生安装错误的包在原环境中都是从外链下载的,requirements.txt
文件中没有指出这些链接因此找不到对应版本。解决办法为先在requirements.txt
中删除这些发生错误的包,如果不需要安装这些包就不用重新安装,需要安装的话再单独安装这些包,或者将版本改为pip
源中存在的版本(前提是版本之间互相兼容)。
至此,使用cp
指令传入模型代码和数据到transformers
容器中即可正常运行和测试
5.5 上传容器至Docker Hub
5.5.1 为了不变动原容器,使用export
指令导出原容器
sudo docker export transformers > transformers.tar
5.5.2 将导出的容器快照导入作为新镜像
sudo cat transformers.tar | sudo docker import - deeplearning
注:导入命令中import
和deeplearning
之间有一个-
,deeplearning
为新镜像的名字(可自定义但是不能含有大写字母)
5.5.3 镜像规范化命名(用户名/镜像名)
sudo docker tag deeplearning:latest boxuguan/deeplearning
5.5.4 上传至Docker Hub
sudo docker push boxuguan/deeplearning:latest
5.5.5 登录 Docker Hub 官网验证上传成功
完结撒花,做一下镜像介绍,有需要的可以直接使用
V1.0 版本
系统: Ubuntu 18.04 (GPU版) Python版本: Python3.8.12
配置: Pytorch 1.10.0
, transformers4.10.0
, NLTK3.7
, tensorflow-cpu2.3.0
, scipy1.4.1
, scikit-learn0.24.1
, pandas1.4.0
, numpy1.18.5
, codalab1.5.10
V2.0版本(最新NLP开发镜像)
5.6 镜像介绍
-
System
:Ubuntu18.04 Python
:
- 原始环境3.10.12
- conda-base环境 3.11.4
- conda-guanbx环境 3.10.12
-
Anaconda
:Anaconda3-2023.07-2-Linux-x86_64 (conda:23.7.2) -
cuda
:release 11.3, V11.3.109 -
cudnn
:8.9.4 python库
(conda-guanbx环境下):
- torch 2.0.0+cu117
- transformers 4.30.2
补充:容器常用指令
- Docker镜像索引方式
①IMAGE_REPOSITORY:TAG
(例如ubuntu:18.04
)
②IMAGE_ID
- Docker容器索引方式
①CONTAINER_NAMES
(例如transformers
)
②CONTAINER_ID
- 强制删除容器
CONTAINER_NAMES
sudo docker rm -f CONTAINER_NAMES
- 终端键入
exit
或者使用Ctrl+D
退出并关闭容器 - 使用
Ctrl+Q+P
退出容器,但不关闭容器 - 使用如下指令查看正在运行的容器
sudo docker ps
sudo docker ps -a # 查看所有容器包括停止运行的容器
- 运行容器但不进入该容器
sudo docker start CONTAINER_NAMES
- 进入容器(前提是该容器已经在后台运行)
sudo docker attach CONTAINER_NAMES
- 重启容器
sudo docker restart CONTAINER_NAMES
- 停止运行容器
sudo docker kill CONTAINER_NAMES
sudo docker stop CONTAINER_NAMES