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

基于Docker的Python开发

nanshan 2025-01-09 15:06 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。

相关推荐

Let’s Encrypt免费搭建HTTPS网站

HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...

使用Nginx配置TCP负载均衡(nginx tcp负载)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...

Nginx负载均衡及支持HTTPS与申请免费SSL证书

背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...

HTTPS配置实战(https配置文件)

原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...

只有IP地址没有域名实现HTTPS访问方法

一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...

超详解:HTTPS及配置Django+HTTPS开发环境

众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...

Godaddy购买SSL之后Nginx配置流程以及各种错误的解决

完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...

Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)

一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...

阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问

参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...

你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具

NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...

从零开始搭建HTTPS服务(搭建https网站)

搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...

群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问

安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...

让网站快速升级HTTPS协议提高安全性

为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...

用Https方式访问Harbor-1.9版本(https访问流程)

我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...

如何启用 HTTPS 并配置免费的 SSL 证书

在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...

取消回复欢迎 发表评论: