两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤
深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明:
- base 版本基于
pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认python版本为 3.11.10,可以通过conda install python==版本号直接修改版本。- dl 版本在 base 基础上,额外安装了深度学习框架和常用工具,具体查看附录的安装清单。
如果你已经配置好了Docker,只需两行命令即可完成深度学习环境的搭建。对于没有 Docker 的同学,也不用担心,本文将提供详细的安装指引,帮助你一步步完成环境配置
P.S. 所有命令在 Ubuntu 18.04/20.04/22.04 下可以顺利执行(其余系统可通过文内链接跳转安装)。
文章目录
- 镜像介绍
- 快速配置环境(两行命令)
- 1. 获取镜像(三选一)
- 国内镜像版
- 🪜科学上网版(直连)
- 本地(网盘下载)
- 2. 运行容器
- 省流版
- 安装 Docker Engine
- 卸载旧版本
- 使用 `apt` 仓库安装
- GPU 驱动安装
- 安装 NVIDIA Container Toolkit
- 拉取并运行深度学习 Docker 镜像
- 附录
- 安装清单
- base
- dl
镜像介绍
所有版本都预装了 sudo、pip、conda、wget、curl 和 vim 等常用工具,且已经配置好 pip 和 conda 的国内镜像源。同时,集成了 zsh 和一些实用的命令行插件(命令自动补全、语法高亮、以及目录跳转工具 z)。此外,已预装 jupyter notebook 和 jupyter lab,方便进行深度学习开发,并优化了容器内的中文显示,避免出现乱码问题。其中还预配置了 Hugging Face 的国内镜像地址。
链接:
- quickstart,位于 Docker Hub,对应于下方的 pull 命令。
- 百度云盘,直接下载对应的版本,跳过科学版的命令进行配置。
快速配置环境(两行命令)
如果遇到报错,查阅《Docker 基础命令介绍和常见报错解决》。
1. 获取镜像(三选一)
假设你已经安装并配置好了 Docker,那么只需两行命令即可完成深度学习的环境配置,以 dl 镜像为例,拉取:
国内镜像版
不可用的时候欢迎评论,我会对其进行替换。
sudo docker pull dockerpull.org/hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
🪜科学上网版(直连)
sudo docker pull hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
如果镜像有更新版本,可通过
docker pull拉取最新镜像。
本地(网盘下载)
通过百度云盘下载文件(阿里云盘不支持分享大的压缩文件)。
同名文件内容相同,
.tar.gz为压缩版本,下载后通过以下命令解压:gzip -d dl.tar.gz
假设 dl.tar 被下载到了 ~/Downloads 中,那么切换至对应目录:
cd ~/Downloads
然后加载镜像:
sudo docker load -i dl.tar
2. 运行容器
以容器名 dl 为例:
sudo docker run --gpus all -it --name dl hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel /bin/zsh
如果需要使用 Jupyter,可以使用以下命令:
sudo docker run --gpus all -it --name dl -p 8888:8888 hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel /bin/zsh
省流版
对于映射多个端口的同学,可以直接使用主机网络的配置(
--network host)
sudo docker run --gpus all -it --name dl --network host hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel /bin/zsh
如果需要设置代理,增加 -e 来设置环境变量,也可以参考拓展文章a:
假设代理的 HTTP/HTTPS 端口号为 7890, SOCKS5 为 7891:
-e http_proxy=http://127.0.0.1:7890-e https_proxy=http://127.0.0.1:7890-e all_proxy=socks5://127.0.0.1:7891
融入到之前的命令中:
sudo docker run --gpus all -it \--name dl \--network host \-e http_proxy=http://127.0.0.1:7890 \-e https_proxy=http://127.0.0.1:7890 \-e all_proxy=socks5://127.0.0.1:7891 \hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel \/bin/zsh
常用操作提前看:
- 启动容器:
docker start <容器名>- 运行容器:
docker exec -it <容器名> /bin/zsh
- 容器内退出:
Ctrl + D或exit。- 停止容器:
docker stop <容器名>- 删除容器:
docker rm <容器名>
如果还没有安装 Docker,继续阅读,可以根据实际情况通过目录快速跳转。
安装 Docker Engine
对于图形界面来说,可以跳过下面的命令直接安装 Desktop 版本(其中会提供 Docker Engine),这是最简单的方法。根据系统访问:
- Linux
- Mac
- Windows
以下是命令行的安装命令,在 Ubuntu 上运行,其余系统参考官方文档。
卸载旧版本
在安装 Docker Engine 之前,需要卸载所有有冲突的包,运行以下命令:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
apt-get 可能会报告没有安装这些包,忽略即可。
注意,卸载 Docker 的时候,存储在 /var/lib/docker/ 中的镜像、容器、卷和网络不会被自动删除。如果你想从头开始全新安装,请阅读 Uninstall Docker Engine 部分。
使用 apt 仓库安装
首次安装 Docker Engine 之前,需要设置 Docker 的 apt 仓库。
-
设置 Docker 的
apt仓库。# 添加 Docker 的官方 GPG 密钥: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc# 将仓库添加到 Apt 源: echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update如果你使用的是 Ubuntu 的衍生发行版,例如 Linux Mint,可能需要使用
UBUNTU_CODENAME而不是VERSION_CODENAME。如果
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc执行失败,尝试以下命令:sudo wget -qO- https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc -
安装 Docker 包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -
通过运行
hello-world镜像来验证安装是否成功:sudo docker run hello-world这个命令会下载测试镜像并运行,如果你看到以下输出,那么恭喜你安装成功:

GPU 驱动安装
如果需要使用 GPU 的话,先安装适用于你的系统的 NVIDIA GPU 驱动程序,访问任一链接进行:
- NVIDIA CUDA Installation Guide for Linux
- Official Drivers
这部分配置文章很多,偷个懒 😃 就不开新环境演示了,下面讲点可能不同的。
安装 NVIDIA Container Toolkit
为了在 Docker 容器中使用 GPU,需要安装 NVIDIA Container Toolkit。
注意,我们现在不再需要安装 nvidia-docker,官方在 2023.10.20 指出其已被 NVIDIA Container Toolkit 所取代,过去的配置命令可能已不再适用。
以下命令使用 Apt 完成,Yum 等其他命令访问参考链接:Installing the NVIDIA Container Toolkit。
-
设置仓库和 GPG 密钥
设置 NVIDIA 的软件源仓库和 GPG 密钥,确保我们可以从官方源安装 NVIDIA Container Toolkit。
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list。 -
安装 NVIDIA Container Toolkit
sudo apt-get update sudo apt-get install -y nvidia-container-toolkit -
配置 Docker
使用
nvidia-ctk工具将 NVIDIA 容器运行时配置为 Docker 的默认运行时。sudo nvidia-ctk runtime configure --runtime=docker -
重启 Docker
sudo systemctl restart docker
拉取并运行深度学习 Docker 镜像
现在可以拉取深度学习(dl)镜像,命令和之前一致。
-
拉取镜像
sudo docker pull hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
-
运行镜像
sudo docker run --gpus all -it hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel -
检查 GPU
在容器内运行:
nvidia-smi如果正确显示代表成功。不过对于实际使用来说,还需要了解基础命令和报错的解决方法。使用
Ctrl + D或者命令行输入exit并回车退出容器,继续阅读《Docker 基础命令介绍和常见报错解决》。
附录
安装清单
base
基础环境:
- python 3.11.10
- torch 2.5.1 + cuda 11.8 + cudnn 9
Apt 安装:
wget、curl:命令行下载工具vim、nano:文本编辑器git:版本控制工具git-lfs:Git LFS(大文件存储)zip、unzip:文件压缩和解压工具htop:系统监控工具tmux、screen:会话管理工具build-essential:编译工具(如gcc、g++)iputils-ping、iproute2、net-tools:网络工具(提供ping、ip、ifconfig、netstat等命令)ssh:远程连接工具rsync:文件同步工具tree:显示文件和目录树lsof:查看当前系统打开的文件aria2:多线程下载工具
pip 安装:
jupyter notebook、jupyter lab:交互式开发环境virtualenv:Python 虚拟环境管理工具,可以直接用 condatensorboard:深度学习训练可视化工具ipywidgets:Jupyter 小部件库,用以正确显示进度条
插件:
zsh-autosuggestions:命令自动补全zsh-syntax-highlighting:语法高亮z:快速跳转目录
dl
dl(Deep Learning)版本在 base 基础上,额外安装了深度学习可能用到的基础工具和库:
Apt 安装:
ffmpeg:音视频处理工具libgl1-mesa-glx:图形库依赖(解决一些深度学习框架图形相关问题)
pip 安装:
- 数据科学库:
numpy、scipy:数值计算和科学计算pandas:数据分析matplotlib、seaborn:数据可视化scikit-learn:机器学习工具
- 深度学习框架:
tensorflow、tensorflow-addons:另一种流行的深度学习框架tf-keras:Keras 接口的 TensorFlow 实现
- NLP 相关库:
transformers、datasets:Hugging Face 提供的 NLP 工具nltk、spacy:自然语言处理工具
一些库在安装时被自动安装,如 tensorflow 中的 keras。
如果需要额外的库,可以通过以下命令手动安装:
pip install --timeout 120 <替换成库名>
这里 --timeout 120 设置了 120 秒的超时时间,确保在网络不佳的情况下仍然有足够的时间进行安装。如果不进行设置,在国内的环境下可能会遇到安装包因下载超时而失败的情况。
相关文章:
两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤
深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明: base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认 python 版本…...
Redis做分布式锁
(一)为什么要有分布式锁以及本质 在一个分布式的系统中,会涉及到多个客户端访问同一个公共资源的问题,这时候我们就需要通过锁来做互斥控制,来避免类似于线程安全的问题 因为我们学过的sychronized只能对线程加锁&…...
lambdaQueryWrapper详细解释
LambdaQueryWrapper 是 MyBatis Plus 提供的一个强大的查询条件构建工具,它允许你使用 Lambda 表达式来构建查询条件,从而使代码更加简洁和易读。下面详细介绍 LambdaQueryWrapper 的使用方法及其底层原理。 什么是 LambdaQueryWrapper? La…...
【工控】线扫相机小结 第三篇
海康软件更新 目前使用的是 MVS_STD_4.3.2_240705.exe ,最新的已经到4.4了。 一个大的变动 在上一篇中我们提到一个问题: 需要注意的是,我们必须先设置 TriggerSelector 是 “FrameBurstStart” 还是 “LineStart” 再设置TriggerMode 是 …...
golang中的init函数
程序的初始化和执行都起始于 main 包。如果 main 包还导入了其它的包,那么就会在编译时将它们依次 导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到 fmt 包,但 它只会被导入一次&#x…...
理解和选择Vue的组件风格:组合式API与选项式API详解
目录 前言1. Vue 的两种组件风格概述1.1 选项式 API:直观且分块清晰1.2 组合式 API:灵活且逻辑集中 2. 深入理解组合式 API 的特点2.1 响应式变量与函数式编程2.2 逻辑组织更清晰2.3 更好的代码复用 3. 应用场景分析:如何选择 API 风格3.1 适…...
Java基础——高级技术
1. 单元测试 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。 1.1. Junit单元测试框架 可以用来对方法进行测试,他是第三方公司开源出来的(很多开发工具都已经集成了Junit框架,如IDEA&a…...
什么是SSL VPN?其中的协议结构是怎样的?
定义:SSL VPN是以SSL协议为安全基础的VPN远程接入技术,移动办公人员使用SSL VPN可以安全、方便的接入企业内网,访问企业内网资源,提高工作效率。 SSL(Security Socket Layer)是一个安全协议,为…...
程序员高频率面试题-整理篇
Redis 除了做缓存,还能做什么? 分布式锁:通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Redisson 来实现分布式锁。 限流:一般是通过 Redis Lua 脚本的方式来实现限流。 消息队列&#x…...
第二十二章 TCP 客户端 服务器通信 - TCP设备的OPEN和USE命令关键字
文章目录 第二十二章 TCP 客户端 服务器通信 - TCP设备的OPEN和USE命令关键字TCP设备的OPEN和USE命令关键字TCP设备的OPEN和USE命令关键字 第二十二章 TCP 客户端 服务器通信 - TCP设备的OPEN和USE命令关键字 TCP设备的OPEN和USE命令关键字 可以使用位置参数(如上所述)或关键…...
CSS 语法规范
基本语法结构 CSS 的基本语法结构包含 选择器 和 声明块,两者共同组成 规则集。规则集可以为 HTML 元素设置样式,使页面结构和样式实现分离,便于网页的美化和布局调整。 CSS 规则集的结构如下: selector {property: value; }选择器(Selector) 选择器用于指定需要应用…...
Linux开发常用命令
文章目录 开发常用命令包管理 网络操作用户和权限系统监控nohup和screen的区别 开发常用命令 Linux开发中常用的命令非常多,以下是一些基本且重要的命令,这些命令对于日常的开发工作流程至关重要: 文件和目录操作 ls:列出目录内…...
Linux第92步_如何编写“设备树”下的platform设备驱动
Linux字符设备驱动,新字符设备驱动和设备树下的GPIO驱动,都是配置IO引脚所使用的GPIO寄存器,驱动开发方式和裸机没啥区别。Limux内核提供了pinctrl和gpio子系统用于GPIO驱动,借助它可简化GPIO驱动开发。 对GPIO进行读写操作&#…...
从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
在 sophpi 中,默认网卡 eth0 的 MAC 地址未配置,是随机生成的。这样就会导致每次重启之后,MAC 地址会改变,从而导致通过 DHCP 获取 IP 地址每次也都在变化。 查看 MAC 地址 前文提到 eth0 自动使能并通过 DHCP 获取 IP 地址&…...
JMeter与大模型融合应用之JMeter日志分析服务化实战应用
JMeter与大模型融合应用之JMeter日志分析服务化 引言 在当今的互联网时代,网站和应用程序的性能直接影响到用户的体验和业务的成功。为了保证系统的稳定性和高效性,性能测试成为了软件开发过程中的一个重要环节。在这其中,Apache JMeter作为一款开源的性能测试工具,凭借其…...
AtCoder Beginner Contest 380(A-F)
比赛链接:AtCoder Beginner Contest 380(A-F) A - 123233 题意 给出一个数字 N N N,问这个数字中是否 1 1 1 恰好出现了 1 1 1 次, 2 2 2 恰好出现了 2 2 2 次, 3 3 3 恰好出现了 3 3 3 次。 数据范围 100000 ≤ N ≤ 99…...
多线程-阻塞队列
目录 阻塞队列 消息队列 阻塞队列用于生产者消费者模型 概念 实现原理 生产者消费者主要优势 缺陷 阻塞队列的实现 1.写一个普通队列 2.加上线程安全和阻塞等待 3.解决代码中的问题 阻塞队列 阻塞队列,是带有线程安全功能的队列,拥有队列先进…...
el-table合并单元格之后,再进行隔行换色的且覆盖表格行鼠标移入的背景色的实现
el-table 中有现成的隔行换色功能,只要增加 stripe 属性即可。但是如果有单元格合并的话,这个属性就不可用了。这时候我们就需要动点小心思了。 基于相同字段进行合并 单元格合并:基于表头中的某一列,具有相同值的个数相加进行合…...
java模拟键盘实现selenium上下左右键 table中的左右滚动条实现滚动
在这篇文章中,我们将学习如何使用Java编程语言模拟键盘输入,特别是模拟上下左右方向键的操作。这是一个很有趣的项目,尤其适合刚入行的开发者。我们将分步进行,接下来,我们会通过表格展示整个实现过程,然后…...
SDF,一个从1978年运行至今的公共Unix Shell
关于SDF 最近发现了一个很古老的公共Unix Shell服务器,这个项目从1978年运行至今,如果对操作系统,对Unix感兴趣,可以进去玩一玩体验一下 SDF Public Access UNIX System - Free Shell Account and Shell Access 注册方式 我一…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
