AMD Radeon Instinct MI50 刷VBIOS 改成 Radeon Pro VII

准备

ROCm 快速起步 安装好 ROCm 和 amdgpu驱动,然后检查 rcom-smi 输出显示:

在没有刷VBIOS之前的rocm-smi输出
=========================================== ROCm System Management Interface ===========================================
===================================================== Concise Info =====================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK    MCLK    Fan     Perf  PwrCap  VRAM%  GPU%  
              (DID,     GUID)  (Edge)  (Socket)  (Mem, Compute, ID)                                                     
========================================================================================================================
0       1     0x66a1,   9593   33.0°C  14.0W     N/A, N/A, 0         930Mhz  350Mhz  14.51%  auto  225.0W  0%     0%    
1       2     0x66a1,   45663  32.0°C  19.0W     N/A, N/A, 0         930Mhz  350Mhz  14.51%  auto  225.0W  0%     0%    
========================================================================================================================
================================================= End of ROCm SMI Log ==================================================

备注

TechPowerUp 是目前全球最权威的显卡固件和工具库

下载 amdvblash
wget https://us3-dl.techpowerup.com/files/Jy_KPxXzsiW-l-ZoP8DuYQ/1776045978/amdvbflash_linux_4.71.zip
  • 下载AMD Radeon Pro VII 16GB 原厂 ROM: 访问 TechPowerUp VGA BIOS Database 依次选择:

    • GPU Brand: AMD

    • Card Model: Radeon Pro VII

    • Card Vendor: AMD (Pro 系列通常只有公版)

    • Memory Size: 16384 MB (16GB)

TechPowerUp提供的Radeon Pro VII 16 GB Video BIOS版本是2020-08-18发布的 016.004.000.064.015319

下载 Pro VII 的VBIOS
wget https://www.techpowerup.com/vgabios/229229/AMD.RadeonProVII.16384.200818.rom

备注

由于AMD官方网站不对外提供"裸“ROM文件,以及刷机工具,所以通常需要通过第三方TechPowerUp托管的工具和固件来完成。TechPowerUp网站提供的ROM通常经过大量用户的评论和验证,选择带有"Verified"标签的固件,代表通过了社区的测试。

在刷入任何非官方固件之前,先使用 amdvbflash -s 命令提取当前卡的原厂VBIOS,那么即使以后想要回退原厂VBIOS也是可行的。这点非常重要,因为AMD官方可能不提供MI50原始VBIOS下载。

初次尝试 失败

  • 检查VBIOS版本(从显卡的 EEPROM 芯片读取信息,不依赖操作系统驱动的映射):

检查当前VBIOS版本
sudo ./amdvbflash -i

输出的固件版本、Device ID 和 Subsystem ID信息如下:

当前VBIOS版本信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.


adapter seg  bn dn dID       asic           flash      romsize test    bios p/n    
======= ==== == == ==== =============== ============== ======= ==== ================
   0    0000 0D 00 66A1 Vega20          GD25Q80C        100000 pass 113-D1631711-100
   1    0000 86 00 66A1 Vega20          GD25Q80C        100000 pass 113-D1631711-100

说明:

  • adapter: 显卡索引(如 0, 1)。

  • device id: 核心标识(MI50 应该是 66A2,刷完 Pro VII 后应变为 66AF)。

  • product: 固件版本号(VBIOS Version)。

  • checksum: 固件校验码。

备份当前MI50的原厂VBIOS
sudo ./amdvbflash -s 0 original_mi50.rom
  • 刷入下载的Pro VII VBIOS:

刷入Pro VII VBIOS
sudo ./amdvbflash -p 0 -f AMD.RadeonProVII.16384.200818.rom 

刷新信息如下:

刷入Pro VII VBIOS时的输出信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.

Old SSID: 0834
New SSID: 081E
Old P/N: 113-D1631711-100
New P/N: 113-D1640600-104
The result of RSA signature verify is PASS.
Old DeviceID: 66A1
New DeviceID: 66A1
Old Product Name: Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m 
New Product Name: Vega20 A1 GLXT WS D16406 60CU/16GB 4HI 1000m 
Old BIOS Version: 016.004.000.064.016969
New BIOS Version: 016.004.000.064.015319
Flash type: GD25Q80C
Burst size is 256 
80000/80000h bytes programmed
80000/80000h bytes verified

Restart System To Complete VBIOS Update.

这里的输出信息有点让人不安:

  • RSA Signature Verify: PASS 硬件安全检查通过了,说明这个 ROM 的签名是合法的,显卡不会因为固件签名错误而变成“砖头”

  • DeviceID: 66A1 (未变) MI50 原本报告的是 66A1,刷完 Pro VII 还是 66A1。这意味着 MI50 和 Radeon Pro VII 在核心层面的硬件 ID 是完全一致的

  • SSID (Subsystem ID) 的变化 (0834 -> 081E) 许多 OEM 厂商(如 Dell)的 BIOS 并不是封锁 DeviceID(因为那太笼统),而是封锁 SSID。这个变化表明有可以能绕过 Dell T5820 封锁

  • Product NameSERVER XL 变为了 GLXT WS (Workstation)

  • 注意显存频率:原来的固件是 600m ,新固件是 1000m 。这意味着 HBM2 显存将被超频运行。注意散热。

  • 最大的潜在问题 : 刷入的是 16GB 版 Radeon Pro VII 的 ROM ,后续验证了 不同显存规格的VBIOS是不通用的,会导致无法加载驱动

  • 刷新完成后再次执行 sudo ./amdvbflash -i 看到信息

刷新了0号设备的VBIOS版本信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.


adapter seg  bn dn dID       asic           flash      romsize test    bios p/n    
======= ==== == == ==== =============== ============== ======= ==== ================
   0    0000 0D 00 66A1 Vega20          GD25Q80C        100000 pass 113-D1640600-104
   1    0000 86 00 66A1 Vega20          GD25Q80C        100000 pass 113-D1631711-100

执行 sudo ./amdvbflash -ai 可以看到详细信息:

刷新了0号设备的VBIOS详细信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.

Adapter  0    SEG=0000, BN=0D, DN=00, PCIID=66A11002, SSID=081E1002)
    Asic Family        :  Vega20         
    Flash Type         :  GD25Q80C    (1024 KB)
    Product Name       :  Vega20 A1 GLXT WS D16406 60CU/16GB 4HI 1000m 
    Bios Config File   :  D1640600.104   
    Bios P/N           :  113-D1640600-104
    Bios Version       :  016.004.000.064.015319
    Bios Date          :  08/18/20 11:22 
    ROM Image Type     :  Hybrid Images
    ROM Image Details  :  
        Image[0]: Size(59904 Bytes), Type(Legacy Image)
        Image[1]: Size(44544 Bytes), Type(EFI Image)
Adapter  1    SEG=0000, BN=86, DN=00, PCIID=66A11002, SSID=08341002)
    Asic Family        :  Vega20         
    Flash Type         :  GD25Q80C    (1024 KB)
    Product Name       :  Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m 
    Bios Config File   :  D1631711.100   
    Bios P/N           :  113-D1631711-100
    Bios Version       :  016.004.000.064.016969
    Bios Date          :  05/07/21 11:42 
    ROM Image Type     :  Legacy Image
    ROM Image Details  :  
        Image[0]: Size(41472 Bytes), Type(Legacy Image)

可以看到刷新后的产品信息已经修改成 Vega20 A1 GLXT WS D16406 60CU/16GB 4HI 1000m

但是我发现问题,现在 rocm-smi 输出中,预期的 Pro VII 没有出现,现在只有一行作为对比的 MI50 记录了,这表明刷新VBIOS的MI50不工作了:

刷新VBIOS之后只有一行MI50记录
=========================================== ROCm System Management Interface ===========================================
===================================================== Concise Info =====================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK    MCLK    Fan     Perf  PwrCap  VRAM%  GPU%  
              (DID,     GUID)  (Edge)  (Socket)  (Mem, Compute, ID)                                                     
========================================================================================================================
0       1     0x66a1,   45663  33.0°C  19.0W     N/A, N/A, 0         930Mhz  350Mhz  14.51%  auto  225.0W  0%     0%    
========================================================================================================================
================================================= End of ROCm SMI Log ==================================================

观察 dmesg 信息,果然发现驱动加载失败:

启动时dmesg报错显示刷了VBIOS后初始化失败
[   15.014573]  amdgpu_init+0x96/0xff0 [amdgpu]
[   15.030444] amdgpu 0000:0d:00.0: probe with driver amdgpu failed with error -22
[   15.032013] amdgpu 0000:0d:00.0: amdgpu: amdgpu: ttm finalized 

error -22 (Invalid Argument)通常意味着内核驱动 amdgpu 在尝试初始化时遇到了参数不匹配或验证失败的情况。当驱动尝试初始化内存控制器(Memory Controller)并验证 HBM2 的堆栈数量和容量时,由于固件描述(4HI/16GB)与实际物理探测(8HI/32GB)严重不符,驱动会直接抛出 Invalid Argument 并退出。

我忽然想起来,在查询MI50的官方网站驱动时,AMD实际上将MI50的16GB规格和32GB规格用了两个不同的安装软件包,另外我想起来NVIDIA显卡魔改,并不是直接将显存芯片改焊其他大规格显存芯片就能解决,是需要破解BIOS和驱动的,这说明厂商在显存上做了很多限制,直接刷不通规格VBIOS很可能是行不通的。

再次尝试

evilJazz/MI50_32GB_VBIOS.md 给出了详尽的针对32GB规格 AMD Radeon Instinct MI50 的实践建议:

  • AMD Radeon Pro V420 才是推荐采用的刷MI50的对应VBIOS:

    • Pro V420 是真正匹配的32GB规格的 Vega 20 GPU,和 AMD Radeon Instinct MI50 32GB规格完全匹配

    • 支持 UEFI in ROM ,这改变了MI50的 Legacy only

    • 支持显示输出

    • 支持 ReBAR ,而MI50则不支持ReBAR

    • BAR size扩大到32GB,MI50似乎因为Vulkan问题导致BAR size 16GB

    • 支持PCIe link power saving,甚至支持在idle时候降低到Gen 1

    • 功耗降低到178W,但是性能只下降1%(使用vkpeak测试),原因是多GPU以轮询方式推理,核心/热点有足够时间冷却,使得功率上限和散热得到优化

    • SCLK时钟频率略微提高(我看到比原生MI50的930 MHz提高一点点,达到938 MHz)

  • 刷入 V420.rom (113-D1640200-043):

刷入Pro V420的VBIOS
sudo ./amdvbflash -f -fp -fa -fv -p 0 V420.rom

输出显示

刷入Pro V420的VBIOS显示信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.

Old SSID: 081E
New SSID: 081E
Old P/N: 113-D1640600-104
New P/N: 113-D1640200-043
The result of RSA signature verify is PASS.
Old DeviceID: 66A1
New DeviceID: 66A0
Old Product Name: Vega20 A1 GLXT WS D16406 60CU/16GB 4HI 1000m 
New Product Name: Vega20 A1 GLXT WS D16402 32GB 8HI 1000m 
Old BIOS Version: 016.004.000.064.015319
New BIOS Version: 016.004.000.043.012098
Flash type: GD25Q80C
Burst size is 256 
80000/80000h bytes programmed
80000/80000h bytes verified

Restart System To Complete VBIOS Update.
  • 成功刷入V420的VBIOS之后,重启系统,再次使用 rocm-smi 可以看到正常加载的驱动显示出了这块 Pro V420 显卡,请注意其参数和没有刷VBIOS的 MI50 差异:

刷入Pro V420的VBIOS之后参数
=========================================== ROCm System Management Interface ===========================================
===================================================== Concise Info =====================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK    MCLK    Fan     Perf  PwrCap  VRAM%  GPU%  
              (DID,     GUID)  (Edge)  (Socket)  (Mem, Compute, ID)                                                     
========================================================================================================================
0       1     0x66a0,   35670  34.0°C  15.0W     N/A, N/A, 0         938Mhz  350Mhz  9.41%   auto  178.0W  0%     0%    
1       2     0x66a1,   45663  33.0°C  19.0W     N/A, N/A, 0         930Mhz  350Mhz  14.51%  auto  225.0W  0%     0%    
========================================================================================================================
================================================= End of ROCm SMI Log ==================================================

这里最大的变化是TDP下降到 178W ,这对于安装在 Dell Precision T5820 工作站 工作站有很大帮助,另外提供了mini HDMI输出,🈶️可以省却一块P400占用的PCIe插槽,

对比 amdvbflash -i 输出:

对比 amdvbflash -i 输出信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.


adapter seg  bn dn dID       asic           flash      romsize test    bios p/n    
======= ==== == == ==== =============== ============== ======= ==== ================
   0    0000 0D 00 66A0 Vega20          GD25Q80C        100000 pass 113-D1640200-043
   1    0000 86 00 66A1 Vega20          GD25Q80C        100000 pass 113-D1631711-100

对比 amdvbflash -ai 输出

对比 amdvbflash -ai 输出信息
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.

Adapter  0    SEG=0000, BN=0D, DN=00, PCIID=66A01002, SSID=081E1002)
    Asic Family        :  Vega20         
    Flash Type         :  GD25Q80C    (1024 KB)
    Product Name       :  Vega20 A1 GLXT WS D16402 32GB 8HI 1000m 
    Bios Config File   :  D1640200.043   
    Bios P/N           :  113-D1640200-043
    Bios Version       :  016.004.000.043.012098
    Bios Date          :  05/02/19 11:36 
    ROM Image Type     :  Hybrid Images
    ROM Image Details  :  
        Image[0]: Size(59392 Bytes), Type(Legacy Image)
        Image[1]: Size(44032 Bytes), Type(EFI Image)
Adapter  1    SEG=0000, BN=86, DN=00, PCIID=66A11002, SSID=08341002)
    Asic Family        :  Vega20         
    Flash Type         :  GD25Q80C    (1024 KB)
    Product Name       :  Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m 
    Bios Config File   :  D1631711.100   
    Bios P/N           :  113-D1631711-100
    Bios Version       :  016.004.000.064.016969
    Bios Date          :  05/07/21 11:42 
    ROM Image Type     :  Legacy Image
    ROM Image Details  :  
        Image[0]: Size(41472 Bytes), Type(Legacy Image)

备注

evilJazz/MI50_32GB_VBIOS.md 提到了混用不同的VBIOS似乎会给ROCm带来问题,他在ollama测试中发现SCALE信号终止等问题。不过,我准备将两块 AMD Radeon Instinct MI50 都刷了V420的VBIOS。

但是很不幸,虽然这次实践刷入 Pro V420的 VBIOS成功,但是我将 AMD Radeon Instinct MI50 安装到 Dell Precision T5820 工作站 却依然无法启动。Google了一下,AI确实提示 AMD Radeon Pro V420不在T5820支持列表 ,原因可能是Pro V420是一个特殊的服务器端虚拟化卡。我怀疑Dell T5820只接受workstation graphics (WX/W series)

不过我看到 Reddit:32GB Mi50, but llama.cpp Vulkan sees only 16GB 提到有人根据闲鱼上的帖子 MI50 32G 非卖品 仅限交流 提供的2个VBIOS,该贴提到部分主板要关闭CSM

再次尝试

evilJazz/MI50_32GB_VBIOS.md 上列出了一个从 Apple Radeon Pro VII 32 GB导出的 113-D163A1XT-045 ("vbios3"),虽然有报告说不太稳定,但是这是唯一一个桌面级VBIOS。考虑到 Dell Precision T5820 工作站 可能只支持workstation graphics (WX/W series),所以我还是决定尝试一下:

刷入Pro VII的VBIOS
sudo ./amdvbflash -f -fp -fa -fv -p 0 278241.rom

完成后重启系统,检查 rocm-smi 可以看到新VBIOS下 SCLKMCLK 都跃升到 1000MHz :

rocm-smi 显示刷了Rro VII的VBIOS
============================================ ROCm System Management Interface ============================================
====================================================== Concise Info ======================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK     MCLK     Fan     Perf  PwrCap  VRAM%  GPU%  
              (DID,     GUID)  (Edge)  (Socket)  (Mem, Compute, ID)                                                       
==========================================================================================================================
0       1     0x66a3,   48982  38.0°C  29.0W     N/A, N/A, 0         1000Mhz  1000Mhz  14.51%  auto  300.0W  0%     0%    
1       2     0x66a3,   10352  38.0°C  22.0W     N/A, N/A, 0         1000Mhz  1000Mhz  14.51%  auto  300.0W  0%     0%    
==========================================================================================================================
================================================== End of ROCm SMI Log ===================================================

但是我采用了 Pro VII 32 GB 依然无法在 Dell Precision T5820 工作站 上实现启动。根据 Dell T5820 GPU异常排查 排查推测,可能采用 修订AMD MI50 VBIOS的BAR size

其他

备注

AMD FirePro S7150 x2运算卡 的GPU核心 TongaAMD FirePro W7100 一致,所以也应该能够刷W7100的BIOS修订后用于 Dell Precision T5820 工作站 :

通过刷W7100的BIOS将S7150x2改为W7100
# S7150 x2 有两个tonga核心,需要刷新两次
./amdvbflash -p 0 -f w7100.rom
./amdvbflash -p 1 -f w7100.rom

参考