【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.pswp.cn/diannao/70964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70964.shtml
英文地址,請注明出處:http://en.pswp.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&…