问题描述:本地anaconda配好了某代码所需环境,需要把代码放到服务器上跑。
策略:服务器上已有docker(和nvidia-docker),考虑将本地环境配置为镜像,上传到服务器后加载镜像,用容器跑代码
省流:不可避免地重新“配了一遍环境”(安装相应的包)
【最终成功的流程】
-
0-准备requirements.txt
- pip freeze > requirements.txt 从本地相应的anaconda环境中导出requirements.txt备用
-
1-从云端拉取含anaconda的镜像
- 更常见的情况是首先下载含对应版本pytorch的镜像,用来跑深度学习代码,参考:【10分钟学会Docker的安装和使用_docker安装-CSDN博客】【5 DIY一个自己的pytorch镜像】
- docker pull continuumio/anaconda3
- 我用 docker search 其实没有搜到,但【(本人自用)将本地的anaconda环境封装到docker中并导出为压缩包_anaconda3环境迁移到docker-CSDN博客】和【学习记录:docker 下部署anaconda – 知乎 (zhihu.com)】里给出的都是这个镜像,最后我也pull成功了
-
2-在含anaconda的镜像上构建容器
- docker images 查看当前有哪些镜像
- docker run –name test240912 -idt continuumio/anaconda3 构建名为test240912的容器
-
3-进入容器,在容器中创建指定python版本的虚拟环境
- docker ps查看当前正在运行的容器,docker ps -a查看所有容器(包括没在运行的)
- docker exec -it test240912 /bin/bash 进入容器test240912,命令行控制(bash)
- 进入容器后可以用conda env list查看conda配置是否正确,输出“base”环境即为正常
- conda create –name my_new_env python=3.8 创建一个python版本3.8的虚拟环境,名为my_new_env
- conda activate my_new_env 激活my_new_env环境
- 参考事先准备的requirements.txt,pip install {包名} 或 conda install {包名}
- 为什么不直接pip install -r requirements.txt?因为我没成功
- 如果想尝试直接pip install 所有包,需要先将requirements.txt复制到容器中
- docker cp /path/to/local/requirements.txt test240912:/path/to/where/you/like
-
4-在容器中配好环境后,将容器保存为新的镜像
- docker commit -m=‘对镜像的描述’ -a=‘作者’ {当前容器名} {新镜像的命名}
- 例如 docker commit -m=‘对镜像的描述’ -a=‘作者’ test240912 new_image:v1
-
5-将镜像保存为tar文件
- docker save new_image:v1 -o new_image.tar
-
6-将tar文件传到服务器上,并加载为镜像
- docker load -i new_image.tar
-
7-在服务器上使用docker镜像
- nvidia-docker run –gpus all -idt -v /path/to/local/dir:/path/to/dir/in/container –name container-on-server new_image:v1 创建容器,-v实现本地和容器中的文件通信(同步)
- 要用nvidia-docker命令,不要用docker命令,否则无法正常使用GPU
- nvidia-docker exec -it container-on-server /bin/bash 进入容器
- 进入容器后,conda activate 相应环境,结束
- nvidia-docker run –gpus all -idt -v /path/to/local/dir:/path/to/dir/in/container –name container-on-server new_image:v1 创建容器,-v实现本地和容器中的文件通信(同步)
评论前必须登录!
注册