基于docker-compose和ngc cloud快速创建指定pytorch版本的jupyter-lab环境

这篇博客介绍了如何利用Dockerfile、docker-compose.yml和run.sh脚本来创建一个基于NVIDIA NGC的PyTorch 1.8 JupyterLab环境。首先从NGC找到pytorch:20.12-py3镜像,然后通过Dockerfile配置环境,包括安装SSH、JupyterLab扩展等,并设置访问权限。接着,docker-compose.yml用于构建镜像和启动容器,暴露了22、8888和6006端口,分别用于SSH、JupyterLab和TensorBoard。最后,通过run.sh启动服务,并提供了ssh和浏览器访问的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

本博客以构建指定版本的pytorch运行环境为例,给出Dockerfile、docker-compose.yml以及启动容器的运行脚本。

找到想要的容器

从中 https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/overview.html#overview中找到想要的镜像版本。本文以torch 1.8为例,要安装的镜像版本为pytorch:20.12-py3
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch/tags中找到镜像的pull tag:

docker pull nvcr.io/nvidia/pytorch:20.12-py3

文件目录

文件目录如下

  • torch_1_8
    • Dockerfile
    • run.sh
    • docker-compose.yml

Dockerfile

FROM nvcr.io/nvidia/pytorch:20.12-py3 # 此处修改为根镜像的tag
MAINTAINER yourname

RUN apt-get update
RUN apt-get install -y openssh-server curl screen
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && apt install -y nodejs

RUN python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterlab ipympl nodejs ptvsd
RUN jupyter labextension install @jupyterlab/debugger
RUN conda install xeus-python -c conda-forge

RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config

COPY run.sh /run.sh
RUN chmod 777 /run.sh

ENV NOTEBOOK_APP_TOKEN=jupyter_passwd NOTEBOOK_DIR=/data # 此处设定jupyterlab的访问密码以及容器内的数据路径
RUN echo "root:ssh_passwd" | chpasswd

# ssh
EXPOSE 22
# jupyter
EXPOSE 8888
# tensorboard
EXPOSE 6006

docker-compose.yml

version: '3'
services:
  dl:
    build: .
    entrypoint: /run.sh
    ports:
      - "12222:22"   #对应ssh端口,注意填写前先查看端口号占用情况(可只更改x)
      - "18888:8888" #对应jupyter端口,注意填写前先查看端口号占用情况(可只更改x)
      - "16006:6006" #tensorboard
    volumes:
      - ${host_data}:/data # {要挂载的主机数据目录}:{容器内的数据目录}
    cap_add:
      - SYS_ADMIN
      - DAC_READ_SEARCH
    security_opt:
      - apparmor:unconfined
    deploy:
      restart_policy:
        condition: on-failure
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['2'] # gpu编号,可以写多个
              capabilities: [gpu]

run.sh

#!/bin/bash
service ssh start # 容器打开时打开ssh sever
jupyter lab  --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=${NOTEBOOK_APP_TOKEN} --notebook-dir=${NOTEBOOK_DIR}

docker-compose构建镜像及启动容器

构建镜像同时启动容器

docker-compose up -d

关闭并删除容器

docker-compose down

构建镜像

docker-compose build

容器的访问

ssh访问

ssh访问机器的12222端口,账户为root,密码ssh_passwd

浏览器访问upyter lab

浏览器访问18888端口,密码为jupyter_passwd

### 如何在Jetson Nano或Orin设备上使用torchvision 对于希望在Jetson Nano或Orin设备上利用`torchvision`库处理计算机视觉任务的开发者而言,理解这些平台特有的安装配置方法至关重要。 #### 安装PyTorchtorchvision 由于Jetson系列基于ARM架构而非常见的x86架构,官方预编译包可能无法直接适用于此类硬件。因此,在Jetson平台上部署深度学习模型时需特别注意软件环境的选择与构建[^2]。针对此情况,推荐采用如下方式来设置开发环境: 1. 使用L4T (Linux for Tegra) SDK提供的Docker镜像作为基础环境,该SDK由NVIDIA专门为Jetson系列产品定制优化; 2. 借助conda虚拟环境管理工具创建独立的工作空间,并通过指定渠道获取适合目标系统的PyTorch版本及其依赖项; 3. 对于最新款式的Jetson Orin设备,则可以直接从NVIDIA NGC Catalog下载经过验证的企业级容器映像,其中已包含了预先配置好的PyTorch以及相关组件。 #### 配置CUDA可见性 为了使PyTorch能够识别并充分利用Jetson内置的GPU资源执行加速计算操作,必须正确设定CUDA_VISIBLE_DEVICES环境变量。这一步骤确保了程序仅访问预期中的图形处理器单元而不干扰其他进程正常运作[^1]。 ```bash export CUDA_VISIBLE_DEVICES=0 ``` #### 加载数据集并通过DataLoader迭代读取样本 借助`torchvision.datasets`模块可以轻松加载多种流行的数据集合;而`torch.utils.data.DataLoader`类则提供了灵活简便的方法用于批量传输图像至神经网络输入层之前完成必要的前处理工作,比如随机裁剪、翻转等增强手段的应用。 ```python from torchvision import datasets, transforms import torch transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) dataset = datasets.ImageFolder(root='/path/to/dataset', transform=transform) dataloader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True) for images, labels in dataloader: pass # 进行训练或其他操作 ``` #### 应用预训练模型进行推理预测 除了自定义设计卷积神经网络结构外,还可以考虑调用`torchvision.models`下众多已经过大规模公开测试集充分训练过的经典模型实例来进行迁移学习或者特征提取任务。这类做法不仅节省了大量的时间成本而且有助于提高最终解决方案的质量水平。 ```python import torchvision.models as models model = models.resnet18(pretrained=True).cuda() model.eval() with torch.no_grad(): outputs = model(images.cuda()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值