百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

基于Docker的Python开发 docker pytorch

liebian365 2024-10-22 15:40 22 浏览 0 评论

介绍

如果你没有经验,建立一个开发环境是不容易的,特别是如果你想学习的技术很多。

本教程旨在向你展示如何在PyCharm或Visual Studio代码中设置一个基于Docker的Python开发环境,并支持CUDA。

免责声明

  • 在写这篇文章的时候,我无法在Windows10 家庭版中使用Docker内部的CUDA(即使是内部版本),所以本教程是在考虑Linux的情况下实现的,尽管基本上没有什么是特定于平台的。
  • 只有在专业版上才能使用Docker作为PyCharm的远程Python解释器。
  • 我假设你已经在你的机器上安装了Docker。
  • 我假设你已经在你的机器上安装了CUDA。如果你仍在设置你的Linux机器,并且你不愿意研究太多,我通常推荐Pop操作系统(https://pop.system76.com/)。在该文中(https://support.system76.com/articles/cuda/),你可以找到如何在他们的平台上非常容易地设置CUDA和cuDNN。文章还提供了在Ubuntu上使用他们的包的说明。

项目结构

在本教程中,我使用了一个只有3个文件的玩具项目:

生成容器的Dockerfile。

requirements.txt包含项目依赖项的文件。

run.py包含一些要运行的代码的文件。显然,你的个人项目很可能更复杂,你可以使用不同的方法来管理依赖关系,你也可以使用docker-compose.yaml但为了实现我的例子这会毫无意义引入复杂性。

Dockerfile文件

对于一篇更关注Docker和Dockerfiles的文章,我推荐Docker初学者指南:https://medium.com/codingthesmartway-com-blog/docker-beginners-guide-part-1-images-containers-6f3507fffc98

下面是我们的Dockerfile和一个简短的注释

FROM nvidia/cuda:10.2-devel

# 地址: https://github.com/ContinuumIO/docker-images/blob/master/miniconda3/debian/Dockerfile

ENV PATH /opt/conda/bin:$PATH

RUN apt-get update --fix-missing && \
    apt-get install -y wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 git mercurial subversion && \
    apt-get clean

RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p /opt/conda && \
    rm ~/miniconda.sh && \
    /opt/conda/bin/conda clean -tipsy && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate base" >> ~/.bashrc && \
    find /opt/conda/ -follow -type f -name '*.a' -delete && \
    find /opt/conda/ -follow -type f -name '*.js.map' -delete && \
    /opt/conda/bin/conda clean -afy

# 项目设置

WORKDIR /code

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

CMD ["python", "./run.py"]

通俗地说,Dockerfile描述了生成Docker镜像的过程,该镜像随后用于创建Docker容器。这个Dockerfile文件建立在nvidia/cuda:10.2-devel,镜像由NVIDIA直接在DockerHub中提供:https://hub.docker.com/r/nvidia/cuda。

nvidia/cuda:10.2-devel是已经安装了CUDA10.2工具包的开发镜像

现在你只需要安装Python开发所需的东西并设置我们的项目。

在Dockerfile的中间部分有一个Miniconda3安装。我决定使用Miniconda而不是仅仅使用Python,因为它是我大多数项目的首选平台。

我们没有利用Miniconda的任何功能,所以这有点过头了。将Miniconda替换成Dockerfile中的Python,这是留给读者的一个练习(不要惊慌,只需使用与新的Ubuntu设备相同的命令)。

最后一节是关于项目设置的,我们只是安装依赖项,复制镜像工作目录中的所有文件,并选择在没有指定命令的情况下调用docker run时启动的命令。

要构建Docker镜像,只需使用你选择的shell导航到包含Dockerfile的路径并运行:

docker build -t <image_name> .

这将生成配置描述的Docker镜像,并将其命名为image_name。如果在名称中没有指定标记,则使用最新的作为默认值。要指定标记,只需在冒号后写入。

在本教程的其余部分中,我将使用pytorch-development-box这个名称。

requirements.txt

我只使用Pytorch和Torchvision作为这个项目的依赖项。我经常使用这些包,我会使用他们的CUDA可用性方法来检查是否一切正常。所以我的requirements.txt是:

torch
torchvision

run.py

我的Python文件非常简单,我只是检查CUDA是否可用。

import torch.cuda

if torch.cuda.is_available():
    print("CUDA is available :D")
else:
    print("CUDA isn't available :(")

设置PyCharm

只有在PyCharm Professional上才能使用Docker的远程Python解释器。那么,让我们看看如何设置它。

构建好Docker镜像并在PyCharm中打开项目文件夹后,导航到File > Settings > Project > Python Interpreter

你应该看到这样的画面:

现在单击右上角附近的小齿轮并添加一个新的Python解释器。

在这里,你需要选择Docker并在名为image name的下拉菜单中选择之前选择的镜像名称,如下所示:

确认此配置后,请等待索引完成,然后尝试运行run.py.

CUDA isn't available :(

在这一点上,我们没有配置让Docker使用GPU,但我们可以快速修复它。

打开自动生成的运行/调试配置,并在Docker容器设置的末尾添加--gpus all。

你应该得到这样的结果:

确认此配置并运行它。CUDA结果现在可用!

设置Visual Studio代码

我将依靠新的Visual Studio代码的远程开发扩展来设置通过Docker的开发。

第一步是安装远程开发扩展包并打开项目文件夹:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

使用VisualStudio palette中的“Add Development Container Configuration Files”命令。

选择使用自己的Dockerfile。

此时devcontainer.json文件将被创建到一个.devcontainer目录中,如下所示:

// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.128.0/containers/docker-existing-dockerfile
{
    "name": "Existing Dockerfile",

    // Sets the run context to one level up instead of the .devcontainer folder.
    "context": "..",

    // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
    "dockerFile": "../Dockerfile",

    // Set *default* container specific settings.json values on container create.
    "settings": { 
        "terminal.integrated.shell.linux": null
    },

    // Add the IDs of extensions you want installed when the container is created.
    "extensions": []

    // Use 'forwardPorts' to make a list of ports inside the container available locally.
    // "forwardPorts": [],

    // Uncomment the next line to run commands after the container is created - for example installing curl.
    // "postCreateCommand": "apt-get update && apt-get install -y curl",

    // Uncomment when using a ptrace-based debugger like C++, Go, and Rust
    // "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],

    // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker.
    // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ],

    // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
    // "remoteUser": "vscode"
}

将弹出一个提示,要求在容器中重新打开该文件夹。

在此之前,我们只需要选择一些在容器中开发时使用的扩展。

转到Extensions选项卡,浏览你需要的扩展,你可以右键单击并选择Add to devcontainer。将它们添加到配置中。

现在我们只需要添加一个runArgs键来启用GPU,我们就可以开始开发了。

减去注释,你应该得到这样的结果:

{
    "name": "Existing Dockerfile",
    "context": "..",
    "dockerFile": "../Dockerfile",
    "settings": {
        "terminal.integrated.shell.linux": null
    },
    "extensions": [
        "ms-python.python"
    ],
    // This was added!
    "runArgs": [ 
        "--gpus=all"
    ]
}

现在从命令面板,我们可以重建和重新打开容器

结论

现在你已经在IDE中配置了一个非常基本的开发环境,它基于你自己的Docker镜像,所有这些都支持GPU。

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: