【2025深度学习环境搭建-2】pytorch+Docker+VS Code+DevContainer搭建本地深度学习环境

上一篇文章:【2025深度学习环境搭建-1】在Win11上用WSL2和Docker解锁GPU加速

  • 先启动Docker!
  • 对文件内容有疑问,就去问AI

一、用Docker拉取pytorch镜像,启动容器,测试GPU

docker pull pytorch/pytorch:2.5.0-cuda12.4-cudnn9-devel

在这里插入图片描述
docker run -it --rm --gpus all pytorch/pytorch:2.5.0-cuda12.4-cudnn9-devel nvidia-smi

别忘了用--gpus all启用GPU

在这里插入图片描述
能出现显卡信息,说明基于该镜像的容器,是可以用gpu的。之后要把这个镜像应用到到我们的开发环境之中(使用VS Code插件Dev Container)

二、安装VS Code插件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、创建项目文件(测试pytorch和GPU的python程序)

创建文件夹pytorch-test,并在其目录下创建如下文件夹和文件(主要创建app.py和.devcontainer就行,其他的随意):
在这里插入图片描述

需要创建的文件,内容如下:

requirements.txt

这个文件内容为空

app.py

import torch
a=[1,23,4,5,.4]
def print_gpu_info():# 检查CUDA是否可用cuda_available = torch.cuda.is_available()print(f"CUDA 是否可用: {cuda_available}")if not cuda_available:return# 获取GPU数量device_count = torch.cuda.device_count()print(f"\n可用的GPU数量: {device_count}")# 打印每个GPU的详细信息for i in range(device_count):print(f"\n=== GPU {i} ===")print(f"名称: {torch.cuda.get_device_name(i)}")prop = torch.cuda.get_device_properties(i)print(f"总内存: {prop.total_memory / 1024**3:.2f} GB")print(f"多处理器数量: {prop.multi_processor_count}")print(f"计算能力: {prop.major}.{prop.minor}")def test_gpu_operation():# 尝试在GPU上执行操作if torch.cuda.is_available():try:# 创建测试张量x = torch.randn(3, 3).cuda()y = torch.randn(3, 3).cuda()z = x + y  # 执行GPU计算# 验证设备类型print("\n=== GPU 操作测试 ===")print(f"张量所在设备: {x.device}")print("GPU 计算成功!")return Trueexcept Exception as e:print(f"\nGPU 操作失败: {str(e)}")return Falseelse:print("没有可用的GPU进行测试")return Falseif __name__ == "__main__":print("===== PyTorch GPU 信息 =====")print_gpu_info()print("\n===== GPU 功能测试 =====")test_result = test_gpu_operation()print("\n===== 最终状态 =====")print(f"GPU 是否可用: {torch.cuda.is_available()}")print(f"GPU 是否可用: {test_result}")print(f"PyTorch 版本: {torch.__version__}")

.devcontainer/devcontainer.json

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile
{"name": "GPU Development,torch2.5+cu124+cudnn9,Py3.11.10","runArgs": ["--gpus=all"  // 添加 GPU 支持],"build": {// 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"},"customizations": {"vscode": {"extensions": ["ms-python.python","ms-toolsai.jupyter","ms-python.autopep8","ms-python.vscode-pylance","mechatroner.rainbow-csv","ms-azuretools.vscode-docker","ms-toolsai.datawrangler"]}}// Features to add to the dev container. More info: https://containers.dev/features.// "features": {},// 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.// "postCreateCommand": "cat /etc/os-release",// Configure tool-specific properties.// "customizations": {},// Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root.// "remoteUser": "devcontainer"
}

.devcontainer/Dockerfile

# 使用 PyTorch 官方镜像作为基础镜像
FROM pytorch/pytorch:2.5.0-cuda12.4-cudnn9-devel# 设置工作目录(容器中的)
WORKDIR /workspace# 将本地代码复制到容器中
COPY . /workspace# 安装额外的依赖(如果有)
RUN pip install --no-cache-dir -r requirements.txt# 暴露端口(如果有需要)
# EXPOSE 8000# 定义容器启动时运行的命令
# CMD ["python", "app.py"]

README.md

## pip环境导入导出
从requirements.txt导入环境:
`pip install --no-cache-dir -r requirements.txt`
导出环境到文件requirements.txt:
`pip freeze | grep -v '@ file://' > requirements.txt`

四、打开项目文件,并使用容器环境

在VS Code中打开项目文件
在这里插入图片描述
按下【F1】在上方选择【Dev Containers:Reopen in Container】
在这里插入图片描述
此时查看vscode左下角,蓝底白字,显示Dev Container: GPU Development,torch2.5+..,就说明我们现在的项目torch-test已经在使用刚才拉取的pytorch容器了!
在这里插入图片描述
在左边找到app.py,运行他,若显示可用gpu大于0,表示项目torch-test中的python程序可以使用gpu。之后我们需要运行深度学习程序时,使用这里的步骤即可,不需要安装额外的python环境了,若需要安装其他包,那就修改requirements.txt文件即可。

在这里插入图片描述

五、需要安装其他python包怎么办?

若我们需要其他python包,那就在终端直接安装,测试能用之后,用pip freeze | grep -v '@ file://' > requirements.txt将当前python环境中的包导出到文件requirements.txt中。
之后再启动项目时,Dev Container会自动帮我们根据文件requirements.txt安装环境。

清空文件requirements.txt中的内容,之后重新构建容器,即可得到一个原始镜像中的python环境

补充:如何重新构建容器

按【F1】,搜索【Dev Containers:Rebuild Container】

在这里插入图片描述

补充:在镜像中添加VS Code插件

可以在镜像中添加VS Code插件,之后每次构建,镜像都会自动安装插件,不用自己手动安装了

方法:右键单击插件,点击【Add to devcontainer.json】

在这里插入图片描述

参考

教程:使用 Visual Studio Code 创建 Docker 应用

借助 Visual Studio Code 将 Docker 容器用作开发环境

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

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

相关文章

Linux驱动开发实战(一):LED控制驱动详解

Linux驱动开发野火实战(一):LED控制驱动详解 文章目录 Linux驱动开发野火实战(一):LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…

Linux上用C++和GCC开发程序实现不同MySQL实例下单个Schema之间的稳定高效的数据迁移

设计一个在Linux上运行的GCC C程序,同时连接两个不同的MySQL实例,两个实例中分别有两个Schema的表结构完全相同,复制一个实例中一个Schema里的所有表的数据到另一个实例中一个Schema里,使用以下快速高效的方法,加入异常…

Redis除了做缓存还能做什么?

Redis 除了作为高性能缓存外,还因其丰富的数据结构和功能,广泛应用于多种场景。以下是 Redis 的十大核心用途及具体示例: 1. 分布式会话存储 用途:存储用户会话信息(如登录状态),实现多服务间共…

JBoltAI_SpringBoot如何区分DeepSeek R1深度思考和具体回答的内容(基于Ollama)?

当我们用Ollama运行DeepSeek R1模型,向它提问时,会发现它的回答里是有think标签的 如果我们直接将Ollama的回复用于生产环境,肯定是不行的,对于不同的场景,前面输出的一堆内容,可能并不需要在客户端展示&a…

MySQL 使用 `WHERE` 子句时 `COUNT(*)`、`COUNT(1)` 和 `COUNT(column)` 的区别解析

文章目录 1. COUNT() 函数的基本作用2. COUNT(*)、COUNT(1) 和 COUNT(column) 的详细对比2.1 COUNT(*) —— 统计所有符合条件的行2.2 COUNT(1) —— 统计所有符合条件的行2.3 COUNT(column) —— 统计某一列非 NULL 的记录数 3. 性能对比3.1 EXPLAIN 分析 4. 哪种方式更好&…

将DeepSeek接入vscode的N种方法

接入deepseek方法一:cline 步骤1:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 步骤2:搜索 cline,找到插件后点击安装。 步骤3:在大模型下拉菜单中找到deep seek,然后下面的输入框输入你在deepseek申请的api key,就可以用了 让deepseek给我写了一首关于天气的…

AndroidManifest.xml文件的作用

AndroidManifest.xml文件在Android应用程序中扮演着至关重要的角色。它是应用程序的全局配置文件,提供了关于应用程序的所有必要信息,这些信息对于Android系统来说是至关重要的,因为它决定了应用程序的运行方式和权限要求,确保了应…

Mac本地部署Deep Seek R1

Mac本地部署Deep Seek R1 1.安装本地部署大型语言模型的工具 ollama 官网:https://ollama.com/ 2.下载Deepseek R1模型 网址:https://ollama.com/library/deepseek-r1 根据电脑配置,选择模型。 我的电脑:Mac M3 24G内存。 这…

React进阶之前端业务Hooks库(五)

前端业务Hooks库 Hooks原理useStateuseEffect上述问题useState,useEffect 复用的能力练习:怎样实现一套React过程中的hooks状态 & 副作用Hooks原理 不能在循环中、条件判断、子函数中调用,只能在函数最外层去调用useEffect 中,deps 为空,执行一次useState 使用: imp…

从像素到光线:现代Shader开发的范式演进与性能优化实践

引言 在实时图形渲染领域,Shader作为GPU程序的核心载体,其开发范式已从早期的固定功能管线演进为高度可编程的计算单元。本文通过解析关键技术案例,结合现代图形API(如Vulkan、Metal)的特性,深入探讨Shade…

(七)消息队列-Kafka 序列化avro(传递)

(七)消息队列-Kafka 序列化avro(传递) 客从远方来,遗我双鲤鱼。呼儿烹鲤鱼,中有尺素书。 ——佚名《饮马长城窟行》 本文已同步CSDN、掘金平台、知乎等多个平台,图片依然保持最初发布的水印&…

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建 前言 现在流行降本增笑,也就是不但每个人都要有事干不能闲着,更重要的是每个人都要通过报功的方式做到平日的各项工作异常饱和,实现1.5人的支出干2人的活计。单纯的数据库开发【肤浅…

部署Flink1.20.1

1、设置环境变量 export JAVA_HOME/cluster/jdk export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarp #export HIVE_HOME/cluster/hive export MYSQL_HOME/cluster/mysql export HADOOP_HOME/cluster/hadoop3 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop …

【超详细】神经网络的可视化解释

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

深入了解 Python 中的 MRO(方法解析顺序)

文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…

数字化赋能:制造业如何突破低效生产的瓶颈?

随着全球经济的快速发展与市场需求的变化,制造业面临着前所未有的压力与挑战。生产效率、资源管理、品质控制、成本控制等方面的问题日益突出,尤其是低效生产成为了许多制造企业亟待解决的瓶颈。在这种背景下,数字化转型成为提升制造业效率的…

Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录

因业务需要表单组件中嵌套着表格列表,内容比较多; 所以需要表单校验不通过时,自动定位到不通过的节点; 但发现这个像是没有起到效果一样,后面就是排查的思路了: 容器高度问题:如果表单容器的高度…

基于Javase的停车场收费管理系统

基于Javase的停车场收费管理系统 停车场管理系统开发文档 项目概述 1.1 项目背景 随着现代化城市的不断发展,车辆数量不断增加,停车难问题也日益突出。为了更好地管理停车场资 源,提升停车效率,需要一个基于Java SE的停车场管理…

网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析

1. 基本定义 HTTP(HyperText Transfer Protocol) 应用层协议,用于客户端与服务器之间的数据传输(默认端口 80)。 HTTP/1.0:早期版本,每个请求需单独建立 TCP 连接,效率低。HTTP/1.1&…