> ## Documentation Index
> Fetch the complete documentation index at: https://felimet-hub.jmcores.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Windows CUDA & cuDNN 開發環境建置指南

> 完整收錄 Windows 平台的 NVIDIA 驅動程式更新、CUDA Toolkit 安裝與 cuDNN 配置流程，附環境變數設定、PATH 設置、版本相容性檢查與 nvcc / nvidia-smi 驗證步驟，是專為深度學習開發者打造的 Windows GPU 環境建置攻略。

export const TerminalDemo = ({lang = "zh", title, prompt, commands}) => {
  const L = ({
    zh: {
      play: "播放",
      pause: "暫停",
      step: "下一步",
      replay: "重新播放",
      reset: "重設",
      winTitle: "Windows PowerShell",
      hint: "點播放，逐行看驗證流程實際跑出來的樣子"
    },
    en: {
      play: "Play",
      pause: "Pause",
      step: "Step",
      replay: "Replay",
      reset: "Reset",
      winTitle: "Windows PowerShell",
      hint: "Press play to watch the verification run line by line"
    }
  })[lang] || ({});
  const defaultCmds = [{
    cmd: "nvidia-smi",
    output: ["Mon Jun  8 14:30:12 2026", "+-----------------------------------------------------------------------------+", "| NVIDIA-SMI 552.22       Driver Version: 552.22       CUDA Version: 12.4     |", "|-------------------------------+----------------------+----------------------+", "| GPU  Name           TCC/WDDM  | Bus-Id        Disp.A | Volatile Uncorr. ECC |", "| Fan  Temp Perf Pwr:Usage/Cap  | Memory-Usage         | GPU-Util  Compute M. |", "|===============================+======================+======================|", "|   0  GeForce RTX 3080  WDDM   | 00000000:01:00.0  On |                  N/A |", "| 30%   42C  P8    21W / 320W   |    842MiB / 10240MiB |      2%      Default |", "+-------------------------------+----------------------+----------------------+"]
  }, {
    cmd: "nvcc -V",
    output: ["nvcc: NVIDIA (R) Cuda compiler driver", "Copyright (c) 2005-2024 NVIDIA Corporation", "Built on Tue_Feb_27_16:28:36_2024", "Cuda compilation tools, release 12.4, V12.4.99", "Build cuda_12.4.r12.4/compiler.34097967_0"]
  }, {
    cmd: "python gpu_test.py",
    output: ["========================================", "PyTorch Version: 2.6.0+cu124", "CUDA Available:  True", "Device Name:     NVIDIA GeForce RTX 3080", "CUDA Version:    12.4", "✓ cuDNN Test Passed! Convolution executed successfully.", "========================================"]
  }];
  const raw = commands && commands.length ? commands : defaultCmds;
  const cmds = raw.map(c => ({
    cmd: c.cmd,
    lines: Array.isArray(c.output) ? c.output : String(c.output || "").split("\n")
  }));
  const PROMPT = prompt || "PS C:\\Users\\dev>";
  const TITLE = title || L.winTitle;
  const [idx, setIdx] = useState(0);
  const [typed, setTyped] = useState(0);
  const [outN, setOutN] = useState(0);
  const [stage, setStage] = useState("cmd");
  const [running, setRunning] = useState(false);
  const [done, setDone] = useState(false);
  useEffect(() => {
    if (!running || done) return;
    const cur = cmds[idx];
    if (!cur) {
      setRunning(false);
      setDone(true);
      return;
    }
    if (stage === "cmd") {
      if (typed < cur.cmd.length) {
        const id = setTimeout(() => setTyped(typed + 1), 28);
        return () => clearTimeout(id);
      }
      const id = setTimeout(() => setStage("out"), 200);
      return () => clearTimeout(id);
    }
    if (stage === "out") {
      if (outN < cur.lines.length) {
        const id = setTimeout(() => setOutN(outN + 1), 70);
        return () => clearTimeout(id);
      }
      const id = setTimeout(() => {
        if (idx + 1 < cmds.length) {
          setIdx(idx + 1);
          setTyped(0);
          setOutN(0);
          setStage("cmd");
        } else {
          setRunning(false);
          setDone(true);
        }
      }, 360);
      return () => clearTimeout(id);
    }
  }, [running, done, idx, typed, outN, stage]);
  const reset = () => {
    setRunning(false);
    setDone(false);
    setIdx(0);
    setTyped(0);
    setOutN(0);
    setStage("cmd");
  };
  const playPause = () => {
    if (done) {
      reset();
      setRunning(true);
      return;
    }
    setRunning(!running);
  };
  const step = () => {
    setRunning(false);
    if (done) return;
    if (idx + 1 < cmds.length) {
      setIdx(idx + 1);
      setTyped(0);
      setOutN(0);
      setStage("cmd");
    } else {
      const cur = cmds[idx];
      setTyped(cur.cmd.length);
      setOutN(cur.lines.length);
      setStage("out");
      setDone(true);
    }
  };
  const css = `
.td-root{--bg:#f4eee4;--bd:#e2d7c6;--ink:#5b5048;--accent:#bf7551;--accent-l:#cf8a68;
  --scr:#1c1815;--scr-fg:#e9e1d4;--scr-prompt:#cf8a68;--scr-dim:#8d8478;--scr-ok:#8fb573;--scr-err:#d98a72;
  border:1px solid var(--bd);border-radius:14px;overflow:hidden;background:var(--bg);
  font-family:ui-sans-serif,system-ui,"Noto Sans TC",sans-serif;margin:1.25rem 0;box-shadow:0 1px 2px rgba(60,40,25,.06);}
.dark .td-root{--bg:#26221e;--bd:#3a332c;--ink:#cabfb2;}
.td-bar{display:flex;align-items:center;gap:.6rem;padding:.55rem .8rem;background:linear-gradient(var(--bg),color-mix(in srgb,var(--bg) 90%,#000));border-bottom:1px solid var(--bd);}
.td-dots{display:flex;gap:.4rem;}
.td-dots i{width:11px;height:11px;border-radius:50%;display:block;}
.td-dots i:nth-child(1){background:#d98a72;} .td-dots i:nth-child(2){background:#dcb46a;} .td-dots i:nth-child(3){background:#8fb573;}
.td-title{font-size:.78rem;color:var(--ink);font-weight:600;letter-spacing:.01em;flex:1;text-align:center;opacity:.85;}
.td-ctrl{display:flex;align-items:center;gap:.3rem;}
.td-btn{display:inline-flex;align-items:center;gap:.32rem;border:1px solid var(--bd);background:transparent;color:var(--ink);
  border-radius:8px;padding:.3rem .55rem;font-size:.74rem;font-weight:600;cursor:pointer;transition:all .15s ease;line-height:1;}
.td-btn:hover{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent);}
.td-btn svg{width:13px;height:13px;}
.td-btn--primary{background:var(--accent);border-color:var(--accent);color:#fff;}
.dark .td-btn--primary{background:var(--accent-l);border-color:var(--accent-l);}
.td-btn--primary:hover{background:var(--accent-l);color:#fff;}
.td-count{font-size:.72rem;color:var(--ink);opacity:.6;font-variant-numeric:tabular-nums;margin-left:.2rem;}
.td-screen{background:var(--scr);color:var(--scr-fg);padding:.85rem 1rem 1.05rem;font-family:ui-monospace,"Cascadia Code","Consolas",monospace;
  font-size:.8rem;line-height:1.55;overflow-x:auto;min-height:120px;}
.td-block{margin-bottom:.5rem;}
.td-cmdline{white-space:pre;}
.td-prompt{color:var(--scr-prompt);font-weight:600;}
.td-cmd{color:#f3ecdf;}
.td-out{white-space:pre;color:var(--scr-fg);opacity:.92;}
.td-out.ok{color:var(--scr-ok);font-weight:600;}
.td-out.err{color:var(--scr-err);font-weight:600;}
.td-cursor{display:inline-block;width:8px;height:1em;background:var(--scr-prompt);margin-left:1px;vertical-align:text-bottom;
  animation:tdblink 1s steps(2,start) infinite;}
@keyframes tdblink{to{opacity:0;}}
.td-hint{padding:.5rem .9rem;font-size:.72rem;color:var(--ink);opacity:.6;border-top:1px solid var(--bd);background:var(--bg);}
@media (max-width:600px){.td-screen{font-size:.68rem;} .td-title{display:none;} .td-btn{padding:.28rem .42rem;}}
`;
  const PlayIcon = () => <svg viewBox="0 0 24 24" fill="currentColor" stroke="none"><path d="M7 5.5v13l11-6.5z" /></svg>;
  const PauseIcon = () => <svg viewBox="0 0 24 24" fill="currentColor" stroke="none"><rect x="6.5" y="5" width="4" height="14" rx="1" /><rect x="13.5" y="5" width="4" height="14" rx="1" /></svg>;
  const StepIcon = () => <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round"><path d="M5 4l10 8-10 8z" /><line x1="19" y1="5" x2="19" y2="19" /></svg>;
  const ResetIcon = () => <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round"><path d="M3 12a9 9 0 1 0 3-6.7L3 8" /><path d="M3 3v5h5" /></svg>;
  const shown = Math.min(idx + (done ? 1 : 0), cmds.length);
  return <div className="td-root">
      <style>{css}</style>
      <div className="td-bar">
        <span className="td-dots"><i /><i /><i /></span>
        <span className="td-title">{TITLE}</span>
        <span className="td-ctrl">
          <button className="td-btn td-btn--primary" onClick={playPause}>
            {running ? <PauseIcon /> : <PlayIcon />}
            {done ? L.replay : running ? L.pause : L.play}
          </button>
          <button className="td-btn" onClick={step} disabled={done}><StepIcon />{L.step}</button>
          <button className="td-btn" onClick={reset}><ResetIcon />{L.reset}</button>
          <span className="td-count">{shown}/{cmds.length}</span>
        </span>
      </div>
      <div className="td-screen">
        {Array.from({
    length: idx + 1
  }).map((_, i) => {
    const c = cmds[i];
    if (!c) return null;
    const isCur = i === idx;
    const cmdText = isCur ? c.cmd.slice(0, typed) : c.cmd;
    const lines = isCur ? c.lines.slice(0, outN) : c.lines;
    const cursor = isCur && !done && stage === "cmd";
    return <div className="td-block" key={i}>
              <div className="td-cmdline">
                <span className="td-prompt">{PROMPT}</span> <span className="td-cmd">{cmdText}</span>
                {cursor && <span className="td-cursor" />}
              </div>
              {lines.map((ln, j) => {
      const tr = ln.trim();
      const cls = tr.startsWith("✓") ? "ok" : tr.startsWith("✗") || tr.startsWith("✘") ? "err" : "";
      return <div className={"td-out " + cls} key={j}>{ln.length ? ln : " "}</div>;
    })}
            </div>;
  })}
      </div>
      <div className="td-hint">{L.hint}</div>
    </div>;
};

`NVIDIA` `CUDA`

CUDA (Compute Unified Device Architecture) 是 NVIDIA 顯卡的靈魂，它讓 GPU 不只是打遊戲的顯卡，而是能進行平行運算的超級計算機。
搭配 cuDNN (Deep Neural Network Library)，我們才能在 PyTorch 或 TensorFlow 中使用 GPU 加速模型訓練。

這篇指南在 Windows 環境下正確安裝與配置這些核心組件。了解其中配置後，也可於 Linux 環境下進行類似配置。

<Tip>
  **為什麼這很重要？**

  環境配置是 AI 開發的第一道門檻。版本不匹配（Mismatch）是開發者/研究者要花費大量時間去排除的問題。
  搞定一次正確的安裝與配置，可以省下未來無數小時排除 `RuntimeError` 的時間。
</Tip>

## 1. 顯卡驅動程式更新

在安裝 CUDA 之前，擁有一個健康的驅動程式版本是必須的。

<Steps>
  <Step title="檢查系統資訊">
    右鍵點擊桌面空白處，進入 **NVIDIA Control Panel (控制面板)**，點擊左下角的「系統資訊」。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig1.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=6c22a8a7f481b7713793143c696d1817" alt="NVIDIA 控制面板系統資訊" width="800" height="593" data-path="images/cuda-setup/fig1.png" />
  </Step>

  <Step title="確認當前版本">
    在系統資訊中，你可以看到目前的驅動程式版本與支援的最高 CUDA 版本。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig2.jpg?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=ba0cb39e86769b22f62585a9d4961fa7" alt="驅動程式版本資訊" width="800" height="363" data-path="images/cuda-setup/fig2.jpg" />
  </Step>

  <Step title="下載最新驅動">
    前往 [NVIDIA 驅動程式下載頁面](https://www.nvidia.com/zh-tw/geforce/drivers/)。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig3.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=35aadb22c9a9f3a8244f9d9a80e8047f" alt="更新驅動程式" width="784" height="785" data-path="images/cuda-setup/fig3.png" />

    <Note>
      **Studio Driver 還是 Game Ready?**

      * **Game Ready Driver**: 針對最新遊戲優化，更新頻率高。
      * **Studio Driver**: 針對創作軟體（Blender, Premiere）與穩定性優化。

      **建議**：做深度學習開發，兩者皆可。若不常玩最新 3A 大作，**Studio Driver** 通常比較穩定。
    </Note>
  </Step>

  <Step title="安裝與重啟">
    下載後執行安裝程式，安裝過程中螢幕閃爍黑屏是正常現象。安裝完成後，**請務必重新啟動電腦**以套用變更。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig4.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=48ae790b1cf032d65be4d46e48c1473c" alt="驅動程式安裝畫面" width="760" height="348" data-path="images/cuda-setup/fig4.png" />
  </Step>

  <Step title="驗證驅動程式">
    重新啟動電腦後，驗證驅動程式版本是否正確。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig5.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=05d72500340200a063c5c2101864f1eb" alt="驅動程式驗證畫面" width="800" height="284" data-path="images/cuda-setup/fig5.png" />
  </Step>
</Steps>

## 2. 安裝 CUDA Toolkit

CUDA Toolkit 包含了編譯器、開發工具與 runtime libraries。

若要查看官方版本的安裝流程，請參閱 [CUDA Installation Guide for Microsoft Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html)。

<Note>
  **概述**

  * CUDA（Compute Unified Device Architecture，統一計算設備架構）是由 NVIDIA 開發的並行計算平台與程式設計模型，利用 NVIDIA GPU 的強大計算能力，加速科學計算、影像處理與機器學習等任務。它透過將運算任務分配至 GPU 的數千個核心，實現高效能並行處理。
  * cuDNN（CUDA Deep Neural Network Library，CUDA 深度神經網路庫）是 NVIDIA 針對深度學習優化的高效能程式庫，建立在 CUDA 之上。
</Note>

<Steps>
  <Step title="確認版本需求">
    並非越新越好！請先確認你的深度學習框架（PyTorch/TensorFlow）支援的版本。

    * [PyTorch 版本對照表](https://pytorch.org/get-started/previous-versions/)
    * [CUDA Toolkit Archive](https://developer.nvidia.com/cuda-toolkit-archive)

    <Tabs>
      <Tab title="CUDA Toolkit 選擇示例">
        <p>本範例使用 CUDA 12.8.1 作為示範。</p>
        <p>請注意，需確認 Pytorch 支援的版本。</p>

        <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig18.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=a1b6f326a58793037b35ed0db1cdd4b7" alt="CUDA Toolkit 下載選項列表" width="493" height="326" data-path="images/cuda-setup/fig18.png" />
      </Tab>

      <Tab title="Pytorch 選擇示例">
        <p>配合 CUDA Toolkit 版本選擇 Pytorch 版本</p>

        <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig16-1.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=409bac256f8b653d98e3f25d5a62dad0" alt="Pytorch 下載選項列表" width="940" height="729" data-path="images/cuda-setup/fig16-1.png" />
      </Tab>
    </Tabs>
  </Step>

  <Step title="選擇安裝包類型">
    在下載頁面，你會看到兩種安裝類型：

    | 類型       | Network (exe) | Local (exe)     |
    | :------- | :------------ | :-------------- |
    | **檔案大小** | 小 (\~13.7 MB) | 大 (\~3.3 GB)    |
    | **安裝方式** | 安裝時需連網下載      | 離線安裝 (包含所有元件)   |
    | **建議**   | 網速快可選此項       | **推薦** (避免安裝中斷) |

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig6.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=3541edbac8508856dffee883e46ffcf3" alt="CUDA Toolkit 下載選項" width="1183" height="872" data-path="images/cuda-setup/fig6.png" />
  </Step>

  <Step title="執行安裝">
    執行下載的 `.exe` 檔。對於大多數使用者，選擇 **"Express (快速)"** 安裝即可。

    若你是進階使用者，需要多版本共存，可選擇 "Custom (自訂)" 並取消勾選 Driver (因為第一步已經裝了最新的)。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig7.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=4e0663e691286d509df7ade9b514d30f" alt="CUDA 安裝選項" width="594" height="444" data-path="images/cuda-setup/fig7.png" />
  </Step>

  <Step title="驗證環境變數">
    安裝程式通常會自動加入環境變數。檢查 `CUDA_PATH` 是否存在：

    1. 搜尋 **"編輯系統環境變數"**
    2. 點擊 **"環境變數"**
    3. 在系統變數中尋找 `CUDA_PATH`

           <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig9.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=27f9a877cc8054feeeea5bd53252ce4d" alt="環境變數檢查" width="417" height="188" data-path="images/cuda-setup/fig9.png" />

    若未出現請查找是否有該資料夾，並將以下路徑添加：

    | 變數名稱               | 路徑                                                       |
    | :----------------- | :------------------------------------------------------- |
    | CUDA\_PATH         | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8 |
    | CUDA\_PATH\_V12\_8 | C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8 |

    打開終端機 (PowerShell / CMD) 輸入驗證指令：

    ```powershell theme={null}
    nvcc -V
    ```

    若看到類似 `Cuda compilation tools, release 12.x, V12.x.x` 的輸出，即代表安裝成功。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig10.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=1b3e7d3a39574d9a4778bdb8b9b9b76c" alt="驗證輸出" width="508" height="100" data-path="images/cuda-setup/fig10.png" />
  </Step>
</Steps>

## 3. 配置 cuDNN

cuDNN 是加速神經網路運算的關鍵函式庫，它不是執行檔，而是一包需要手動放置的二進位檔案。

<Steps>
  <Step title="下載 cuDNN">
    前往 [cuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive) (需登入 NVIDIA 開發者帳號)。
    請下載與你的 CUDA 版本 (12.x for CUDA 12.x) 對應的 **Zip 檔案**。

    而下載的 cuDNN 版本（cuDNN v8.x.x）是 NVIDIA 對函式庫更新的版本。

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig11.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=15c642f4dfd76439311af0034e62da7d" alt="cuDNN Archive 頁面" width="800" height="359" data-path="images/cuda-setup/fig11.png" />

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig12.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=bc23b5273f5c7ec9d053973a09854d22" alt="cuDNN 下載頁面" width="800" height="226" data-path="images/cuda-setup/fig12.png" />
  </Step>

  <Step title="解壓縮與檔案搬移">
    解壓縮下載的 zip 檔，你會看到 `bin`, `include`, `lib` 等資料夾。我們需要將這些檔案複製到 CUDA 的安裝目錄中。

    預設 CUDA 路徑：`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x`

    請依序進行以下複製操作 (系統可能會要求管理員權限)：

    <Tree>
      <Tree.Folder name="解壓縮資料夾" defaultOpen>
        <Tree.Folder name="bin" defaultOpen>
          <Tree.File name="cudnn*.dll" />
        </Tree.Folder>

        <Tree.Folder name="include" defaultOpen>
          <Tree.File name="cudnn*.h" />
        </Tree.Folder>

        <Tree.Folder name="lib" defaultOpen>
          <Tree.Folder name="x64" defaultOpen>
            <Tree.File name="cudnn*.lib" />
          </Tree.Folder>
        </Tree.Folder>
      </Tree.Folder>
    </Tree>

    對應複製目標（`...` = `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x`）：

    * `bin\cudnn*.dll` ➡️ `...\bin`
    * `include\cudnn*.h` ➡️ `...\include`
    * `lib\x64\cudnn*.lib` ➡️ `...\lib\x64`

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig13.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=45d31dedd68bfd17727ab9b80ee75b63" alt="複製 cudnn dll 到 CUDA bin 目錄" width="614" height="222" data-path="images/cuda-setup/fig13.png" />

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig14.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=c7fc30df17f403ec53413f74460d503c" alt="複製 cudnn 標頭檔到 CUDA include 目錄" width="610" height="278" data-path="images/cuda-setup/fig14.png" />

    <img src="https://mintcdn.com/felimet/o4nUK2uwNPSF27VA/images/cuda-setup/fig15.png?fit=max&auto=format&n=o4nUK2uwNPSF27VA&q=85&s=86793fa0cae703a37ccac6d276399274" alt="複製 cudnn lib 到 CUDA lib x64 目錄" width="612" height="419" data-path="images/cuda-setup/fig15.png" />

    <Warning>
      **路徑要在哪？**

      請確保是**合併 (Merge)** 或複製檔案進去，**不要**直接取代或刪除原本的資料夾！
    </Warning>
  </Step>

  <Step title="檢查 cuDNN 環境變數">
    確保 `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin` 已加入系統環境變數 **Path**。

    `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\lib\x64` **不需要**加入系統環境變數 Path 中（由編譯器配置處理）。

    | 路徑                       | 用途              | 是否加入 PATH       |
    | :----------------------- | :-------------- | :-------------- |
    | `...\CUDA\v12.x\bin`     | 運行時載入 `.dll` 檔案 | **是**           |
    | `...\CUDA\v12.x\lib\x64` | 編譯時連結 `.lib` 檔案 | **否**（由編譯器配置處理） |

    * 確保運行時能找到 `.dll` 檔案（需將 `bin` 加入 PATH）。
    * 確保編譯時能找到 `.lib` 檔案（由編譯器配置處理）。
    * 若需要指定 `lib\x64` 路徑，可在編譯器設定中配置（例如 Visual Studio 的庫路徑）。

    <Tip>
      **部署備註**

      此流程適用於快速部署 CUDA 與 cuDNN，若需更進階配置（如多版本並存或 Conda 環境），可進一步調整路徑與管理方式。如需最新資訊，建議參考 [NVIDIA 官方文件](https://docs.nvidia.com/deeplearning/cudnn/installation/overview.html)。
    </Tip>
  </Step>
</Steps>

## 4. 驗證與測試

環境裝好了，真的能跑嗎？先看完整驗證流程跑起來是什麼樣子：從 `nvidia-smi` 確認驅動、`nvcc -V` 確認編譯器，到 PyTorch 實測 cuDNN，成功時每一步該出現的輸出都在這裡。

<TerminalDemo lang="zh" />

在終端機輸入 `nvidia-smi` 看出驅動對應的「最高 CUDA 版本」（例如顯示 `CUDA Version: 12.4`）。

### 建立測試環境

建議使用 [Conda](/notes/software/languages/python/conda-guide/) 隔離環境，避免與系統 Python 衝突。

```bash theme={null}
# 建立 Python 3.11 環境
conda create -n test_gpu python=3.11 -y

# 啟動環境
conda activate test_gpu

# 安裝 PyTorch (請依官網指令調整版本)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128
```

<Tip>
  **CUDA 版本相容性**

  CUDA 具備[向下相容性](https://docs.nvidia.com/deploy/cuda-compatibility/index.html)，詳見常見問題-[驅動太新會影響舊版 CUDA 嗎？](#q-驅動太新會影響舊版-cuda-嗎)。
</Tip>

### 跑個測試腳本

建立一個 `gpu_test.py` 檔案與執行：

```python title="gpu_test.py" theme={null}
import torch
import torch.nn as nn

print("="*40)
print(f"PyTorch Version: {torch.__version__}")
print(f"CUDA Available:  {torch.cuda.is_available()}")

if torch.cuda.is_available():
    device = torch.device("cuda")
    print(f"Device Name:     {torch.cuda.get_device_name(device)}")
    print(f"CUDA Version:    {torch.version.cuda}")
    
    # 簡單的卷積運算測試 cuDNN
    try:
        model = nn.Conv2d(1, 1, 3).to(device)
        data = torch.randn(1, 1, 64, 64).to(device)
        out = model(data)
        print("✓ cuDNN Test Passed! Convolution executed successfully.")
    except Exception as e:
        print(f"✗ cuDNN Error: {e}")
else:
    print("✗ CUDA not detected.")
print("="*40)
```

執行結果若出現 `✓ cuDNN Test Passed!`，恭喜你！你的 GPU 運算環境已經準備就緒。

## 常見問題 (Troubleshooting)

### Q: `nvcc -V` 找不到指令？

**A:** 請確認 `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin` 已經加入到系統環境變數的 **Path** 中。

### Q: PyTorch 報錯 `AssertionError: Torch not compiled with CUDA enabled`

**A:** 你可能安裝到了 CPU 版本的 PyTorch。請使用 `pip uninstall torch` 移除後，務必加上 `--index-url` 指定 CUDA 版本的 whl 來源重新安裝。

### Q: 驅動太新會影響舊版 CUDA 嗎

**A:** 通常不會。NVIDIA 驅動有**向下相容性 (Backward Compatibility)**。新的驅動 (如 550.xx) 可以執行舊的 CUDA Toolkit (如 11.8) 編譯的程式。但反過來（舊驅動跑新 CUDA）是不行的。詳細的相容性規則（如 Minor Version Compatibility、Forward Compatibility）請參閱 [CUDA 版本相容性](https://docs.nvidia.com/deploy/cuda-compatibility/index.html)。

***
