pytorch镜像如何通过dockerfile和启动脚本封装tensorboard

一:dockerfile文件内容,这里我们以pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel基础镜像为例:

# 定义基础镜像
FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel

# 设置非互动模式以避免一些安装过程中的对话框
ENV DEBIAN_FRONTEND=noninteractive

# 删除无效的 Nvidia 存储库(如果它存在的话)
#RUN rm /etc/apt/sources.list.d/cuda.list || true
#RUN rm /etc/apt/sources.list.d/nvidia-ml.list || true

# 更新包列表并安装基本工具
RUN apt-get update && apt-get install -y \
    sudo \
    git \
    wget \
    curl \
    vim \
    unzip \
    zip \
    tar \
    gzip \
    openssh-server \
    openssh-client \
    nodejs \
    npm && \
    rm -rf /var/lib/apt/lists/*

# 修改 pip 源为阿里云镜像源
RUN mkdir -p /root/.pip \
    && echo "[global]" > /root/.pip/pip.conf \
    && echo "index-url = https://mirrors.aliyun.com/pypi/simple/" >> /root/.pip/pip.conf \
    && echo "trusted-host = mirrors.aliyun.com" >> /root/.pip/pip.conf

# 安装指定的 Python 库
RUN pip install \
    ipykernel==6.29.5 \
    jupyter_client==7.4.8 \
    jupyter_core==5.7.2 \
    jupyter_server==2.14.1 \
    jupyterlab==4.2.3 \
    nbclient==0.10.0 \
    nbconvert==7.16.4 \
    nbformat==5.10.4 \
    notebook==6.5.7 \
    traitlets==5.7.1 \
    jupyter-tensorboard==0.2.0 \
    jupyterlab-tensorboard-pro==4.0.0 \
    tensorboard-data-server==0.7.2 \
    tensorboard

# 设置 PyTorch NVML 基于 CUDA 检查环境变量
ENV PYTORCH_NVML_BASED_CUDA_CHECK=1

# 暴露 SSH 和 Jupyter Lab 端口
EXPOSE 22
EXPOSE 8888

# 将启动脚本配置在容器中
COPY setup.sh /setup.sh
RUN chmod +x /setup.sh

# 使用启动脚本作为容器初始化入口
ENTRYPOINT ["/setup.sh"]

# 在容器中创建并修改 Jupyter Lab 的配置文件
RUN echo "c.ServerApp.terminado_settings = {'shell_command': ['/bin/bash']}" > /root/.jupyter/jupyter_lab_config.py

二:启动脚本setup.sh配置内容

#!/bin/bash

# 设置清华源,如果尚未设置
if ! pip config get global.index-url | grep -q "https://pypi.tuna.tsinghua.edu.cn/simple"; then
    echo "设置 pip 使用清华源..."
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
fi

# 检查 JupyterLab 是否已安装
if ! pip show jupyterlab > /dev/null 2>&1; then
    echo "安装 JupyterLab..."
    pip install jupyterlab==4.2.3
else
    echo "JupyterLab 已安装,跳过安装步骤。"
fi



# 为 SSHD 创建必要的目录
echo "创建 SSHD 必要的目录..."
mkdir -p /var/run/sshd
mkdir -p /root/.ssh

# 为 Jupyter Lab 创建工作目录
if [ ! -d /root/workspace ]; then
    echo "创建 Jupyter Lab 工作目录..."
    mkdir -p /root/workspace
    chown -R root:root /root/workspace
fi



# 如果 authorized_keys 文件不存在,则创建它
if [ ! -f /root/.ssh/authorized_keys ]; then
    echo "创建 authorized_keys 文件..."
    touch /root/.ssh/authorized_keys
    chmod 600 /root/.ssh/authorized_keys
    chown -R root:root /root/.ssh
fi

# 配置 sshd 服务,如果尚未配置
if [ ! -f /etc/ssh/sshd_config ]; then
    echo "配置 SSHD 服务..."
    cat <<EOF > /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
EOF

    # 生成 sshd 主机密钥
    echo "生成 SSHD 主机密钥..."
    ssh-keygen -A
else
    echo "SSHD 服务已经配置,跳过配置步骤。"
fi

# 检查 SSHD 服务是否正在运行,如果不是则启动
if ! pgrep -x "sshd" > /dev/null; then
    echo "启动 SSHD 服务..."
    /usr/sbin/sshd
else
    echo "SSHD 服务已经运行,跳过启动步骤。"
fi

# 检查 JupyterLab 服务是否已经启动
if ! pgrep -f "jupyter-lab" > /dev/null; then
    echo "启动 JupyterLab..."
    nohup jupyter lab --ip=0.0.0.0 --allow-root --no-browser --notebook-dir=/root/workspace >/dev/null 2>&1 &
    ## jupyerlab加载tensorboard到看板
    jupyter serverextension enable --py jupyter_tensorboard
else
    echo "JupyterLab 已在运行,跳过启动步骤。"
fi




# 添加一个阻塞进程,保持容器运行
echo "容器已启动并运行,阻止脚本退出以保持容器运行..."
tail -f /dev/null

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创新与技术管理国际研讨会(ISITM 2024)

随着全球科技日新月异的进步&#xff0c;创新与技术管理在国际舞台上的地位愈发重要。在这样的背景下&#xff0c;创新与技术管理国际研讨会&#xff08;ISITM 2024&#xff09;应运而生&#xff0c;将于2024年12月6日至8日在中国长沙隆重举行。本次会议将聚焦创新与技术管理等…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示&#xff1a; 1. 主界面 技术讲解&#xff1a; TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题&#xff1a; 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下&#xff1a;…

论文学习——基于区域多向信息融合的动态多目标优化引导预测策略

论文题目&#xff1a;Guided prediction strategy based on regional multi-directional information fusion for dynamic multi-objective optimization 基于区域多向信息融合的动态多目标优化引导预测策略&#xff08;Jinyu Feng a, Debao Chen b,c,d,∗, Feng Zou b,c, Fan…

【Git-驯化】一文学会git配置用户信息,git config用法细节

【Git-驯化】一文学会git配置用户信息&#xff0c;git config用法细节 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档…

深度解码:需求跟踪的艺术与实战应用

文章目录 引言一、需求跟踪的定义二、需求跟踪矩阵2.1 需求跟踪矩阵包含的内容2.2 跟踪矩阵层级2.3 需求属性2.4 参考表格 三、需求跟踪的收益3.1 确保商业价值最大化3.2 满足客户期望3.3 范围管理3.4 决策支持3.5 提高效率和效果3.6 文档化和沟通3.7 变更管理3.8 测量和改进 四…

ll命令在ubuntu下不能使用的解决方案

ll命令在ubuntu下不能使用的解决方案 问题&#xff1a; ll命令在ubuntu下不能使用&#xff0c; 在Ubuntu终端里执行ll,提示:command not found 解决方案&#xff1a; 打开当前用户目录下的.bashrc文件 找到下面的内容&#xff0c;将前面的“#”去掉 #alias llls -alF 然…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端&#xff0c;为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口&#xff0c;S272不仅支持多路数字量和模拟量输入&#xff0c;还具备灵活的扩展性和强大的控制功能&#xff0…

数据库表导出到excel:前置知识1 ALL_TAB_COLS

ALL_TAB_COLS 当前用户可访问的表、视图和群集的列的相关信息 其中几个字段: OWNER&#xff1a;表&#xff0c;视图及群集的Owner   TABLE_NAME&#xff1a; 表&#xff0c;视图及聚簇的名称   COLUMN_NAME&#xff1a; 字段名   DATA_TYPE &#xff1a;字段的数据类型…

君子签区块链+AI,驱动组织实现高效合同管理、精准风险控制

在传统合同签署的过程中&#xff0c;企业、组织、机构都面临着合同签署与管理的诸多问题和挑战&#xff1a;合同种类繁多、数量庞大导致起草效率低下&#xff1b;管理流程繁琐、权限分散使得审批周期冗长且效率低下&#xff1b;合同签订版本难以精准复核&#xff0c;风险防控更…

7.基于SpringBoot的SSMP整合案例-表现层开发

目录 1.基于Restfu1进行表现层接口开发 1.1创建功能类 1.2基于Restful制作表现层接口 2.接收参数 2使用Apifox测试表现层接口功能 保存接口&#xff1a; 分页接口&#xff1a; 3.表现层一致性处理 3.1先创建一个工具类&#xff0c;用作后端返回格式统一类&#xff1a;…

如何利用小程序容器技术搭建小程序生态?

小程序&#xff0c;作为现代移动互联网生态中的重要基础设施&#xff0c;正以其独特的创新性和便捷性展现出勃勃生机。截至2021年&#xff0c;全网小程序的数量已经突破了700万&#xff0c;其中微信小程序的开发者达到了300万之多。这一数字不仅代表了小程序在技术层面的成熟度…

Java项目总结3

1.抽象类与抽象方法 注意&#xff1a; 抽象类不能实例化 抽线类中不一定有抽i像方法&#xff0c;有抽象方法的类一定是抽象类 可以有构造方法 抽象类的子类要么重写抽象类中的所有抽象方法&#xff0c;要么是抽象类 抽象类的作用&#xff1a; 抽取共性时&#xff0c;无法确定方…

Linux:网络配置命令

目录 一、查看网络接口信息 ifconfig 二、修改网络配置文件 三、设置网络接口参数 ifconfig 四、查看主机名称 hostname 五、查看路由表条目route 5.1、查看路由 5.2、添加、删除静态路由条目 5.3、添加、删除默认网关记录 六、netstat命令 七、ss 命令 八、测试网络…

java web 部分

jsp作用域由大到小 过滤器有哪些作用&#xff1f; 过滤器的用法&#xff1f;&#xff08;对客户端的请求统一编码和对客户端进行认证&#xff09; JSP和Servlet中的请求转发分别如何实现&#xff1f; JSP 和 Servlet 有哪些相同点和不同点&#xff0c;他们之间的联系是什么…

恭喜!H医生一个月内荣获美国芝加哥大学访问学者邀请函

➡️【院校背景】 芝加哥大学&#xff08;英文&#xff1a;The University of Chicago&#xff0c;简称UChicago、“芝大”&#xff09;由石油大王约翰洛克菲勒于1890年创办&#xff0c;坐落于美国伊利诺伊州芝加哥市&#xff0c;一所私立研究型大学&#xff0c;属于全球大学校…

vue3 滚动条滑动到元素位置时,元素加载

水个文 效果 要实现的思路就是&#xff0c;使用IntersectionObserver 检测元素是否在视口中显示&#xff0c;然后在通过css来进行动画载入。 1.监控元素是否视口中显示 const observer new IntersectionObserver((entries) > {entries.forEach((entry) > {if (entry.i…

web平台—apache

web平台—apache 1. 学apache前需要知道的知识点2. apache详解2.1 概述2.2 工作模式2.3 启动apache网站整体流程2.4 相关文件保存位置2.5 配置文件详解 3. apache配置实验实验1&#xff1a;设置apache的目录别名实验2&#xff1a;apache的用户认证实验3&#xff1a;虚拟主机 (重…

基于Arduino平台开源小车的初步使用体验

创作原因&#xff1a;偶然有机会接触到基于Arduino平台的开源智能小车&#xff0c;初步使用后与大家分享。因使用时间不常&#xff0c;可以纯当个乐子看看&#xff0c;感谢大家的阅读&#xff01; 图&#xff1a;一款基于Arduino平台的开源小车 一、开发环境 Misly&#xff1…

明星代言方式8种助力品牌占领市场-华媒舍

1. 明星代言的重要性和市场价值 明星代言是一种常见的品牌推广方式&#xff0c;通过联系知名度高的明星来推广产品或服务&#xff0c;从而提升品牌的知名度和美誉度。明星代言能够借助明星的影响力和粉丝基础&#xff0c;将品牌信息传达给更广泛的受众&#xff0c;从而提高销量…

Linux:ollama大模型部署

目录 Ollama 是一个能在本地机器上轻松构建和运行大型语言模型的轻量级、可扩展框架&#xff0c;适用于多种场景&#xff0c;具有易于使用、资源占用少、可扩展性强等特点。 1.安装下载ollama 2.为 Ollama 创建一个用户 3.为ollama创建服务文件 4.启动ollama服务 5.拉取语…