两行命令搭建深度学习环境(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 注册方式 我一…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...