当前位置: 首页 > news >正文

两行命令搭建深度学习环境(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

镜像介绍

所有版本都预装了 sudopipcondawgetcurlvim 等常用工具,且已经配置好 pipconda 的国内镜像源。同时,集成了 zsh 和一些实用的命令行插件(命令自动补全、语法高亮、以及目录跳转工具 z)。此外,已预装 jupyter notebookjupyter 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 + Dexit
  • 停止容器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 仓库。

  1. 设置 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
    
  2. 安装 Docker 包。

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  3. 通过运行 hello-world 镜像来验证安装是否成功:

    sudo docker run hello-world
    

    这个命令会下载测试镜像并运行,如果你看到以下输出,那么恭喜你安装成功:

    image-20241113173220588

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。

  1. 设置仓库和 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。
    
  2. 安装 NVIDIA Container Toolkit

    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
    
  3. 配置 Docker

    使用 nvidia-ctk 工具将 NVIDIA 容器运行时配置为 Docker 的默认运行时。

    sudo nvidia-ctk runtime configure --runtime=docker
    
  4. 重启 Docker

    sudo systemctl restart docker
    

拉取并运行深度学习 Docker 镜像

现在可以拉取深度学习(dl)镜像,命令和之前一致。

  1. 拉取镜像

    sudo docker pull hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
    

    image-20241115163216096

  2. 运行镜像

    sudo docker run --gpus all -it hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
    
  3. 检查 GPU

    在容器内运行:

    nvidia-smi
    

    如果正确显示代表成功。不过对于实际使用来说,还需要了解基础命令和报错的解决方法。使用 Ctrl + D 或者命令行输入 exit 并回车退出容器,继续阅读《Docker 基础命令介绍和常见报错解决》。

附录

安装清单

base

基础环境

  • python 3.11.10
  • torch 2.5.1 + cuda 11.8 + cudnn 9

Apt 安装

  • wgetcurl:命令行下载工具
  • vimnano:文本编辑器
  • git:版本控制工具
  • git-lfs:Git LFS(大文件存储)
  • zipunzip:文件压缩和解压工具
  • htop:系统监控工具
  • tmuxscreen:会话管理工具
  • build-essential:编译工具(如 gccg++
  • iputils-pingiproute2net-tools:网络工具(提供 pingipifconfignetstat 等命令)
  • ssh:远程连接工具
  • rsync:文件同步工具
  • tree:显示文件和目录树
  • lsof:查看当前系统打开的文件
  • aria2:多线程下载工具

pip 安装

  • jupyter notebookjupyter lab:交互式开发环境
  • virtualenv:Python 虚拟环境管理工具,可以直接用 conda
  • tensorboard:深度学习训练可视化工具
  • ipywidgets:Jupyter 小部件库,用以正确显示进度条

插件

  • zsh-autosuggestions:命令自动补全
  • zsh-syntax-highlighting:语法高亮
  • z:快速跳转目录

dl

dl(Deep Learning)版本在 base 基础上,额外安装了深度学习可能用到的基础工具和库:

Apt 安装

  • ffmpeg:音视频处理工具
  • libgl1-mesa-glx:图形库依赖(解决一些深度学习框架图形相关问题)

pip 安装

  • 数据科学库
    • numpyscipy:数值计算和科学计算
    • pandas:数据分析
    • matplotlibseaborn:数据可视化
    • scikit-learn:机器学习工具
  • 深度学习框架
    • tensorflowtensorflow-addons:另一种流行的深度学习框架
    • tf-keras:Keras 接口的 TensorFlow 实现
  • NLP 相关库
    • transformersdatasets:Hugging Face 提供的 NLP 工具
    • nltkspacy:自然语言处理工具

一些库在安装时被自动安装,如 tensorflow 中的 keras

如果需要额外的库,可以通过以下命令手动安装:

pip install --timeout 120 <替换成库名>

这里 --timeout 120 设置了 120 秒的超时时间,确保在网络不佳的情况下仍然有足够的时间进行安装。如果不进行设置,在国内的环境下可能会遇到安装包因下载超时而失败的情况。

相关文章:

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…...

Redis做分布式锁

&#xff08;一&#xff09;为什么要有分布式锁以及本质 在一个分布式的系统中&#xff0c;会涉及到多个客户端访问同一个公共资源的问题&#xff0c;这时候我们就需要通过锁来做互斥控制&#xff0c;来避免类似于线程安全的问题 因为我们学过的sychronized只能对线程加锁&…...

lambdaQueryWrapper详细解释

LambdaQueryWrapper 是 MyBatis Plus 提供的一个强大的查询条件构建工具&#xff0c;它允许你使用 Lambda 表达式来构建查询条件&#xff0c;从而使代码更加简洁和易读。下面详细介绍 LambdaQueryWrapper 的使用方法及其底层原理。 什么是 LambdaQueryWrapper&#xff1f; La…...

【工控】线扫相机小结 第三篇

海康软件更新 目前使用的是 MVS_STD_4.3.2_240705.exe &#xff0c;最新的已经到4.4了。 一个大的变动 在上一篇中我们提到一个问题&#xff1a; 需要注意的是&#xff0c;我们必须先设置 TriggerSelector 是 “FrameBurstStart” 还是 “LineStart” 再设置TriggerMode 是 …...

golang中的init函数

程序的初始化和执行都起始于 main 包。如果 main 包还导入了其它的包&#xff0c;那么就会在编译时将它们依次 导入。有时一个包会被多个包同时导入&#xff0c;那么它只会被导入一次&#xff08;例如很多包可能都会用到 fmt 包&#xff0c;但 它只会被导入一次&#x…...

理解和选择Vue的组件风格:组合式API与选项式API详解

目录 前言1. Vue 的两种组件风格概述1.1 选项式 API&#xff1a;直观且分块清晰1.2 组合式 API&#xff1a;灵活且逻辑集中 2. 深入理解组合式 API 的特点2.1 响应式变量与函数式编程2.2 逻辑组织更清晰2.3 更好的代码复用 3. 应用场景分析&#xff1a;如何选择 API 风格3.1 适…...

Java基础——高级技术

1. 单元测试 就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其进行正确性测试。 1.1. Junit单元测试框架 可以用来对方法进行测试&#xff0c;他是第三方公司开源出来的&#xff08;很多开发工具都已经集成了Junit框架&#xff0c;如IDEA&a…...

什么是SSL VPN?其中的协议结构是怎样的?

定义&#xff1a;SSL VPN是以SSL协议为安全基础的VPN远程接入技术&#xff0c;移动办公人员使用SSL VPN可以安全、方便的接入企业内网&#xff0c;访问企业内网资源&#xff0c;提高工作效率。 SSL&#xff08;Security Socket Layer&#xff09;是一个安全协议&#xff0c;为…...

程序员高频率面试题-整理篇

Redis 除了做缓存&#xff0c;还能做什么&#xff1f; 分布式锁&#xff1a;通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下&#xff0c;我们都是基于 Redisson 来实现分布式锁。 限流&#xff1a;一般是通过 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开发中常用的命令非常多&#xff0c;以下是一些基本且重要的命令&#xff0c;这些命令对于日常的开发工作流程至关重要&#xff1a; 文件和目录操作 ls&#xff1a;列出目录内…...

Linux第92步_如何编写“设备树”下的platform设备驱动

Linux字符设备驱动&#xff0c;新字符设备驱动和设备树下的GPIO驱动&#xff0c;都是配置IO引脚所使用的GPIO寄存器&#xff0c;驱动开发方式和裸机没啥区别。Limux内核提供了pinctrl和gpio子系统用于GPIO驱动&#xff0c;借助它可简化GPIO驱动开发。 对GPIO进行读写操作&#…...

从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改

在 sophpi 中&#xff0c;默认网卡 eth0 的 MAC 地址未配置&#xff0c;是随机生成的。这样就会导致每次重启之后&#xff0c;MAC 地址会改变&#xff0c;从而导致通过 DHCP 获取 IP 地址每次也都在变化。 查看 MAC 地址 前文提到 eth0 自动使能并通过 DHCP 获取 IP 地址&…...

JMeter与大模型融合应用之JMeter日志分析服务化实战应用

JMeter与大模型融合应用之JMeter日志分析服务化 引言 在当今的互联网时代,网站和应用程序的性能直接影响到用户的体验和业务的成功。为了保证系统的稳定性和高效性,性能测试成为了软件开发过程中的一个重要环节。在这其中,Apache JMeter作为一款开源的性能测试工具,凭借其…...

AtCoder Beginner Contest 380(A-F)

比赛链接&#xff1a;AtCoder Beginner Contest 380(A-F) A - 123233 题意 给出一个数字 N N N&#xff0c;问这个数字中是否 1 1 1 恰好出现了 1 1 1 次&#xff0c; 2 2 2 恰好出现了 2 2 2 次&#xff0c; 3 3 3 恰好出现了 3 3 3 次。 数据范围 100000 ≤ N ≤ 99…...

多线程-阻塞队列

目录 阻塞队列 消息队列 阻塞队列用于生产者消费者模型 概念 实现原理 生产者消费者主要优势 缺陷 阻塞队列的实现 1.写一个普通队列 2.加上线程安全和阻塞等待 3.解决代码中的问题 阻塞队列 阻塞队列&#xff0c;是带有线程安全功能的队列&#xff0c;拥有队列先进…...

el-table合并单元格之后,再进行隔行换色的且覆盖表格行鼠标移入的背景色的实现

el-table 中有现成的隔行换色功能&#xff0c;只要增加 stripe 属性即可。但是如果有单元格合并的话&#xff0c;这个属性就不可用了。这时候我们就需要动点小心思了。 基于相同字段进行合并 单元格合并&#xff1a;基于表头中的某一列&#xff0c;具有相同值的个数相加进行合…...

java模拟键盘实现selenium上下左右键 table中的左右滚动条实现滚动

在这篇文章中&#xff0c;我们将学习如何使用Java编程语言模拟键盘输入&#xff0c;特别是模拟上下左右方向键的操作。这是一个很有趣的项目&#xff0c;尤其适合刚入行的开发者。我们将分步进行&#xff0c;接下来&#xff0c;我们会通过表格展示整个实现过程&#xff0c;然后…...

SDF,一个从1978年运行至今的公共Unix Shell

关于SDF 最近发现了一个很古老的公共Unix Shell服务器&#xff0c;这个项目从1978年运行至今&#xff0c;如果对操作系统&#xff0c;对Unix感兴趣&#xff0c;可以进去玩一玩体验一下 SDF Public Access UNIX System - Free Shell Account and Shell Access 注册方式 我一…...

前馈神经网络 (Feedforward Neural Network, FNN)

代码功能 网络定义&#xff1a; 使用 torch.nn 构建了一个简单的前馈神经网络。 隐藏层使用 ReLU 激活函数&#xff0c;输出层使用 Sigmoid 函数&#xff08;适用于二分类问题&#xff09;。 数据生成&#xff1a; 使用经典的 XOR 问题作为数据集。 数据点为二维输入&#xff…...

【Python进阶】Python中的数据库交互:使用SQLite进行本地数据存储

1、数据持久化与访问效率 数据持久化是指程序运行过程中产生的数据能够长期保存&#xff0c;即使程序关闭或系统重启后仍可读取和修改。通过数据库&#xff0c;我们可以确保数据持久化的同时&#xff0c;实现数据的快速访问。例如&#xff0c;银行系统需要实时更新账户余额&am…...

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…...

函数指针示例

目录&#xff1a; 代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h>int Max(int x, int y); int Min(int x, int y);int main(int argc, char**argv) {int x,y;scanf("%d",&x);scanf("%d",&y);int select;printf(&q…...

vue如何实现组件切换

一、使用条件渲染 (v-if) <template><div><button click"currentView ComponentA">Show Component A</button><button click"currentView ComponentB">Show Component B</button><component-a v-if"curren…...

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…...

整数唯一分解定理

整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。 一、整数唯一分解定理 整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是数论中的一个重…...

Grass脚本2倍速多账号

前言&#xff0c;小编也是第一次撸空投&#xff0c;我是抱着试一试的态度&#xff0c;梦想总是要有的万一白嫖了呢 Grass 是什么&#xff1f; Grass 扩展程序是一款创新的工具&#xff0c;它可以帮助您释放未使用的网络资源的力量。 通过分享您的剩余带宽&#xff0c;您可以赚…...

15分钟学 Go 第 56 天:架构设计基本原则

第56天&#xff1a;架构设计基本原则 学习目标 理解和掌握基本的架构设计原则&#xff0c;以提升软件系统的可维护性、可扩展性和可重用性。 内容提纲 架构设计原则概述常见架构设计原则 单一职责原则 (SRP)开放/封闭原则 (OCP)里氏替换原则 (LSP)接口分离原则 (ISP)依赖反…...

HTML5 Video(视频)

HTML5 Video(视频) HTML5视频是现代网页设计中不可或缺的一部分,它允许开发者在网页中嵌入视频内容,为用户提供丰富多样的媒体体验。本文将深入探讨HTML5视频的各个方面,包括其基本用法、支持的格式、自定义播放器、浏览器兼容性以及最佳实践。 一、HTML5视频的基本用法 …...