最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Windows上部署PyTorch模型的三種主流方法

 更新時間:2026年04月03日 09:36:39   作者:獨隅  
本文介紹了在Windows系統(tǒng)上部署PyTorch模型的三種主流方法,每種方案詳細描述了其適用場景、步驟和注意事項,幫助用戶根據(jù)需求選擇合適的部署方式,需要的朋友可以參考下

摘要:本文介紹了在Windows系統(tǒng)上部署PyTorch模型的三種主流方法。方案一通過TorchScript實現(xiàn)高性能推理,支持Python和C++調用;方案二使用FastAPI構建Web API服務,適合后端調用;方案三通過PyInstaller打包為桌面exe程序,便于交付給終端用戶。每種方案都包含詳細步驟,涵蓋模型導出、加載推理、服務部署和GUI集成等關鍵環(huán)節(jié),可根據(jù)不同應用場景(高性能推理、Web服務或桌面應用)靈活選擇。

在 Windows 上部署 PyTorch 模型主要有三種主流方式,取決于你的具體需求(是用于高性能推理、Web 服務 API,還是桌面應用程序)。

以下是三種最常用方案的詳細步驟:

方案一:使用 TorchScript (官方原生,適合 C++ 調用或高性能 Python 服務)

適用場景:需要脫離 Python 解釋器依賴(C++ 部署),或者在 Python 中追求比原生 model.forward 更快的推理速度。

步驟 1: 導出模型為 TorchScript

在你的訓練代碼或單獨的腳本中,將訓練好的模型轉換為腳本格式。

import torch
import torchvision.models as models

# 1. 加載訓練好的模型 (確保處于評估模式)
model = models.resnet18(weights='IMAGENET1K_V1') # 示例模型
model.eval()

# 2. 創(chuàng)建示例輸入 (用于追蹤或腳本化)
# 假設輸入是 batch_size=1, 3通道, 224x224的圖片
example_input = torch.rand(1, 3, 224, 224)

# 3. 跟蹤模式 (Tracing) - 適合控制流簡單的模型
traced_script_module = torch.jit.trace(model, example_input)

# 或者 腳本模式 (Scripting) - 適合有復雜控制流(if/for)的模型
# traced_script_module = torch.jit.script(model)

# 4. 保存模型
traced_script_module.save("resnet18_windows.pt")
print("模型已導出為 resnet18_windows.pt")

步驟 2: 在 Windows 上部署 (Python 端加載)

創(chuàng)建一個獨立的推理腳本 inference.py,它不依賴訓練代碼,只依賴導出的 .pt 文件。

import torch
import torchvision.transforms as transforms
from PIL import Image

# 1. 加載 TorchScript 模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = torch.jit.load("resnet18_windows.pt")
model.to(device)
model.eval()

# 2. 預處理圖片
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

# 3. 推理
img = Image.open("test_image.jpg").convert("RGB")
input_tensor = transform(img).unsqueeze(0).to(device)

with torch.no_grad():
    output = model(input_tensor)
    print("預測結果:", output.argmax(dim=1).item())

步驟 3: (可選) C++ 部署 (完全脫離 Python)

如果你需要極致的性能或集成到現(xiàn)有的 C++ Windows 軟件中:

  1. 下載 LibTorch: 去 PyTorch 官網(wǎng) 選擇 “LibTorch”,操作系統(tǒng)選 “Windows”,語言選 “C++”,計算平臺選 “CUDA” (如果有顯卡) 或 “CPU”。
  2. 配置 Visual Studio:
    • 新建 C++ 項目。
    • 在屬性頁中配置 Include DirectoriesLibrary Directories 指向解壓后的 LibTorch 文件夾 (include, lib)。
    • 鏈接 torch_cpu.libtorch_cuda.lib 等相關庫。
  3. 編寫 C++ 代碼: 使用 torch::jit::load("model.pt") 加載并推理。

方案二:構建 Web API 服務 (最常用,適合后端服務)

適用場景:需要通過 HTTP 請求調用模型(如前端網(wǎng)頁、移動端 App 調用),使用 FastAPI 或 Flask。

步驟 1: 安裝依賴

打開 Windows PowerShell 或 CMD:

pip install fastapi uvicorn[standard] pillow python-multipart
# 如果還沒裝 torch
pip install torch torchvision

步驟 2: 創(chuàng)建main.py

from fastapi import FastAPI, File, UploadFile
import torch
import torchvision.transforms as transforms
from PIL import Image
import io

app = FastAPI()

# 全局加載模型 (避免每次請求都加載)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = torch.jit.load("resnet18_windows.pt") # 使用方案一中導出的模型
model.to(device)
model.eval()

transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

@app.post("/predict/")
async def predict(file: UploadFile = File(...)):
    # 讀取圖片
    image_data = await file.read()
    image = Image.open(io.BytesIO(image_data)).convert("RGB")
    
    # 預處理
    input_tensor = transform(image).unsqueeze(0).to(device)
    
    # 推理
    with torch.no_grad():
        output = model(input_tensor)
        prediction = output.argmax(dim=1).item()
    
    return {"filename": file.filename, "class_id": prediction}

# 啟動命令: uvicorn main:app --reload --host 0.0.0.0 --port 8000

步驟 3: 運行服務

在終端運行:

uvicorn main:app --host 0.0.0.0 --port 8000

現(xiàn)在你可以訪問 http://localhost:8000/docs 查看 Swagger UI 界面并上傳測試圖片。

步驟 4: Windows 開機自啟 (作為服務)

為了讓它在后臺一直運行:

  1. 使用 NSSM (Non-Sucking Service Manager) 工具。
  2. 下載 nssm.exe。
  3. 命令行運行 nssm install PyTorchService。
  4. 在彈出的 GUI 中:
    • Path: 填寫你的 Python 路徑 (例如 C:\Users\YourName\venv\Scripts\python.exe)。
    • Arguments: 填寫 -m uvicorn main:app --host 0.0.0.0 --port 8000
    • Startup directory: 填寫你的代碼所在文件夾。
  5. 點擊 “Install service”,然后在 Windows 服務管理器中啟動該服務。

方案三:打包為桌面 exe 程序 (適合交付給最終用戶)

適用場景:需要發(fā)給沒有 Python 環(huán)境的普通用戶使用,帶圖形界面 (GUI)。

步驟 1: 安裝 PyInstaller 和 GUI 庫

pip install pyinstaller pyside6 # 或者 tkinter (內置)

步驟 2: 編寫帶 GUI 的推理腳本app.py

import sys
import torch
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QFileDialog, QVBoxLayout, QWidget
from PySide6.QtGui import QPixmap
from PIL import Image
import torchvision.transforms as transforms
import io

# 加載模型 (全局)
model = torch.jit.load("resnet18_windows.pt")
model.eval()
transform = transforms.Compose([...]) # 同上

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyTorch Windows 演示")
        
        layout = QVBoxLayout()
        self.label = QLabel("請上傳圖片")
        self.btn = QPushButton("選擇圖片并預測")
        self.btn.clicked.connect(self.predict)
        
        layout.addWidget(self.label)
        layout.addWidget(self.btn)
        
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def predict(self):
        file_path, _ = QFileDialog.getOpenFileName(self, "選擇圖片", "", "Images (*.png *.jpg)")
        if file_path:
            img = Image.open(file_path).convert("RGB")
            input_tensor = transform(img).unsqueeze(0)
            with torch.no_grad():
                out = model(input_tensor)
                res = out.argmax(dim=1).item()
            self.label.setText(f"預測類別 ID: {res}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

步驟 3: 打包成 EXE

由于 PyTorch 很大,打包需要特殊參數(shù)。

pyinstaller --noconfirm --onefile --windowed --add-data "resnet18_windows.pt;." app.py

注意:Windows 下 --add-data 使用分號 ; 分隔,Linux/Mac 使用冒號 :。

重要提示

  • 首次打包可能非常大(幾百 MB 甚至 1GB+),因為包含了整個 PyTorch 庫。
  • 如果遇到內存錯誤,嘗試添加 --exclude-module 排除不需要的庫,或者使用 UPX 壓縮(但有時會導致 PyTorch 崩潰,需測試)。
  • 生成的 .exe 文件在 dist 文件夾下,可以直接發(fā)給任何 Windows 電腦運行(無需安裝 Python)。

Windows 部署特別注意事項

  1. 路徑問題
    • Windows 路徑使用反斜杠 \,但在 Python 字符串中建議用正斜杠 / 或原始字符串 r"C:\path"。
    • 使用 os.path.joinpathlib 來處理路徑,保證兼容性。
  1. CUDA 驅動
    • 如果使用 GPU 部署,目標機器必須安裝與 PyTorch 版本匹配的 NVIDIA 顯卡驅動。
    • 不需要在目標機器安裝 CUDA Toolkit (cuDNN 等已包含在 PyTorch wheel 包或 LibTorch 中),只要顯卡驅動夠新即可。
  1. 防火墻
    • 如果是 Web API 部署,Windows Defender 防火墻可能會攔截 8000 端口。首次運行時需允許通過防火墻。
  1. 性能優(yōu)化 (Windows 特有)
    • 在推理前設置線程數(shù):torch.set_num_threads(1)。Windows 上多線程有時反而因為上下文切換導致變慢,特別是在 CPU 推理時。
    • 使用 torch.backends.cudnn.benchmark = True (僅限 NVIDIA GPU) 可以加速固定輸入的推理。

總結推薦

需求推薦方案難度性能
內部微服務/API方案二 (FastAPI + TorchScript)??????
集成到 C++ 軟件方案一 (LibTorch C++)??????????
給小白用戶的工具方案三 (PyInstaller exe)??????
快速原型驗證直接運行 Python 腳本???

對于大多數(shù) Windows 部署場景,方案二 (FastAPI + TorchScript) 是最平衡、最穩(wěn)健的選擇。

以上就是在Windows上部署PyTorch模型的三種主流方法的詳細內容,更多關于Windows部署PyTorch模型的資料請關注腳本之家其它相關文章!

相關文章

  • Python使用defaultdict解決字典默認值

    Python使用defaultdict解決字典默認值

    本文主要介紹了Python使用defaultdict解決字典默認值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Python裝飾器代碼詳解

    Python裝飾器代碼詳解

    這篇文章主要介紹了python 一篇文章搞懂裝飾器所有用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-10-10
  • Ubuntu下使用python讀取doc和docx文檔的內容方法

    Ubuntu下使用python讀取doc和docx文檔的內容方法

    今天小編就為大家分享一篇Ubuntu下使用python讀取doc和docx文檔的內容方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python中opencv支持向量機的實現(xiàn)

    python中opencv支持向量機的實現(xiàn)

    本文主要介紹了python中opencv支持向量機的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 把MySQL表結構映射為Python中的對象的教程

    把MySQL表結構映射為Python中的對象的教程

    這篇文章主要介紹了簡單地把MySQL表結構映射為Python中的對象的方法,用到了Python中的SQLAlchemy庫,需要的朋友可以參考下
    2015-04-04
  • Python?clip與range函數(shù)保姆級使用教程

    Python?clip與range函數(shù)保姆級使用教程

    本文主要和大家介紹了詳解Python中clip與range函數(shù)的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參,希望能幫助到大家
    2022-06-06
  • Python?matplotlib實戰(zhàn)之氣泡圖繪制

    Python?matplotlib實戰(zhàn)之氣泡圖繪制

    氣泡圖是一種多變量的統(tǒng)計圖表,可以看作是散點圖的變形,這篇文章主要為大家介紹了如何使用Matplotlib繪制氣泡圖,需要的小伙伴可以參考下
    2023-08-08
  • NLTK的安裝教程及安裝錯誤解決方案

    NLTK的安裝教程及安裝錯誤解決方案

    NLTK是一款用于自然語言處理的Python庫,安裝過程簡單易懂,只需要使用pip安裝即可。若安裝過程中出現(xiàn)錯誤,可以通過更新pip、安裝必要的依賴項、更換鏡像源等方式解決。
    2023-04-04
  • Python 異常處理總結

    Python 異常處理總結

    閱讀本篇文章以學習 Python 異常處理。它應該可以幫助您了解如何在程序中使用 try、except 和 finally 語句。下面跟著小編一起來學習文章內容吧
    2021-09-09
  • flask SQLAlchemy連接數(shù)據(jù)庫及操作的實現(xiàn)

    flask SQLAlchemy連接數(shù)據(jù)庫及操作的實現(xiàn)

    本文主要介紹了flask SQLAlchemy連接數(shù)據(jù)庫及操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

神池县| 革吉县| 全南县| 光山县| 昔阳县| 东至县| 河池市| 嘉黎县| 清水河县| 绥德县| 房山区| 苍溪县| 巴楚县| 怀安县| 柳林县| 塔河县| 大安市| 彰武县| 福州市| 东辽县| 青浦区| 金门县| 太和县| 朝阳市| 广宗县| 平安县| 东乌珠穆沁旗| 通许县| 永康市| 永春县| 乌海市| 阳泉市| 铁力市| 军事| 通海县| 高州市| 闽侯县| 大厂| 开阳县| 仙居县| 城固县|