docker部署d2l环境

news/2025/1/14 23:03:48/文章来源:https://www.cnblogs.com/womaspace/p/18671873

编写dockerfile

# 使用NVIDIA提供的CUDA基础镜像,包含CUDA 11.8.0和cuDNN 8,基于Ubuntu 22.04
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
# 设置维护者信息
MAINTAINER watcherprime <woma@126.com># 设置环境变量,包括时区、非交互式前端和PATH变量
ENV TZ=Asia/Shanghai \DEBIAN_FRONTEND=noninteractive \PATH=/opt/miniconda3/bin:$PATH# 设置工作目录为/root
WORKDIR /root# 更新Ubuntu软件包索引
RUN apt-get update# 安装SSH服务并配置
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ssh \&& mkdir /var/run/sshd && mkdir /root/.ssh \&& echo 'root:root' | chpasswd \&& sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config \&& sed -i 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config# 创建并设置自启动SSH服务的脚本
RUN echo 'service ssh start >>/root/start_ssh.log' >> ~/start_ssh.sh \&& chmod 777 ~/start_ssh.sh \&& echo '#<<< ssh <<<\nif [ -f /root/start_ssh.sh ]; then\n/root/start_ssh.sh\nfi\n#<<< ssh <<<' >> ~/.bashrc# 创建并设置自启动TensorBoard的脚本
RUN echo '#!/bin/bash\na=$(netstat -anp | grep 6006)\nif [ -z "$a" ]\nthen\nsource /opt/miniconda3/etc/profile.d/conda.sh\nconda activate d2l\nnohup python /opt/miniconda3/envs/d2l/lib/python3.10/site-packages/tensorboard/main.py --logdir /gemini/logs --bind_all > /root/start_tensorboard.log 2>&1 &\nfi' >> ./start_tensorboard.sh \&& chmod 777 ./start_tensorboard.sh \&& echo '#<<< tensorboard <<<\nif [ -f /root/start_tensorboard.sh ]; then\n/root/start_tensorboard.sh\nfi\n#<<< tensorboard <<<' >> ~/.bashrc# 安装一些常用的工具
RUN apt-get install -y vim && apt-get install -y git && apt-get install -y net-tools# 下载并安装Miniconda3
RUN wget -O /opt/Miniconda3-py310_24.3.0-0-Linux-x86_64.sh "https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-py310_24.3.0-0-Linux-x86_64.sh"  \&& chmod +x /opt/Miniconda3-py310_24.3.0-0-Linux-x86_64.sh \&& sh -c '/bin/echo -e "\nyes\n\nyes" | sh /opt/Miniconda3-py310_24.3.0-0-Linux-x86_64.sh -b -p /opt/miniconda3'
ENV PATH=/opt/miniconda3/bin:$PATH# 调整时区设置
RUN apt install -y tzdata \&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \&& echo ${TZ} > /etc/timezone \&& dpkg-reconfigure --frontend noninteractive tzdata# 更新conda源为清华大学镜像源
RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  \&& conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  \&& conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/  \&& conda config --set show_channel_urls yes \&& conda config --set auto_activate_base no# 创建conda环境d2l,并设置为默认环境
RUN conda create --name d2l python=3.10.13
SHELL ["/bin/bash", "--login", "-c"]# 在新创建的conda环境中安装基础依赖项
RUN export PATH=/opt/miniconda3/bin:$PATH \&& conda update --name base conda \&& conda init bash \&& source activate d2l \&& conda activate d2l \&& conda install -y --quiet numpy pyyaml mkl mkl-include setuptools cmake cffi typing \&& conda install -y --quiet -c mingfeima mkldnn# 升级pip并设置pip源为清华大学镜像源
RUN python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple  \&& pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 安装PyTorch和相关库
RUN pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple  \&& pip install d2l jupyter# 安装额外的依赖项,如ffmpeg等
RUN apt-get install -y ffmpeg libsm6 libxext6# 创建项目目录结构
RUN mkdir /womacode && mkdir /womacode/code && mkdir /womacode/output# 清理不必要的文件,减小镜像大小
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*# 暴露SSH、TensorBoard和Jupyter Notebook的端口
EXPOSE 22
EXPOSE 6006
EXPOSE 8888# 设置容器启动时执行的命令为bash
CMD ["bash"]

构建镜像

docker build -t torch2.1.1_cu118_py310_ubuntu22.04 -f Dockerfile .

打标签

docker tag torch2.1.1_cu118_py310_ubuntu22.04 watcherprime/deeplearn:Torch2.1.1_cu118_py310_ubuntu22.04

推送

docker push watcherprime/deeplearn:Torch2.1.1_cu118_py310_ubuntu22.04

启动

挂载宿主磁盘:/opt/project/code/python

docker run -it --gpus all -v /opt/project/code/python:/remote-home/python -p 9998:22 --name d2l_env --restart=always torch2.1.1_cu118_py310_ubuntu22.04
docker run -it --gpus all -p 9999:8080 --name d2l torch2.1.1_cu118_py310_ubuntu22.04

docker 进入 d2l 容器

docker exec -it d2l /bin/bash

测试环境是否生效

import torch
import d2l
print(torch.__version__)
print(torch.cuda.is_available())
print(d2l.__version__)

conda命令

#列出所有环境
conda env list#激活环境
conda activate d2l

下载相关包

 pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1
pip install d2l jupyter

运行resNet测试

import torchvision
from torchvision import transforms
from torch.utils import datadef get_dataloader_workers():"""使用6个进程来读取的数据"""return 6trans = transforms.ToTensor()
def load_data_fashion_mnist(batch_size, resize=None):"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans = [transforms.ToTensor()]if resize:trans.insert(0,transforms.Resize(resize)) # 如果有Resize参数传进来,就进行resize操作trans = transforms.Compose(trans)mnist_train = torchvision.datasets.FashionMNIST(root="01_data/01_DataSet_FashionMNIST",train=True,transform=trans,download=True)mnist_test = torchvision.datasets.FashionMNIST(root="01_data/01_DataSet_FashionMNIST",train=False,transform=trans,download=True)            return (data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers()),data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers()))               # Fashion-MNIST图像的分辨率 低于ImageNet图像。将它们增加到96×96
batch_size = 256
train_iter, test_iter = load_data_fashion_mnist(batch_size, resize=96) # 返回训练集、测试集的迭代器   # 训练模型
lr, num_epochs, batch_size = 0.05, 10, 256
# train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=96)  
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

image-20250106155821192

调用GPU成功运行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869302.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TCP协议】TCP Keepalive 指南

1、什么是 TCP Keepalive?TCP Keepalive 是一种 TCP 协议内置的探测机制,用于检测长时间未活动的连接是否仍然存活。当启用了 Keepalive 后,TCP 会在连接空闲一定时间后,定期向对端发送探测包,如果未收到对端的响应,则会尝试多次探测,最终关闭连接。 用途: 检测并清理死…

《CPython Internals》阅读笔记:p151-p151

《CPython Internals》学习第 9天,p151-p1510 总结,总计 1 页。 一、技术总结 无。 二、英语总结(生词:1) 1.marshal (1)marshaling Marshalling or marshaling(US spelling) is the process of transforming the memory representation of an object into a data form su…

# vm逆向

vm逆向 虚拟机逆向与实现-CSDN博客 对上面博客的总结。 引 vm逆向题,一般是小型虚拟机程序,可以理解为一种模拟器,有start,dispatcher,opcode等结构。常见使用while-switch/if这类循环+选择结构来实现简单的虚拟机模拟,如下:逆向重点:分析入口,搞清输入和opcode的位置理…

【Gossip 协议】Redis 集群中节点之间的通信方式?

# 分布式系统 # Gossip 协议 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显,节点多的时候不光同步消息的…

推荐一款超棒的 Minecraft 启动器:Voxelum/x-minecraft-launcher

X Minecraft Launcher (XMCL) 是一个便于你管理多种整合包、模组、资源包、光影包的现代化启动器。它还支持 Minecraft Forge、 Fabric、Quilt、CurseForge 和 Modrinth它具有以下令人心动的特点:多版本兼容性:支持多个 Minecraft 版本,正式版和愚人节版本。自动化资源下载与…

互联网大中小厂实习面经:滴滴、美团、货拉拉、蔚来、信通院等

本文介绍Momenta、蔚来、中国信息通信研究院、昆仑万维、滴滴、易智瑞等企业各类技术岗位的暑期实习、日常实习面试流程与具体问题~本文介绍Momenta、蔚来、中国信息通信研究院、昆仑万维、滴滴、易智瑞等企业各类技术岗位的暑期实习、日常实习面试流程与具体问题。在前一段时间…

2025年1月买的几个好用的「新物件」

前言 去年底比较忙,换工作+搬家什么的,一堆事情凑在一起,很多24年买的东西还没发开箱 只能后面慢慢补上了,现在先把1月份买的一些东西发一下 红米k80手机 本来我是不想买手机的 不过办了新的套餐,营业厅送了购机补贴,不是很多,所以在补贴范围内选择了「看起来」性价比最…

安卓平板使用can-utils检查can通信功能

安装 termux 打开安卓平板 USB 调试模式,并确保电脑安装了 adb。 下载 termux,通过adb install ./termux.exe安装 termux 到安卓平板。 设置 termux 换源 安装好 termux 后打开,进行换源操作。 termux 中输入termux-change-repo。空格切换选中状态,移动方向键切换选中项目,…

最小系统板五要素

最小系统板五要素 电源在进入芯片的时候需要旁路电容将高频杂散干扰旁路掉VBAT:备用电池 VDD:普通电源 VDDA:ADC信号的电源地VSS:普通地 VSSA:ADC的地晶振给单片机提供时钟脉冲,具体的电容值参考晶振手册??OSC: 外部高速晶振 OSC32: 外部低速晶振复位上电复位和按键复位…

nodecanvas插件的黑魔法:一行代码避免拖拽节点的意外脱离

简介 在nodecanvas造轮子的过程,遇到了鼠标拖拽太快,节点经常会脱离控制的情况。但是nodecanvas却不会有这个问题。 一番折腾发现是nodecanvas调用了GUI.DragWindow(),而我觉得这个函数没啥用给删除了的原因。。 GUI.DragWindow()在MouseDown事件触发时,会调用GrabMouseCon…

windows server2016搭建AD域服务器

windows server2016搭建AD域服务器@目录一、背景二、搭建AD域服务器步骤三、生成可供java程序使用的keystore文件四、导出某用户的keytab文件五、主机配置hosts文件六、主机确认是否能ping通本人其他相关文章链接 一、背景 亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍…

07 异常

什么是异常 异常就像是生活中遇到的意外情况。在程序运行过程中,可能会出现一些意想不到的问题,比如要打开的文件不存在、网络连接突然中断、除数为零等,这些就是异常。当异常发生时,如果不处理,程序可能会崩溃或出现错误结果,所以需要我们去处理这些异常,让程序能更稳健…