2026年1月1日 星期四

邊緣推論(Edge Inference) ONNX ,OpenVINO

 邊緣推論(Edge Inference) 是指將訓練好的 AI 模型部署在靠近數據源的終端設備(如手機、工廠攝像機、物聯網閘道器)上直接執行預測,而不必將數據傳回雲端伺服器。

在邊緣推論的生態系中,ONNX 負責解決「模型格式不統一」的問題,而 OpenVINO 則是針對「Intel 硬體效能最佳化」的利器。以下為詳細介紹:


1. ONNX (Open Neural Network Exchange)

ONNX 就像是 AI 界的「通用貨幣」。

  • 定義:由微軟、Meta 等巨頭發起的開放格式,旨在讓不同的深度學習框架(如 PyTorch, TensorFlow)能夠互相轉換模型。

  • 核心功能

    • 跨框架相容:你可以用 PyTorch 訓練模型,導出為 .onnx 格式後,在不同的平台上執行。

    • ONNX Runtime (ORT):這是執行 ONNX 模型的推論引擎,支援 Windows、Linux、Android、iOS 等多種系統。

  • 優點:靈活性極高,適合需要支援多種硬體(CPU、GPU、NPU)的跨平台應用。


2. OpenVINO (Open Visual Inference & Neural Network Optimization)

OpenVINO 是 Intel 專門為自家硬體量身打造的「加速器」。

  • 定義:Intel 推出的開源工具包,專注於在 Intel 硬體(CPU、整合顯卡 iGPU、NPU、FPGA)上發揮 AI 推論的最大效能。

  • 核心組件

    1. Model Optimizer (MO):將 ONNX、TensorFlow 或 PyTorch 模型轉換為 OpenVINO 特有的 IR 格式.xml.bin)。這過程中會進行層融合(Layer Fusion)等優化,減少運算量。

    2. Inference Engine (IE):一個統一的 API,讓你寫一次程式碼,就能自動適應不同的 Intel 硬體。

  • 優點:在 Intel 平台上效能極強,特別適合工業視覺、智慧城市、智慧零售等邊緣場景。


3. ONNX vs. OpenVINO:兩者關係

雖然它們看似競爭,但實際上常協作使用:

  • 協作模式:開發者通常將模型導出為 ONNX 格式,再餵給 OpenVINO 進行硬體最佳化。

  • 整合工具:目前 OpenVINO 已經內建了 ONNX Runtime 的 Execution Provider (OVEP),讓你可以直接透過 ONNX Runtime 調用 OpenVINO 的加速能力。


4. 邊緣推論的優勢

優勢說明
低延遲數據不需往返雲端,適合自駕車、工業機械臂等即時反應需求。
高隱私影像、語音等敏感數據留在本地處理,不需上傳,安全性更高。
節省頻寬只上傳處理後的結果(例如:偵測到瑕疵),而非原始的高清影片流。
離線運作在沒有網路的環境(如地下礦區、偏遠農場)仍能執行 AI 功能。

常見應用場景:

  • 智慧工廠:產線上的瑕疵檢測(使用 OpenVINO 加速 Intel CPU 運算)。

  • 智慧交通:交通路口的違規偵測、流量分析。

  • 消費電子:手機上的手勢辨識、背景虛化。


您是否正準備在特定的硬體(例如樹莓派、Intel NUC 或 NVIDIA Jetson)上部署模型? 如果您提供目標硬體,我可以為您推薦最適合的部署工具與流程。

Running OpenVINO models with ONNX Runtime

這段影片詳細介紹了如何在邊緣設備上結合 ONNX Runtime 與 OpenVINO,實現跨平台的高效能推論。

py3.11 venv build for CUDA

 在 Windows 11 上,你不能直接在同一個虛擬環境(venv)裡「降級」Python,因為虛擬環境是與建立它的那個 Python 執行檔(你目前是 3.13)綁定的。

要切換到 Python 3.11,最正確且穩定的做法是:安裝 Python 3.11 主程式,並建立一個新的虛擬環境。

以下是標準作業流程:


步驟 1:安裝 Python 3.11

  1. 前往 Python 官網下載頁面 (3.11.9)

  2. 下載 Windows installer (64-bit)

  3. 安裝時請務必勾選:

    • Add Python to PATH (將 Python 加入路徑)。

    • 如果系統已有 3.13,建議選擇 Customize installation,確保它安裝在獨立目錄。


步驟 2:確認 3.11 安裝成功

打開新的 PowerShell 或 CMD,輸入以下指令來確認系統能找到 3.11:

PowerShell
py -3.11 -V

註:Windows 通常會安裝 py 啟動器,這讓你同時管理多個版本。


步驟 3:建立新的 Python 3.11 虛擬環境

回到你的專案目錄(例如 D:\py3_env\),建立一個全新的資料夾來存放 3.11 的環境:

PowerShell
# 1. 切換目錄
cd D:\py3_env\

# 2. 指定使用 Python 3.11 建立虛擬環境 (資料夾取名為 venv311)
py -3.11 -m venv venv311

# 3. 啟動新的環境
.\venv311\Scripts\Activate.ps1

步驟 4:在新環境安裝支援 RTX 5060 的套件

由於 Python 3.11 的相容性遠高於 3.13,現在你可以嘗試安裝更穩定的 PyTorch 版本:

PowerShell
# 升級 pip
python -m pip install --upgrade pip

# 安裝支援 CUDA 12.4 的 PyTorch
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu124

步驟 5:再次測試(關鍵的一步)

執行你之前的 test_gpu.py

PowerShell
python .\test_gpu.py

💡 為什麼 3.11 會比 3.13 好?

  1. 預編譯二進位檔 (Wheels):大多數 AI 套件(如 torchaudio)現在都完整支援 3.11,但 3.13 因為太新,很多時候只有源碼,沒有編譯好的檔案,導致安裝報錯。

  2. 算力支援:雖然 RTX 50 系列 (sm_120) 真的很新,但在 3.11 環境下,即便要編譯或偽裝架構,穩定性也會高很多。


補充:如果 3.11 依然報錯 no kernel image

如果在 3.11 下執行 test_gpu.py 還是出現 sm_120 not compatible,請在該環境下執行這行指令再測試:

PowerShell
$env:TORCH_CUDA_ARCH_LIST="9.0"
python .\test_gpu.py

建立完 3.11 環境後,python -V 應該會顯示 3.11.x。請試試看這次能否成功執行運算?

2025年12月30日 星期二

ML Data 惟度 標記規劃

 thoughtful

在機器學習中,理解輸入 $X$ 與輸出 $Y$ 之間的維度關係,是構建模型最核心的一步。我們可以將其簡化為「特徵(Features)」與「預測目標(Target)」的對應。

以下是針對維度(Dimensions)與其關係的詳細說明:


1. 輸入維度 $X$ (Input Dimensions)

輸入 $X$ 通常被稱為特徵矩陣。它的維度通常表示為 $(n, d)$

  • $n$ (Samples): 代表資料的筆數(樣本數)。例如:你有 1000 位客戶的資料。

  • $d$ (Features/Dimensions): 代表每一筆資料包含的屬性數量。

    • 一維數據: 簡單的表格資料。例如:[年齡, 收入, 信用評分],此時 $d=3$

    • 高維數據: * 影像: 維度可能是 $(寬, 高, 通道數)$。一張 $28 \times 28$ 的灰階圖片,展平後 $d = 784$

      • 文字: 經過 Embedding 後,每個字可能變成 512 維的向量。


2. 輸出維度 $Y$ (Output Dimensions)

輸出 $Y$ 被稱為標籤向量或矩陣,其維度取決於你解決的問題類型:

問題類型輸出描述維度示例
迴歸 (Regression)預測一個連續數值(如房價)。$(n, 1)$
二元分類 (Binary Classification)預測 0 或 1(如是否生病)。$(n, 1)$
多元分類 (Multi-class)預測多個類別中的一個(如貓、狗、鳥)。$(n, k)$,其中 $k$ 為類別數(通常使用 One-hot 編碼)。
多標籤分類 (Multi-label)一筆資料可同時屬於多個類別。$(n, k)$,每一位可以是 0 或 1。

3. $X$$Y$ 的數學關係:映射函數

模型的核心目標是找到一個數學函數 $f$,使得:

$$Y \approx f(X, W) + b$$
  • $W$ (Weights): 權重矩陣。它的維度必須與 $X$$Y$ 匹配。

  • $b$ (Bias): 偏置項。

維度匹配原則 (Dimensionality Matching)

在線性層(Linear Layer)中,如果 $X$ 是 $(n, d_{in})$,而你希望輸出 $Y$ 是 $(n, d_{out})$,那麼權重 $W$ 的維度必須是 $(d_{in}, d_{out})$。

這就是矩陣乘法的基本規則:$(n \times d_{in}) \cdot (d_{in} \times d_{out}) = (n \times d_{out})$。


4. 常見的維度陷阱

在處理從 MySQL 匯入的資料時,最常遇到以下維度問題:

  1. Rank-1 Array 問題: 在 Python (NumPy) 中,shape(10,) 的陣列既不是列向量也不是行向量。許多 ML 模型要求輸入必須是 (10, 1)。你需要使用 X.reshape(-1, 1) 來修正。

  2. 類別資料未轉換:

    如果你的 $Y$ 是字串(如 "Positive", "Negative"),模型無法運算。必須轉換為 $0$ 或 $1$,維度維持 $(n, 1)$。

  3. 時間序列 (3D 維度):

    如果你處理的是股票或感測器數據,維度會多出一維「時間步」,變成 $(樣本, 時間步, 特徵)$,即 $(n, t, d)$。


總結來說:

$X$ 是你給模型的「線索」,其維度決定了資訊的豐富度;$Y$ 是模型的「答案」,其維度決定了問題的性質。

您目前手頭上的 MySQL 資料,總共有多少個欄位(特徵 $d$)? 以及您想要預測的是單一數值還是分類標籤?如果您提供具體的欄位名稱,我可以幫您規劃精確的 $X, Y$ 維度配置。

MySQL to Data Frame

 在進行機器學習或深度學習模型訓練時,將 MySQL 資料轉換為模型可吸收的格式(通常是 Tensor 或 NumPy Array)是一個標準的資料管線(Data Pipeline)流程。

以下是將 MySQL 資料處理並輸入模型的四個主要階段:


1. 資料提取 (Data Extraction)

首先,你需要從 MySQL 中讀取資料。最常用的工具是 Python 的 pandas 庫配合資料庫連接器。

  • 推薦工具: SQLAlchemymysql-connector-python

  • 操作方式:

    Python
    import pandas as pd
    from sqlalchemy import create_engine
    
    # 建立資料庫連線
    engine = create_engine('mysql+mysqlconnector://user:password@host:port/database')
    
    # 使用 SQL 語法讀取資料到 DataFrame
    query = "SELECT * FROM training_table"
    df = pd.read_sql(query, engine)
    

2. 資料清洗與預處理 (Data Preprocessing)

MySQL 存儲的原始資料通常無法直接進入模型,需要經過以下處理:

A. 處理缺失值 (Missing Values)

  • 刪除: 丟棄含有空值的欄位。

  • 填補: 使用平均值、中位數或眾數填補。

B. 特徵編碼 (Feature Encoding)

模型只能處理數字,因此類別型資料(如:性別、城市)需要轉換:

  • One-Hot Encoding: 用於無順序關係的類別。

  • Label Encoding: 用於有順序關係的類別。

C. 數值縮放 (Feature Scaling)

為了防止某些數值過大的特徵主導模型訓練(例如「年齡」與「年收入」的差異):

  • 標準化 (Standardization): 使資料符合 $z = \frac{x - \mu}{\sigma}$

  • 歸一化 (Normalization): 將數值縮放到 $[0, 1]$ 區間。


3. 資料轉換與切分 (Data Transformation & Splitting)

在輸入模型前,必須將 DataFrame 轉換為矩陣格式,並區分特徵與標籤。

  1. 分離特徵 (X) 與標籤 (y):

    Python
    X = df.drop('target_column', axis=1).values
    y = df['target_column'].values
    
  2. 切分訓練集與測試集:

    Python
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    

4. 輸入模型 (Model Feeding)

視你使用的框架而定,輸入方式略有不同:

  • Scikit-learn: 直接傳入 NumPy 陣列。

    model.fit(X_train, y_train)

  • TensorFlow/PyTorch: 需轉換為 Tensor 格式。

    Python
    import torch
    X_train_tensor = torch.tensor(X_train, dtype=torch.float32)
    

進階建議:大數據處理

如果你的 MySQL 資料量極大(數千萬行以上),直接一次性讀取會導致記憶體(RAM)崩潰。建議採取以下策略:

  1. 分批讀取 (Chunking): 使用 pd.read_sql(query, engine, chunksize=10000) 分批處理。

  2. ETL 工具: 先將資料從 MySQL 導出成 .parquet.csv 格式,再由模型讀取。

  3. 使用 Dataset API: 像是 TensorFlow 的 tf.data.Dataset 可以建立流式處理管線,邊讀取邊訓練。

總結流程圖

您目前的資料量大約是多少?或是您正打算使用哪種模型框架(如 XGBoost 或 TensorFlow)? 我可以針對您的具體情況提供更精準的程式碼範例。

UEFI-GPT RAID HD 開機模式

 在現代電腦中,UEFI (Unified Extensible Firmware Interface)GPT (GUID Partition Table) 是一對完美的搭檔。如果你正在安裝 Windows 11 或現代的 Linux 系統,這通常是系統預設且建議的開機與磁碟管理模式。

以下為您詳細介紹 UEFI + GPT 模式的概念、優勢以及與傳統模式的差異。


1. 核心概念介紹

什麼是 UEFI?

UEFI 是傳統 BIOS (Basic Input/Output System) 的繼任者。它是一段運行在主機板上的軟體,負責在電腦開啟時初始化硬體並引導作業系統載入。

  • 介面友好: 支援滑鼠操作、圖形化介面,甚至可以連上 Wi-Fi。

  • 啟動快速: 透過優化的初始化流程,大幅縮短從按下電源到看見登入畫面的時間。

什麼是 GPT?

GPT 是現代的磁碟分割表標準,用來取代舊式的 MBR (Master Boot Record)。它定義了硬碟上的空間如何被分割以及作業系統如何找到開機檔案。


2. UEFI + GPT 的關鍵優勢

將這兩者結合使用,可以解決許多舊式電腦的硬體限制:

項目傳統模式 (Legacy BIOS + MBR)現代模式 (UEFI + GPT)
硬碟容量上限最大僅支援 2.2 TB理論上限為 9.4 ZB (1 ZB = 10億 TB)
主分割區數量最多 4 個最多 128 個
安全性較低,易受引導病毒攻擊支援 Secure Boot (安全啟動),防止惡意軟體載入
容錯能力分割資訊只存一份,損壞後難以修復分割表有備份機制並具備 CRC 校驗,可自動修復
開機速度需逐一掃描硬體,較慢快速初始化,支援 Fast Boot

3. UEFI-GPT 模式的磁碟結構

當你以 UEFI 模式安裝 Windows 時,GPT 磁碟通常會自動產生幾個特殊的隱藏分割區:

  1. EFI 系統分割區 (ESP): 這是最重要的分割區(通常為 FAT32 格式),存放作業系統的引導檔案(如 bootmgfw.efi)。

  2. MSR (Microsoft 保留分割區): Windows 用於後續分割區管理的保留空間。

  3. 修復分割區 (Recovery): 存放系統修復工具。

  4. 主要分割區: 也就是你的 C 槽,存放作業系統與個人資料。


4. 使用建議與注意事項

什麼時候該用 UEFI + GPT?

  • 硬碟大於 2TB: 必須使用此模式,否則超過 2TB 的空間將無法使用。

  • 安裝 Windows 11: 這是基本要求(Windows 11 要求必須開啟 UEFI 與 Secure Boot)。

  • 使用 NVMe SSD: 為了獲得最佳效能,強烈建議使用 UEFI 模式。

轉換與相容性

  • 不可混用: 如果你的作業系統是在 Legacy 模式下安裝的(MBR 磁碟),直接切換到 UEFI 模式會導致無法開機。

  • 轉換工具: Windows 10/11 內建有 mbr2gpt.exe 工具,可以在不刪除資料的情況下將磁碟格式轉換,但操作前務必先備份資料


您是正準備安裝新系統,還是想要將現有的舊硬碟轉換為 GPT 模式呢? 如果需要,我可以提供具體的轉換步驟或安裝指南。