快轉到主要內容

Nvidia PRIME用法,Linux雙顯卡電腦切換獨顯跑3D渲染

分類   Linux系統 Linux使用技巧
標籤   Nvidia Arch Linux Ubuntu
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

如果您的Linux電腦有Intel + NvidiaAMD + Nvidia的雙顯示卡架構,那麼你可能會需要用到Nvidia PRIME技術。

我的有一台搭載Intel + Nvidia雙顯示卡配備的筆電。

架構如下圖,這台搭載Nvidia的雙顯卡筆電會以Intel內顯(Integrated Graphics)輸出螢幕和渲染圖形程式。這會導致3D效能低下,需要手動使用「Nvidia PRIME」技術,呼叫Nvidia獨顯(Discrete GPU)出來幹活。

圖源:https://gist.github.com/Misairu-G/616f7b2756c488148b7309addc940b28

PRIME是在獨立顯示卡與內顯之間切換的技術,專為雙顯卡筆電打造。Nvidia版的PRIME功能叫做Optimus。

用Intel內顯開機,桌面環境用內顯渲染,節省電量;當遇到需要重度GPU渲染的遊戲程式時,才將渲染作業分配給Nvidia顯示卡,此種過程我們稱之為PRIME Render Offload

本文說明Ubuntu的Nvidia PRIME指令用法,適合筆電與桌電的Linux用戶參考。

1. 雙顯卡筆電的Nvidia獨顯切換方式
#

  1. 於Linux 安裝Nvidia閉源驅動,再安裝 Envy Control

  2. 執行Envy Control,將顯示卡模式設定為Hybrid,這樣會讓兩張顯示卡保持啟用狀態。如果你設定Nvidia Only那也不需要用Nvidia PRIME了。

  3. 有些系統需要安裝nvidia-prime套件才可以使用PRIME指令。

2. 如何使用prime-run指令
#

  1. 使用指令lspci -k | grep -A 2 -i "VGA"檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡

  2. 所有應用程式預設都會以Intel顯示卡渲染。當需要使用Nvidia顯示卡渲染的時候,在指令前面加上prime-run

為了檢測GPU資訊,我們使用vulkan-tools套件的vulkaninfo來檢查,這個指令適用X11與Wayland工作階段。

例如vulkaninfo --summary會顯示目前使用的顯示卡是Intel。

prime-run vulkaninfo --summary會顯示Nvidia。

實際執行遊戲試試,從終端機執行Minetest,啟用光影,看FPS高低便能知道效果。

啟動指令:minetest,用Intel顯示卡運算,FPS低落

指令:prime-run minetest,用Nvidia顯示卡運算,FPS正常。

3. 如果找不到prime-run指令
#

  1. 如果prime-run無效,試試改用PRIME環境變數啟動程式。你需要指定以下環境變數:
  • __NV_PRIME_RENDER_OFFLOAD
  • __GLX_VENDOR_LIBRARY_NAME
  • __VK_LAYER_NV_optimus
  1. 指令用法舉例:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
  1. 當您要跑CUDA之類的程式的時候,也是這樣操作。預先指定以上環境變數,程式就能利用Nvidia顯示卡渲染。
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
  1. 若你的Linux發行版顯示prime-run command not found,那麼自行把以上環境變數寫成指令稿,再將其變成可執行檔。這樣你的系統就有prime-run可以用了。
cat <<EOF > /bin/prime-run
#!/bin/bash
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __VK_LAYER_NV_optimus=NVIDIA_only
exec "$@"
EOF

sudo chmod +x /bin/prime-run

能不能讓應用程式切換Nvidia顯示卡更方便些?

GNOME桌面,對應用程式圖示按右鍵會有「以獨立顯示卡啟動」的選項,這樣就會暫時以Nvidia顯示卡啟動該程式。

KDE桌面右鍵 → 編輯應用程式,加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only",這樣以後點應用程式圖示就會一律以Nvidia顯示卡啟動。

3. 以Nvidia PRIME啟動Flatpak版程式
#

以Steam為例,使用flatpak override設定PRIME環境變數,這樣Steam以及其餘子行程都會以Nvidia獨顯啟動。

flatpak override --user --env='__NV_PRIME_RENDER_OFFLOAD=1' --env='__GLX_VENDOR_LIBRARY_NAME=nvidia' --env='__VK_LAYER_NV_optimus="NVIDIA_only"' com.valvesoftware.Steam

也可以點選個別Steam遊戲,右鍵 → 內容

在啟動選項加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" %command%,這樣只有該遊戲會用Nvidia渲染。

4. Nvidia PRIME的雙螢幕輸出
#

X11和Wayland環境下應是開箱即用,獨顯的HDMI孔接上第二個螢幕後應該會輸出畫面。

不過仍然需要使用prime-run指令才能指定用獨顯跑3D程式。

若沒看到畫面就用xrandr指令手動設定。

5. 讓桌電也用上PRIME吧
#

Nvidia PRIME可不是筆電的專利!Linux桌電只要有雙顯示卡,且以Intel當主螢幕輸出,也是可以使用Nvidia PRIME。

關於這個作法,見 Linux讓Intel GPU負責畫面輸出,Nvidia負責3D運算的方法

參考資料
#

相關文章

Ubuntu LTS如何安裝Nvidia顯示卡驅動、CUDA、NVIDIA Container Toolkit套件
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Nvidia
教你在Arch Linux安裝Nvidia、CUDA、cuDNN、TensorRT專有驅動程式
分類   Linux系統 Linux使用技巧
標籤   Arch Linux Nvidia
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Arch Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。