.. _amd_mi50_flash_vbios: ====================================================== AMD Radeon Instinct MI50 刷VBIOS 改成 Radeon Pro VII ====================================================== 准备 ========== :ref:`rocm_quickstart` 安装好 ROCm 和 amdgpu驱动,然后检查 ``rcom-smi`` 输出显示: .. literalinclude:: amd_mi50_flash_vbios/rocm-smi_output_before :caption: 在没有刷VBIOS之前的rocm-smi输出 .. note:: `TechPowerUp `_ 是目前全球最权威的显卡固件和工具库 - 下载 ``amdvbflash`` (原名 Atiflash),下载页面见 `TechPowerUp - AMDVBFlash / ATI Flash `_ .. literalinclude:: amd_mi50_flash_vbios/get_amdvbflash :caption: 下载 ``amdvblash`` - 下载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`` .. literalinclude:: amd_mi50_flash_vbios/get_vbios :caption: 下载 Pro VII 的VBIOS .. note:: 由于AMD官方网站不对外提供"裸“ROM文件,以及刷机工具,所以通常需要通过第三方TechPowerUp托管的工具和固件来完成。TechPowerUp网站提供的ROM通常经过大量用户的评论和验证,选择带有"Verified"标签的固件,代表通过了社区的测试。 在刷入任何非官方固件之前,先使用 ``amdvbflash -s`` 命令提取当前卡的原厂VBIOS,那么即使以后想要回退原厂VBIOS也是可行的。这点非常重要,因为AMD官方可能不提供MI50原始VBIOS下载。 初次尝试 ``失败`` ===================== - 检查VBIOS版本(从显卡的 EEPROM 芯片读取信息,不依赖操作系统驱动的映射): .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_i :caption: 检查当前VBIOS版本 输出的固件版本、Device ID 和 Subsystem ID信息如下: .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_i_output :caption: 当前VBIOS版本信息 说明: - adapter: 显卡索引(如 0, 1)。 - device id: 核心标识(MI50 应该是 66A2,刷完 Pro VII 后应变为 66AF)。 - product: 固件版本号(VBIOS Version)。 - checksum: 固件校验码。 - 备份当前 :ref:`amd_mi50` 的原厂VBIOS: .. literalinclude:: amd_mi50_flash_vbios/backup_vbios :caption: 备份当前MI50的原厂VBIOS - 刷入下载的Pro VII VBIOS: .. literalinclude:: amd_mi50_flash_vbios/flash_vbios :caption: 刷入Pro VII VBIOS 刷新信息如下: .. literalinclude:: amd_mi50_flash_vbios/flash_vbios_output :caption: 刷入Pro VII VBIOS时的输出信息 这里的输出信息有点让人不安: - ``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 Name`` 从 ``SERVER XL`` 变为了 ``GLXT WS`` (Workstation) - 注意显存频率:原来的固件是 ``600m`` ,新固件是 ``1000m`` 。这意味着 HBM2 显存将被超频运行。注意散热。 - **最大的潜在问题** : 刷入的是 16GB 版 Radeon Pro VII 的 ROM ,后续验证了 **不同显存规格的VBIOS是不通用的,会导致无法加载驱动** - 刷新完成后再次执行 ``sudo ./amdvbflash -i`` 看到信息 .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_i_output_after :caption: 刷新了0号设备的VBIOS版本信息 :emphasize-lines: 6 执行 ``sudo ./amdvbflash -ai`` 可以看到详细信息: .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_ai_output_after :caption: 刷新了0号设备的VBIOS详细信息 :emphasize-lines: 6 可以看到刷新后的产品信息已经修改成 ``Vega20 A1 GLXT WS D16406 60CU/16GB 4HI 1000m`` 但是我发现问题,现在 ``rocm-smi`` 输出中,预期的 ``Pro VII`` 没有出现,现在只有一行作为对比的 MI50 记录了,这表明刷新VBIOS的MI50不工作了: .. literalinclude:: amd_mi50_flash_vbios/rocm-smi_output_1 :caption: 刷新VBIOS之后只有一行MI50记录 观察 ``dmesg`` 信息,果然发现驱动加载失败: .. literalinclude:: amd_mi50_flash_vbios/dmesg_error :caption: 启动时dmesg报错显示刷了VBIOS后初始化失败 :emphasize-lines: 2 ``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规格 :ref:`amd_mi50` 的实践建议: - `AMD Radeon Pro V420 `_ 才是推荐采用的刷MI50的对应VBIOS: - ``Pro V420`` 是真正匹配的32GB规格的 ``Vega 20`` GPU,和 :ref:`amd_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): .. literalinclude:: amd_mi50_flash_vbios/flash_v420_rom :caption: 刷入Pro V420的VBIOS 输出显示 .. literalinclude:: amd_mi50_flash_vbios/flash_v420_rom_output :caption: 刷入Pro V420的VBIOS显示信息 :emphasize-lines: 11 - 成功刷入V420的VBIOS之后,重启系统,再次使用 ``rocm-smi`` 可以看到正常加载的驱动显示出了这块 **Pro V420** 显卡,请注意其参数和没有刷VBIOS的 **MI50** 差异: .. literalinclude:: amd_mi50_flash_vbios/rocm-smi_v420 :caption: 刷入Pro V420的VBIOS之后参数 :emphasize-lines: 6 这里最大的变化是TDP下降到 **178W** ,这对于安装在 :ref:`dell_t5820` 工作站有很大帮助,另外提供了mini HDMI输出,🈶️可以省却一块P400占用的PCIe插槽, 对比 ``amdvbflash -i`` 输出: .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_v420_mi50 :caption: 对比 ``amdvbflash -i`` 输出信息 :emphasize-lines: 6 对比 ``amdvbflash -ai`` 输出 .. literalinclude:: amd_mi50_flash_vbios/amdvbflash_ai_v420_mi50 :caption: 对比 ``amdvbflash -ai`` 输出信息 :emphasize-lines: 6,14 .. note:: `evilJazz/MI50_32GB_VBIOS.md `_ 提到了混用不同的VBIOS似乎会给ROCm带来问题,他在ollama测试中发现SCALE信号终止等问题。不过,我准备将两块 :ref:`amd_mi50` 都刷了V420的VBIOS。 但是很不幸,虽然这次实践刷入 Pro V420的 VBIOS成功,但是我将 :ref:`amd_mi50` 安装到 :ref:`dell_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。考虑到 :ref:`dell_t5820` 可能只支持workstation graphics (WX/W series),所以我还是决定尝试一下: .. literalinclude:: amd_mi50_flash_vbios/flash_pro_vii_rom :caption: 刷入Pro VII的VBIOS 完成后重启系统,检查 ``rocm-smi`` 可以看到新VBIOS下 ``SCLK`` 和 ``MCLK`` 都跃升到 ``1000MHz`` : .. literalinclude:: amd_mi50_flash_vbios/flash_pro_vii_rom_rocm-smi :caption: ``rocm-smi`` 显示刷了Rro VII的VBIOS 但是我采用了 Pro VII 32 GB 依然无法在 :ref:`dell_t5820` 上实现启动。根据 :ref:`dell_t5820_gpu` 排查推测,可能采用 :ref:`amd_mi50_change_vbios_bar_size` 其他 ======= .. note:: :ref:`amd_firepro_s7150x2` 的GPU核心 ``Tonga`` 和 `AMD FirePro W7100 `_ 一致,所以也应该能够刷W7100的BIOS修订后用于 :ref:`dell_t5820` : .. literalinclude:: amd_mi50_flash_vbios/flash_s7150x2 :caption: 通过刷W7100的BIOS将S7150x2改为W7100 参考 ====== - `evilJazz/MI50_32GB_VBIOS.md `_ 这篇README写得非常好,我一开始按照gemini指示走了弯路,实际还是需要 - `TechPowerUp: AMD Radeon Pro VII `_ - `AMD Expands Professional Offerings with AMD Radeon Pro VII Workstation Graphics Card and AMD Radeon Pro Software Updates `_ - `AMD Radeon Instinct Mi50 16GB on Linux TESTED | Gaming, Video Editing, Stable Diffusion `_ 这个油管视频是将MI50 16GB改成Pro VII测试游戏性能,看起来16GB规格是可行的,但是实践发现32GB因为没有Pro VII 32GB规格,强刷16GB规格Pro VII的BIOS会导致无法使用