2026年3月22日 星期日

VM 上使用 Host OS 顯卡方式

一、 VM 與 container 差異

    在雲端運算與軟體開發中,虛擬機器 (Virtual Machine, VM)容器 (Container) 是兩種最常見的虛擬化技術。簡單來說,兩者的核心差異在於「虛擬化的層級」以及「對資源的消耗方式」。


1. 核心技術架構

(1) 虛擬機器 (VM)

    VM 是硬體層級的虛擬化。它透過 Hypervisor(如 VMware, KVM, 或 Hyper-V)在實體硬體上模擬出一套完整的硬體環境。

  • 組成: 每個 VM 都包含一份完整的客用作業系統 (Guest OS)、必要的驅動程式、二進位檔案 (Binaries) 及函式庫 (Libraries)。

  • 特性: 檔案體積大(通常 GB 起跳),啟動較慢(需經過 OS 開機流程)。

(2) 容器 (Container)

    容器是作業系統層級的虛擬化。它直接運行在宿主機的 OS 核心上,透過 Container Runtime(如 Docker, containerd)進行隔離。

  • 組成: 容器不包含 OS 核心,只封裝應用程式及其依賴環境(Libraries/Bins)。

  • 特性: 極度輕量(通常 MB 級別),啟動僅需幾秒鐘。


2. 關鍵差異對照表

特性虛擬機器 (VM)容器 (Container)
隔離性 (完全隔離,擁有獨立 OS 核心)較弱 (共享 OS 核心,透過 Process 隔離)
啟動速度分鐘級 (需引導作業系統)秒級 (直接啟動應用程序)
資源消耗高 (每個 VM 都要預留固定記憶體)低 (僅消耗應用程式運行的必要資源)
移植性較低 (受限於 Hypervisor 格式)極高 (可輕易在不同環境、雲端間移動)
作業系統可運行不同 OS (如 Linux 主機跑 Win VM)必須與宿主機 OS 核心相容

3. 該如何選擇?

  • 選擇 VM 的場景:

    • 需要極高安全性與完全隔離(例如多租戶環境)。

    • 需要運行不同作業系統的應用(例如在 Ubuntu 上跑 Windows 專屬軟體)。

    • 需要完整的硬體模擬或特定的內核修改。

  • 選擇 Container 的場景:

    • 微服務架構 (Microservices):將大型應用拆分成多個小服務。

    • CI/CD 流程:需要快速構建、測試並部署。

    • 雲端原生開發:追求高擴展性(Scalability),如使用 Kubernetes 進行管理。


💡 小提醒: 在現代的開發環境中(如 Google Colab 或一般的雲端伺服器),這兩者經常是結合使用的。例如在一個大型的 VM 實體內部署多個 Docker 容器,以兼顧安全隔離與部署效率。

4. 深度學習環境中的特殊考量:GPU 虛擬化

    在進行 AI 相關研究(如電腦視覺或影像處理)時,最核心的問題在於如何存取實體 GPU。

  • VM 的 GPU 存取 (GPU Passthrough):

    • 通常需要透過 VT-d 技術將整張顯示卡直接「掛載」給特定的 VM。

    • 優點: 效能損耗極低,且 VM 內的驅動程式與宿主機完全隔離。

    • 缺點: 設定繁瑣,且一張卡通常只能給一個 VM 使用(除非使用昂貴的 vGPU 技術)。

  • Container 的 GPU 存取 (NVIDIA Docker):

    • 透過 NVIDIA Container Toolkit,容器可以直接調用宿主機的 GPU 驅動。

    • 優點: 多個容器可以輕易共用同一張 GPU 的運算資源。

    • 缺點: 容器內的 CUDA 版本必須與宿主機的 NVIDIA Driver 版本相容,否則會發生錯誤。


5. 部署流程與生態系

    了解這兩者的工具鏈可以幫助您決定如何管理實驗環境:

項目虛擬機器 (VM)容器 (Container)
主要工具VMware, VirtualBox, Proxmox, QEMUDocker, Podman, containerd
編排管理 (Orchestration)OpenStack, vSphereKubernetes (K8s), Docker Swarm
映像檔格式.ova, .vmdk, .qcow2Docker Image (存放在 Docker Hub / GitHub Registry)
備份方式快照 (Snapshot) 整機備份修改 Dockerfile 並重新 Build

6. 現代開發的最佳實踐:截長補短

    目前主流的學術與工業界作法並非「二選一」,而是 「Container on VM」

  1. 基礎層 (IaaS): 在雲端(如 GCP, Azure)或自建伺服器(Ubuntu)上開一個 VM,確保基本的作業系統安全性與資源分配。

  2. 應用層 (PaaS): 在該 VM 內使用 Docker 跑多個容器。

    • 例如:一個容器跑 GitLab Runner 做程式碼同步。

    • 另一個容器跑 Jupyter Lab 進行模型訓練。

    • 第三個容器跑 Conda 環境 以相容舊版的 Torch7/Lua 程式碼。

專業建議: > 如果研究需要頻繁更換實驗環境(例如從 PyTorch 2.0 切換到舊版的 1.4),容器化 是最佳選擇,因為您可以透過撰寫 Dockerfile 紀錄所有依賴項,避免發生「在我電腦上可以跑,在你那邊不行」的情況。

二、環境遷移 (Docker)遠端管理 (xrdp/SSH) 以及 Colab 資源調度

1. 環境遷移:將 Conda/Ubuntu 環境容器化 (Docker)

    當在 Ubuntu 實體機或 VM 上開發好一套研究環境(例如特定的 CUDA + PyTorch 組合)後,使用 Docker 可以確保這套環境在任何地方運行結果都一致。

  • 核心邏輯: 撰寫一份 Dockerfile,像食譜一樣紀錄安裝步驟。

  • 實作流程:

    1. 選擇基底: 使用 NVIDIA 官方提供的映像檔 nvidia/cuda:11.x-base-ubuntu22.04

    2. 安裝依賴: 在 Dockerfile 中寫入 apt-get installpip install 指令。

    3. 打包映像: 執行 docker build -t my-research-env .

    4. 遷移: 將打包好的 Image 上傳至 Docker Hub 或私有雲,在另一台機器只需 docker pull 即可還原。

  • 優點: 徹底解決「環境衝突」問題,特別是當論文需要交給編輯部或協作者重現實驗時。


2. 遠端管理:xrdp 與 SSH 的分工

    在管理遠端伺服器(無論是實體機還是 VM)時,通常會根據工作性質選擇不同的連線方式。

  • SSH (Secure Shell):

    • 場景: 程式碼編寫、模型訓練監控、系統設定。

    • 特性: 純文字介面,速度最快、最穩定。搭配 tmuxscreen 可以讓訓練程式在斷線後持續執行。

  • xrdp (Remote Desktop Protocol):

    • 場景: 需要使用圖形化工具(如影像標註軟體、查看實驗結果圖表、或使用 IDE 介面)。

    • 特性: 提供類似 Windows 的遠端桌面體驗。在 Ubuntu 上需安裝 XFCE 或 GNOME 桌面環境。

  • 兩者結合: 建議平時用 SSH 進行開發與訓練,僅在需要查看視覺化結果或操作 GUI 軟體時才開啟 xrdp。


3. 資源調度:在 Google Colab 運行舊版環境 (Legacy Code)

    Google Colab 本質上是一個基於容器的環境,但它預裝的是最新的工具鏈。若要運行 7 年前(如 Torch7/LUA)的程式碼,需要特殊的調度技巧。

  • 降級與共存:

    • CUDA 降級: 在 Colab 中透過指令解除安裝預設的 CUDA,並重新下載舊版(如 10.1)的 .run 檔進行安裝。

    • LUA/Torch7 安裝: 透過 Shell 指令在 Colab 的暫存空間內編譯 Torch7。

  • 硬體適配:

    • Colab 分配的 GPU(如 T4 或 A100)通常較新,必須確認舊版軟體是否支援該硬體架構。

  • 持久化存取: 透過 google.colab.drive.mount() 將程式碼與大型資料集(如 SenseReID 或運動影片)串接,避免容器重啟後資料遺失。

 三、Dockerfile 的範本

1. 深度學習研究用 Dockerfile 範本

    可以將以下內容儲存為名為 Dockerfile 的檔案:

Dockerfile
# 步驟 1: 選擇基底映像檔 (根據您的 GPU 需求調整 CUDA 版本)
# 建議使用 devel 版本,因為它包含編譯 code 所需的工具
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

# 步驟 2: 設定環境變數,避免安裝過程出現互動視窗
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1

# 步驟 3: 安裝系統基礎工具與 OpenCV 所需的函式庫
RUN apt-get update && apt-get install -y \
    git \
    curl \
    vim \
    wget \
    pkg-config \
    libgl1-mesa-glx \
    libglib2.0-0 \
    python3-pip \
    python3-dev \
    && rm -rf /var/lib/apt/lists/*

# 步驟 4: (選用) 安裝 Miniconda 以管理複雜的 Python 依賴
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p /opt/conda && \
    rm ~/miniconda.sh
ENV PATH /opt/conda/bin:$PATH

# 步驟 5: 設定工作目錄 (對應您在容器內的實驗路徑)
WORKDIR /workspace

# 步驟 6: 複製環境設定檔並安裝依賴
# 先複製 requirements.txt 可以利用 Docker 的 Layer Cache 機制加速後續 Build 過程
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 步驟 7: 複製所有專案程式碼到容器內
COPY . .

# 步驟 8: 預設啟動指令 (例如直接開啟 Jupyter Lab 或執行訓練腳本)
CMD ["bash"]

2. 關鍵部分說明

(1)關於 CUDA 版本選擇

    在 Dockerfile 的第一行 FROM 中,版本號非常關鍵。

  • 若要執行較舊的 Torch7/LUA 專案,可能需要將基底更換為 nvidia/cuda:10.1-devel-ubuntu18.04

  • 若宿主機(Host)驅動程式版本較舊,請確保 nvidia-smi 顯示的 CUDA 版本大於或等於容器內的版本。

(2) 關於 OpenCV 與多媒體處理

    在研究電腦視覺(如 Saliency Detection 或 Re-ID)時,常會遇到 ImportError: libGL.so.1 錯誤。範本中的 libgl1-mesa-glxlibglib2.0-0 就是專門用來解決這個問題的。


3. 如何使用此範本?

A. 建立映像檔 (Build)

    在程式碼根目錄下執行:

Bash
docker build -t my_research_env:v1 .

B. 啟動容器 (Run)

    為了讓容器能抓到 GPU,啟動時必須加上 --gpus all 參數:

Bash
docker run --gpus all -it --rm \
    -v $(pwd):/workspace \
    my_research_env:v1
  • -v $(pwd):/workspace:這會將當前的主機目錄掛載到容器內,這樣在容器內產生的實驗數據或模型權重會直接存回主機磁碟。


4. 針對 xrdp 遠端桌面的補充

    如果希望在 Docker 內也使用 xrdp(雖然較不建議,通常是在 VM 層裝 xrdp),需要在 Dockerfile 中額外安裝 xrdpxfce4。但更高效的做法是:

  1. VM 層 裝 xrdp(處理圖形介面)。

  2. Docker 層 跑運算(處理模型訓練)。

  3. 在 VM 的圖形介面中開啟終端機,執行 docker run

 四、VMM 安裝的 Guest OS 如何直接用到 Nvidia 顯卡

    在虛擬機器(VM)中,Guest OS 看到的通常是 Hypervisor 模擬出來的「虛擬顯卡」(效能極差,僅能顯示畫面)。若要讓 Guest OS 直接使用實體 NVIDIA 顯卡進行運算(如 CUDA 訓練或圖像處理),主要有以下兩種方案:


1. 方案一:GPU Passthrough (核心技術)

    這是最常見的做法,將主機上的 PCIe 顯卡直接「許配」給某個特定的 VM。

  • 運作原理: 透過 VT-d (Intel) 或 AMD-Vi (AMD) 硬體虛擬化技術,繞過宿主機(Host)的作業系統,讓 Guest OS 直接控制硬體暫存器。

  • 優點: 效能幾乎與實體機相同(約 95% - 99% 效能)。

  • 缺點: * 獨佔性: 一張顯卡只能給一個 VM 使用。當該 VM 啟動時,宿主機本身會失去該顯卡的控制權(畫面會黑掉,除非你有兩張顯卡)。

    • 設定複雜: 需修改 BIOS/UEFI 設定、調整 GRUB 參數(隔離 GPU),並處理 NVIDIA 驅動程式對虛擬機的偵測(雖然後期驅動已放寬限制)。


2. 方案二:vGPU (NVIDIA GRID / vCS)

    這是企業級的解決方案。

  • 運作原理: 將一張強大的顯卡(如 A100, H100 或部分 RTX 伺服器級卡)切分成多個虛擬 GPU 實例,分配給多個 VM 同時使用。

  • 優點: 資源利用率高,多個 Guest OS 可同時共享 GPU。

  • 缺點: 需要授權費(NVIDIA 軟體授權非常昂貴),且通常僅支援特定的資料中心等級顯卡(Tesla/Quadro 系列),消費級 GeForce 卡官方支援度有限。


3. 不同 VMM (Hypervisor) 的支援狀況

Hypervisor支援度備註
Proxmox (KVM)極佳社群文件最豐富,是目前學術界最推薦的開源方案。
VMware ESXi優良企業級標準,介面直觀,但硬體相容性要求較嚴。
Hyper-V普通支援「GPU Partitioning」,但對 Linux Guest OS 的 CUDA 支援設定較繁瑣。
VirtualBox極差僅支援 3D 加速模擬,無法進行 CUDA 運算或硬體直通。

4. 情境建議

    如果是在 Ubuntu 伺服器上管理多個實驗環境:

  1. 若只有一張顯卡: 建議直接在宿主機(Host)裝好 NVIDIA Driver,然後用 Docker (NVIDIA Container Toolkit)。這樣不僅能發揮全效能,還能讓多個容器同時使用顯卡。

  2. 若有多張顯卡且需要完整作業系統隔離: 使用 Proxmox 進行 GPU Passthrough,將 GPU 01 給實驗 A (VM),GPU 02 給實驗 B (VM)。

⚠️ 特別提醒: > 以前 NVIDIA 會在驅動程式中偵測 Error 43 來阻擋 GeForce 卡在 VM 內執行,但 NVIDIA 已在 2021 年後的驅動(465.89 版本以上)移除了這個限制,現在 GeForce 30/40 系列在 VM 內做 Passthrough 已經容易許多。

六、 Windows 10 環境下使用 GTX 1060 Ti,並在 Ubuntu 24.04 VM 中使用 GPU

方案 A:首選建議 — WSL2 (Windows Subsystem for Linux)

      WSL2 是微軟開發的輕量化虛擬化技術,它直接與 Windows 共用 GPU 驅動,不需要複雜的「硬體直通 (Passthrough)」設定。

實作步驟:

  1. Windows 端: 確保 NVIDIA 驅動程式已更新至最新版(支援 CUDA on WSL)。

  2. 安裝 Ubuntu 24.04: 在 PowerShell 執行 wsl --install -d Ubuntu-24.04

  3. 驗證 GPU: 進入 Ubuntu 後,執行 nvidia-smi。會發現不需要在 Ubuntu 裡裝驅動,就能直接看到 1060 Ti。

  4. 安裝 Docker: 在 Ubuntu 內安裝 Docker Desktop 或原生 Docker Engine。

  5. 安裝 NVIDIA Container Toolkit: 這是關鍵步驟,讓 Docker 容器能調用 WSL 看到的 GPU。

    Bash
    # 在 Ubuntu 內執行
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
    # (後續步驟為設定 repo 並 apt install nvidia-container-toolkit)
    
  6. 執行測試: docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

優點: 記憶體動態分配、GPU 效能損耗極低、Windows 與 Ubuntu 檔案互通極快。 

缺點: 它不是「完整獨立」的 VM,如果需要測試 Linux 內核層級的開發,WSL2 限制較多。


方案 B:完整虛擬機 — Hyper-V (GPU Partitioning)

    如果堅持要用獨立的 VMM(如 Hyper-V),Windows 10 支援一種叫 GPU-PV (GPU Paravirtualization) 的技術。

建議 VMM:Hyper-V (Windows 10 專業版/企業版內建)

注意:家用版 (Home) 不支援 Hyper-V 管理員,需另行開啟。

實作邏輯:

  1. 建立 VM: 在 Hyper-V 中建立一個 Ubuntu 24.04 的虛擬機器。

  2. 設定 GPU 分配: Hyper-V 預設介面沒有 GPU 選項,必須透過 PowerShell 腳本 (例如著名的 Easy-GPU-PV 專案) 來將 GPU 的資源「切分」給虛擬機。

  3. 驅動程式掛載: 需要將 Windows 端的驅動檔案手動複製到 Ubuntu VM 的特定目錄(/usr/lib/wsl/lib/),讓 Linux 內核誤以為它在 WSL 環境下執行。

優點: 真正的作業系統隔離,安全性高。 

缺點: 設定極度繁瑣,且對於 Ubuntu 24.04 這種較新的內核,驅動掛載常會失敗。


為什麼不建議用 VMware 或 VirtualBox?

  • VirtualBox: 完全不支援 NVIDIA GPU 直通(CUDA 運算)。

  • VMware Workstation: 雖然支援 3D 加速,但並不支援將實體 GPU 的 CUDA 核心完整映射給 Guest OS。

七、Host OS 換成 Ubuntu 24.04 且只有一張 GTX 1060 Ti 時,要讓兩個 VM(Windows 11 與 Ubuntu 22.04)「同時」使用這張顯卡


    傳統的「硬體直通 (GPU Passthrough)」是獨佔式的。一旦顯卡分給了 VM A,Host 和 VM B 就完全看不見這張卡。

針對需求,以下是三種實作方案的深入分析與建議:


方案一:Proxmox / KVM + vGPU (推薦研究路徑)

    如果希望多個 VM 同時共享 1060 Ti 的運算能力,目前 Linux 下唯一的解法是使用 Libvirt/KVM 搭配 nvidia-vgpu-mgr (LibreVGPU/mdevctl)

  • VMM 建議: QEMU/KVM (可透過 virt-manager 介面管理)。

  • 實作原理: 由於 1060 Ti (Pascal 架構) 原生不支持企業級 vGPU 授權,社群開發了 vgpu_unlock 技術。它能欺騙驅動程式,將消費級顯卡模擬成工作站等級的 Tesla 卡,從而將一張 GPU 切分成多個「虛擬 GPU (vGPU)」。

  • 配置流程:

    1. 在 Ubuntu 24.04 安裝 KVM 與 virt-manager

    2. 套用 vgpu_unlock 補丁並安裝 NVIDIA GRID 驅動。

    3. 建立兩個 vGPU 實例(例如每個分 3GB VRAM)。

    4. 在 VM 設定中,以 MDEV (Mediated Device) 方式分別掛載給 Win11 與 Ubuntu 22.04。


方案二:雙系統/切換式 GPU Passthrough (最穩定,但不可同時使用)

    如果不需要兩個 VM 「同時」跑訓練,只需在需要時切換。

  • VMM 建議: QEMU/KVM

  • 實作原理: 準備兩份 XML 設定檔。當啟動 Win11 時,動態將 1060 Ti 從 Host 解除綁定並掛載給 VM;關閉後再還給 Host 或分給另一個 VM。

  • 優點: 效能 100% 發揮,不需複雜的解鎖補丁。

  • 缺點: 運作時 Host OS 會失去圖形介面(除非用 SSH 遠端管理 Host)。


方案三:容器化與虛擬化並行 (最佳實踐建議)

    考慮到 1060 Ti 只有 6GB VRAM,切分給兩個 VM 後,每個環境的資源會非常侷促。建議改變架構如下:

  1. Host (Ubuntu 24.04): 作為主要的運算節點,裝好 NVIDIA Driver 與 Docker

  2. Ubuntu 22.04 環境: 不要用 VM,改用 Docker Container。它能直接共用 Host 的 GPU,效能損耗為 0,且 VRAM 動態共享。

  3. Windows 11 環境: 使用 KVM + GPU Passthrough (獨佔)

    • 當需要用 Windows 軟體時,啟動 VM(此時 Docker 會暫時無法使用 GPU)。

    • 當要跑實驗(Ubuntu 22.04 / Torch7)時,關閉 Windows VM,資源全數回歸 Linux。


具體工具與設定建議

組件建議選擇說明
虛擬化引擎QEMU/KVMLinux 下效能最強,支援最深度的 GPU 控制。
管理介面Virt-Manager圖形化介面,方便掛載 PCIe 裝置。
Windows VM 驅動VirtIO Drivers必須安裝,否則 VM 內的硬碟與網路效能會極慢。
GPU 分享技術LibreVGPU針對 10 系列顯卡的開源共享方案。

實作步驟綱要 (以 KVM 為例)

  1. 開啟 IOMMU: 修改 /etc/default/grub,加入 intel_iommu=onamd_iommu=on

  2. 隔離 GPU (僅限 Passthrough): 找到 1060 Ti 的硬體 ID,告訴 Linux 啟動時不要載入圖形驅動,改載入 vfio-pci

  3. 設定 Win 11 VM:

    • 晶片組選 Q35

    • 韌體選 OVMF (UEFI)

    • 添加硬體:PCI Host Device -> 選取你的 1060 Ti。

  4. 解決 NVIDIA 偵測: 在 VM 的 XML 設定中隱藏 Hypervisor 標記(防止驅動報錯)。

八、Host OS = Ubuntu 24.04 且只有一張 GTX 1060 Ti 時,要讓兩個 VM(Windows 11 與 Ubuntu 22.04)「不同時」使用這張顯卡

    既然這兩個虛擬機器(VM)不會同時啟動,那麼複雜的 vGPU 切分就不必要了。您最理想的方案是採用 KVM/QEMU 搭配 GPU Passthrough (硬體直通)

    在 Ubuntu 24.04 (Host) 下,這就像是一個「切換開關」:當啟動 Win11 時,顯卡交給 Windows;關閉後,顯卡回到 Host 或交給 Ubuntu 22.04 (VM)。


1. 核心工具建議:QEMU/KVM + Virt-Manager

    在 Linux 環境下,這是效能最強大且最穩定的方案。

  • VMM: QEMU/KVM (核心虛擬化引擎)。

  • 管理介面: Virt-Manager (圖形化介面,操作最直覺)。

  • 核心技術: VFIO (Virtual Function I/O)。這能讓 Host 的核心暫時釋放 1060 Ti,讓 VM 取得硬體控制權。


2. 實作邏輯與步驟

    由於只有一張顯卡,這屬於 "Single GPU Passthrough"。關鍵在於編寫一組啟動/停止腳本 (Hooks),讓 VM 啟動時自動切換。

第一步:環境準備 (Host)

  1. 開啟 IOMMU: 修改 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 加入 intel_iommu=on (Intel) 或 amd_iommu=on (AMD)。

  2. 更新並重啟: sudo update-grub 後重啟。

第二步:準備 Hook 腳本 (自動化切換)

    因為只有一張卡,啟動 VM 時 Ubuntu Host 的桌面會暫時關閉。需要建立 /etc/libvirt/hooks/qemu 腳本:

  • Start Script: 停止顯示管理器 (gdm/sddm)、卸載 NVIDIA 驅動、將 1060 Ti 綁定到 vfio-pci

  • Stop Script: 解除 vfio-pci 綁定、重新加載 NVIDIA 驅動、恢復顯示管理器。

第三步:設定 Windows 11 VM

  1. 韌體: 必須選 UEFI (OVMF) 且晶片組選 Q35

  2. TPM: Windows 11 需要虛擬 TPM 模組。

  3. 添加硬體: 選擇 "PCI Host Device",選中 1060 Ti (Video 與 Audio 兩個裝置都要選)。

  4. ROM File: 有些 10 系列顯卡需要提供 VBIOS (.rom 檔),可以從 TechPowerUp 下載對應 1060 Ti 的 BIOS。

第四步:設定 Ubuntu 22.04 VM

    步驟與 Win11 幾乎相同,但在 VM 內:

  1. 驅動: 進入系統後直接執行 sudo ubuntu-drivers autoinstall 安裝 NVIDIA 官方驅動。

  2. 驗證: 執行 nvidia-smi 即可看到 1060 Ti。


3. 為什麼這是最佳方案?

特性GPU Passthrough (獨佔式切換)
效能原生等級 (98%+),1060 Ti 的 CUDA 核心完全釋放。
相容性Win11 可以跑 Direct X 遊戲或 AI 工具;Ubuntu 22.04 可以跑 Torch7/CUDA。
穩定性不需修改驅動補丁 (vgpu_unlock),降低系統崩潰風險。
便利性透過 virt-manager 點選即可,且 VM 關閉後 Host 桌面會自動恢復。

4. 潛在挑戰與解決建議

  • 黑畫面問題: 由於啟動 VM 時 Host 桌面會關閉,建議先準備好另一台筆電或手機透過 SSH 連線到 Host。這樣萬一腳本寫錯導致畫面沒恢復,您還可以透過遠端指令救回來。

  • 1060 Ti 的 VBIOS: 如果啟動 VM 後螢幕沒反應,通常需要在 Virt-Manager 的 XML 模式下,手動指定 <rom file='/path/to/your/gpu.rom'/>

專業建議: > 雖然說這兩個 VM 不會同時啟動,但如果 Ubuntu 22.04 只是為了跑特定的深度學習程式碼,其實將 Ubuntu 22.04 做成 Docker 容器會比做成 VM 方便得多。因為容器啟動不需要關閉 Host 桌面,且能與 Win11 VM 輪流使用 GPU。


以上文件由 Gemini 產生