【docker】配置深度学习环境

news/2024/12/29 2:43:13/

目录

  • 基本环境搭建
  • 问题与解决
    • 容器启动后添加端口映射
    • 安装完虚拟环境后 CUDA调用不了
    • opencv的使用问题
    • 自定义软件包的使用

基本环境搭建

在这里插入图片描述

容器基本操作:

# 按照服务器配置拉取对应的镜像
docker pull pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel# 查看主机端口 没有信息 说明端口空闲
netstat -anp |grep 8088# 生成对应容器 
docker run -it --ipc=host --runtime=nvidia --name Det-yxx -p 8088:22 -v /home/yxx/3D_object_dection/kitti:/workspace/kitti pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel /bin/bash# --ipc=host 容器与宿主主机共享内存
# --runtime=nvidia: 使用GPU# 重新进入该容器
docker exec -it 容器id /bin/bash # 进入容器后,打开一个新的终端
docker attach  容器id # 进入容器后,进入正在执行的终端

容器内查看GPU相关:

进入python控制台
import torch
# 查看容器中是否可以使用CUDA
torch.cuda.is_available()# 查看有几张卡
torch.cuda.device_count()# 查看卡的型号 'NVIDIA GeForce RTX 2070'
torch.cuda.get_device_name(0)

容器内配置ssh

# 给当前容器设置密码 后面ssh使用密码登录
passwd
# 安装ssh
apt-get update
apt-get install openssh-server
apt-get install openssh-client
apt-get install ssh
# 安装vim
apt-get install vim
# 安装网络工具包
apt-get install net-tools
# 查看端口占空 发现22端口确实空闲
netstat -anp |grep 22
# ssh的连接设置
vim /etc/ssh/sshd_config
# 文件末尾追加:
PermitRootLogin yes
port=22 
PubkeyAuthentication yes
PasswordAuthentication yes# 启动ssh
/etc/init.d/ssh restart
# 再次查看端口 发现被ssh占用了已经
netstat -anp |grep 22# 尝试远程登录容器 这边其实和登录服务器一样了
# 登录服务器是 ssh 用户名@ip -p 22
# 容器内我们没有设置其他用户 直接就用root登录 ip还是服务器的ip 端口就是主机的8088端口 对应容器的22端口
ssh root@ip -p 8088

其他环境:

# 配置pip 参考这里:https://blog.csdn.net/qq_44173974/article/details/125336916
# 安装git zip等常用软件
apt-get update
apt-get install git
apt-get install zip# 安装conda 
# 参考https://blog.csdn.net/qq_44173974/article/details/125336916
# 将容器打包成镜像(因为做完了基本的环境配置了)
docker commit -m="基本环境" -a="yxx" 容器ID dl-environment-yxx:1.0
# 重新生成容器
docker run -it --ipc=host --runtime=nvidia --name dl-yxx -p 8088:22 -v /home/yxx/3D_object_dection/dl-yxx:/dl-yxx dl-environment-yxx:1.0  /bin/bash

问题与解决

容器启动后添加端口映射

一般添加端口自映射需要在生成容器的时候用-p指定映射规则,但如果当时忘记指定了或者后期需要新的映射规则,就需要这一步了
方法1:将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口,比较暴力
方法2:直接修改当前容器的配置文件

# 停止容器 但是停止容器之前记得吧容器ID记下来哟
docker stop 容器ID/name
# 停掉docker服务
systemctl stop docker
# 查看容器的端口映射 是空
docker port 容器ID/name
# 进入容器配置文件的存放目录
# 注意 这里的容器ID需要是完全的 一般docker ps之类看到的都是部分的 可以使用docker inspect 查看完整的容器id
cd /var/lib/docker/containers/容器Id
vim hostconfig.json
vim config.v2.json

注意我们要实现的是将主机的8088端口和容器的22端口进行映射,并且此前两者不存在其他的映射关系
首先是在hostconfig.json中添加如下:
在这里插入图片描述
然后在config.v2.json中添加如下两处:

在这里插入图片描述

在这里插入图片描述

# 发现端口映射成功了
docker port Det-yxx
# 启动docker服务
systemctl start docker
# 启动容器
docker start Det-yxx
# 容器中启动ssh
/etc/init.d/ssh restart# 容器中查看端口 发现被22端口占用了已经
netstat -anp |grep 22
# 主机中查看端口 发现被8088端口占用了已经
netstat -anp |grep 8088

安装完虚拟环境后 CUDA调用不了

# 查看当前python解释器和所有的python解释器
import sys
sys.executable
sys.path# 安装虚拟环境的时候 CUDA版本最好和容器的CUDA版本一致 不一致的话就会出现CUDA无法调用的情况
# 我之前直接使用了本机装虚拟环境时使用的命令 忽略了本机的CUDA之类的基本环境和容器的区别
# 容器是基于镜像生成的,镜像的CUDA版本是10.2 所以虚拟环境中也要安装对应的pytorch
# conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=10.2 -c pytorch 

opencv的使用问题

# opencv的安装
pip install opencv-python
# 但是使用的时候报错
# Importerror: libgl.so.1: cannot open shared object file: no such file or directory
# 原因是opencv这些图像库会依赖一些计算机的软件,这些软件在容器中是没有的,我们需要手动安装一下
apt-get update
apt-get install ffmpeg libsm6 libxext6  -y

自定义软件包的使用

# 在跑别人代码的时候 发现一些自定义软件包的引用会存在问题如下:
# ModuleNotFoundError: No module named ‘lib‘
# 我们需要把对应的目录告诉python的解释器,比如下面这样,这表示当前目录下就存在lib这个包
import sys
sys.path.append('.')

http://www.ppmy.cn/news/1866.html

相关文章

JAVA中如何精确取到时间间隔

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候,总要统计数据,几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦,可以自己写一个工具类…

校园论坛(Java)—— 校园周边模块

校园论坛(Java)—— 校园周边模块 文章目录校园论坛(Java)—— 校园周边模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2 校园周边页面设计3、校园周边模块设计3.1 校园周边主界面的实现3.2 增加附近的交通信息4. 总…

微服务守护神-Sentinel-概念

引言 书接上篇 微服务应对雪崩的容错方案 ,大概知道微服务容错方案可以从隔离、超时、限流、熔断、降级这几方面入手。好了,理论了解了,那代码落地方案?这是后本篇的主角要登陆场:Sentinel,微服务的守护神…

(Java)Mybatis学习笔记(四)

前言 继续学习自定义映射,今天便是mybatis初步学完的最后一天了,加油,奥里给~ 搭建MyBatis框架 步骤说明 创建表时把email打成了eamil,导致报了下错 1️⃣在mybatis下创建一个module 2️⃣配置pom.xml文件,导入相…

SpringCloud框架(三):微服务优化,Feign的最佳实现方案

SpringCloud环境搭建:生产和消费 RestTemplate Spring章节复习已经过去,新的章节SpringCloud开始了,这个章节中将会回顾微服务相关 主要依照以下几个原则 每一个组件的Demo和Coding上传到我的代码仓库在原有基础上加入一些设计模式&#xf…

kubernetes,service详解下

kubernetes,service详解下 HeadLiness类型的Service 在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,kubernetes提供了HeadLiness Service,这类…

【C语言航路】第七站:结构体初阶

目录 一、结构体的声明 1.结构的基础知识 2.结构的声明 3.结构体成员的类型 4.结构体变量的定义和初始化 二、结构体成员的访问 三、结构体传参 总结 一、结构体的声明 1.结构的基础知识 结构是一些值的集合,这些值称为成员变量,结构的每个成员可…

PyG (PyTorch Geometric) 异质图神经网络HGNN

诸神缄默不语-个人CSDN博文目录 PyTorch Geometric (PyG) 包文档与官方代码示例学习笔记(持续更新ing…) 本文介绍使用PyG实现异质图神经网络(HGNN)的相关操作。 本文主要参考PyG文档异质图部分:Heterogeneous Graph…