题目描述:本地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 相应环境,竣事
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |