【docker】配置深度学习环境

news2024/12/22 23:40:06

目录

  • 基本环境搭建
  • 问题与解决
    • 容器启动后添加端口映射
    • 安装完虚拟环境后 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.coloradmin.cn/o/64623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网站部署SSL证书是否会影响网站流量?

给网站部署SSL证书的重要性想必很多站长用户都已知悉,SSL证书是数字证书的一种,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。由于SSL证书是部署在服务器上,那么SSL证…

【第二阶段:java基础】第11章:Exception异常(P442-P459)

本系列博客是韩顺平老师java基础课的课程笔记,B站:课程链接,吐血推荐的一套全网最细java教程,获益匪浅! 韩顺平P442-P4591. 异常的概念2. 常见的异常运行时异常编译异常3. 异常处理1️⃣try-catch-finally2️⃣throws4…

Java项目:SSM在线化妆品网站

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台项目,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登…

Java入门笔记

目录Java入门笔记快捷键基础准备环境准备Java编译运行流程TODO自定义模板基础语法变量原理标识符标识符命名规则数据类型整数型浮点型类型转换引用数据类型面向对象类和对象判断一个对象是不是某个类方法传参可变参数基本数据类型传参字符串数据类型传参引用数据类型传参静态属…

MySQL索引事务——小记

文章目录索引概念page索引类型B树vsB树主键索引非聚簇索引覆盖索引复合索引/联合索引优化基于B树的索引hash索引事务事务的特性ACID问题隔离级别索引 概念 使用一定的数据结构,来保存索引字段(一列或多列)对应的数据。以后根据索引字段来检…

低代码常见场景【上】|如何解决业务问题

全文 2105 字 阅读时间约 7 分钟 首发于码匠技术博客 目录 低代码用例 用于解决业务问题的低代码用例 内部系统开发所面临的困境 低代码如何解决上述困境 关于码匠 低代码平台通过在开发和部署应用程序时最大限度地减少编程来减轻 IT 团队的压力,不仅可以帮助…

[附源码]Python计算机毕业设计Django农村人居环境治理监管系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java+MySQL 基于Springboot的垃圾分类网站-计算机毕业设计

项目介绍 当前全球都在提倡环境保护,现在社会高速发展,我们每个人每天都会产生很多的垃圾,尤其是工业发展到一定阶段之后这些垃圾的种类也越来越多,如果随意丢弃很可能会造成环境污染,尤其是一些电池等重污染垃圾&…

前端模块化开发

1.模块化产生的背景 Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。 但是,Javascript不是一种模块化编程语言,它不支持"类&quo…

持续的敏捷转型--我们的经验

作者:Shalini Joshi、 Syed Tamkeen Banu 在这篇文章中,我们将分享自己的经验和教训,说明组织可能在哪些方面会失败,以及可以采取哪些积极措施。 一、简介 如今,大多数组织为了获取更快的交付、更高的商业价值和更好的…

Markdown使用模板

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

智能仓储机器人设计

目录 第一章 绪论 1 1.1 研究的背景与意义[1] 1 1.2 机器人的研究现状[4] 2 1.3机器人的发展趋势 4 1.4本文的主要研究内容 5 第二章 机器人总体方案设计 7 2.1 小型仓储机器人的功能 7 2.2 传感器系统[13] 7 2.3 移动载体 7 2.4 自由度与机器人的运作 8 2.5 控制方式的选择 9 …

Git使用及配置

一、下载安装 网上很多教程我就不出了,hh 二、配置 1.设置用户信息 //设置用户信息 git config --global user.name"xxx" git config --global user.email"xxxxx.xxx" 三、获取本地仓库 1.在电脑上创建一个空目录作为本地Git仓库 2.进入这…

【Redis】初识Redis

1.初识Redis1.1安装1.2数据结构1.2.1 通用命令1.2.2 String类型key的结构1.2.3 Hash类型2.Jedis2.1 添加依赖及配置2.2 配置StringRedisTemplte1.初识Redis Redis是一个基于内存的键值型NoSQL数据库。其具有性能优越、持久化的特点,能够支持每秒十几万次的读写操作…

前端面试题之【HTTP/HTML/浏览器】

1.说一下http与https http:超文本传输协议,https:超文本传输安全协议 区别: http传输数据是未加密的,是明文传输;https使用ssl协议对数据进行加密处理;https协议需要ca证书,费用高…

【VUE 嵌套路由】

目录 1. 嵌套路由 2. 通俗小结 1. 嵌套路由 要使用菜单显示出“点击不同的菜单项显示不同的内容”的效果&#xff0c;需要使用嵌套路由&#xff01; 因为&#xff0c;在当前设计中&#xff0c;App.vue是显示整个页面的入口&#xff0c;而App.vue就已经使用<router-view/…

应急物资仓库管理系统-3D可视化管理系统

1. 系统介绍 RFID智慧应急物资仓库可视化管理系统是杭州东识科技有限公司基于物联网RFID技术、云计算技术、3D可视化技术、数据采集技术等&#xff0c;专门为政府、军队等部门量身定制的一体化物资综合管理平台。 本系统包括&#xff1a;物资安全监控部分——提供对环境温湿度监…

[附源码]Python计算机毕业设计Django失物招领微信小程序论文

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Slowloris DoS攻击的原理与简单实现

前言 Slowloris 攻击是我在李华峰老师的书——《Metasploit Web 渗透测试实战》里面看的&#xff0c;感觉既简单又使用&#xff0c;现在这种攻击是很容易被防护的啦。不过我也不敢真刀实战的去试&#xff0c;只是拿个靶机玩玩罢了。 废话还是写在结语里面吧。&#xff08;划掉&…

Java 中重写了 equals 为什么还要重写 hashCode?

问题 不管是在书本或者是博客上&#xff0c;都会推荐我们在重写 equals 方法时重写 hashCode 方法。明明对象之间就是通过 equals 方法进行判断的&#xff0c;那么为什么非要写 hashCode 方法呢? equals 实验 创建一个 Teacher 类。方便起见&#xff0c;就一个 name 属性。…