【体験談】Dell OptiPlex 3090 で NVIDIA Tesla P100 を動かすまでの記録【Above 4G Decoding 有効化】

IT

Dell OptiPlex 3090 SFF に NVIDIA Tesla P100(eGPU経由)を接続したところ、Device Manager で Code 12 エラーが発生。原因はBIOSに「Above 4G Decoding」の設定項目が存在しないことでした。数々の手法を試した末、Smokeless_UMAF(UMAF_BETA)で解決できたので記録として残します。

環境

ホストPCDell OptiPlex 3090 SFF
GPUNVIDIA Tesla P100 PCIe 12GB(HBM2)
eGPUドックAoostar AG01(OCuLink接続)
OSWindows 11 64bit
目的ローカルLLM推論環境の強化(Ollama + Open WebUI)
vBIOS86.00.41.00.07(最新)

問題:Code 12 エラー

P100をeGPUドック経由で接続したところ、Device Managerで以下のエラーが発生しました。

「このデバイスは使用できる十分な空きリソースを見つけられません(Code 12)」

原因

OptiPlex 3090のBIOSに Above 4G Decoding の設定項目が存在せず、PCIeのメモリマップが4GB以下の空間に制限されているため、12GB VRAMを持つP100のBARアドレスを割り当てられないことが原因です。

確認方法として、管理者PowerShellで以下を実行すると、解決前は全て 0x0 スタートのアドレスしか返ってきませんでした。

Get-WmiObject Win32_DeviceMemoryAddress | Where-Object {$_.StartingAddress -gt 4294967296}

試みて失敗したアプローチ

1. bcdedit フラグ

bcdedit /set pciexpress forcedisable

効果なし。

2. DSDT override(レジストリ経由)

OemTablePath レジストリキーを使いカスタムDSDTをロードする方法。AML修正で64bitメモリ範囲を追加したが効果なし。

3. grub-mod-setup_var(UEFI Shell経由)

IFR抽出でAbove 4G DecodingのVarOffsetを特定し、UEFI ShellからNVRAMに直接書き込み。値は書けたがDXEドライバーに無視された

Dell独自BIOSのDXEドライバーは起動時にNVRAMの値をチェックして上書きする実装になっているため、NVRAMに書いても起動時にリセットされてしまいます。

4. ReBarUEFI .ffs モジュール注入

効果なし。

5. RWEverything

BIOSレジスタへの直接アクセスを試みたが変更が反映されず。

解決策:Smokeless_UMAF(UMAF_BETA)

Smokeless_UMAF とは

GitHub で公開されている汎用UEFI設定書き換えツールです。AMD系で有名ですが、Intel系でも動作する場合があります。作者DavidS95によると「AMD成功率95%以上、Intel系は25%未満」とのことですが、動く機種は動きます。

よく「AMD専用ツール」と誤解されていますが、正確にはAMD・Intel両方のUEFI(BIOS)を扱える汎用ツールです。Dell・HP・Lenovoなどの OEM BIOS を対象にした実験コミュニティでも使われています。

手順

1. ダウンロード

以下のGitHubリリースページから UMAF_BETA.zip を入手します。

👉 https://github.com/DavidS95/Smokeless_UMAF/releases

2. USBメモリの準備

  • USBメモリを FAT32 でフォーマット
  • zipを解凍してUSBのルートに配置(EFIフォルダがルートに来る形)

3. Secure Boot を無効化

  • 起動時 F2 でBIOS画面を開く
  • Secure Boot をオフに設定して保存

4. USBから起動

  • 起動時 F12 でBootメニューを開く
  • UEFI: [USBデバイス名] を選択

5. Device Manager で設定変更

  • UMAF起動後、Device Manager を開く
  • Above 4G Decoding を探して Enabled に変更
  • 保存して再起動

⚠️ Device Manager に項目が何も表示されない場合は、そのBIOSでは非対応です。万が一起動しなくなった場合はCMOSリセット(マザーボードのCR2032電池を抜いて5〜10分放置)で復帰できます。

結果確認

Device Manager

Code 12 が解消し、P100が正常に認識されました。

PowerShell でMMIOアドレス確認

Get-WmiObject Win32_DeviceMemoryAddress | Where-Object {$_.StartingAddress -gt 4294967296}

解決後は以下のように4GBを大きく超えるアドレスが確認できました。

MemoryType Name                                  Status
---------- ----                                  ------
Bar        0x0000007FFFEFC000-0x0000007FFFEFFFFF OK
Bar        0x0000007FFFF00000-0x0000007FFFFFFFFF OK
Bar        0x0000007C00000000-0x0000007C01FFFFFF OK

P100のBARが64bitアドレス空間(約500GB付近)に割り当てられていることが確認できます。解決前は全て 0x0 スタートでした。

無事ollamaがP100で動きました。

まとめ

項目内容
根本原因OptiPlex 3090 BIOSにAbove 4G Decoding項目なし
失敗した手法bcdedit / DSDT override / setup_var / ReBarUEFI / RWEverything
解決手法Smokeless_UMAF(UMAF_BETA)でBIOS設定を直接変更
確認方法PowerShellでMMIOアドレスが4GB超になっているか確認

setup_var ではDXEドライバーに無視されてしまいましたが、UMAF_BETA は別のアプローチでBIOS設定を変更できたと思われます(詳細なメカニズムは非公開のため不明)。

参考リンク

コメント

タイトルとURLをコピーしました