在 Ubuntu 20.04 上安装 ROCm 失败

如何解决在 Ubuntu 20.04 上安装 ROCm 失败

我想在 Ubuntu 上为深度学习设置 AMD Radeon。我工作的主要库是 keras 和 pytorch。我严格遵循 ROCm 安装指南 here,但在第三步使用命令 sudo apt install rocm-dkms 失败。错误信息如下所示。

Setting up dkms (2.8.1-5ubuntu1) ...
Setting up hip-rocclr (4.0.20496.5685.40000-23) ...
Setting up rock-dkms (1:4.0-23) ...
Loading new amdgpu-4.0-23 DKMS files...
Building for 5.8.0-41-generic
Building for architecture x86_64
Building initial module for 5.8.0-41-generic
Error! Bad return status for module build on kernel: 5.8.0-41-generic (x86_64)
Consult /var/lib/dkms/amdgpu/4.0-23/build/make.log for more information.
dpkg: error processing package rock-dkms (--configure):
 installed rock-dkms package post-installation script subprocess returned error 
exit status 10
Setting up g++-9 (9.3.0-17ubuntu1~20.04) ...
Setting up g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mo
de
Setting up build-essential (12.8ubuntu1.1) ...
dpkg: dependency problems prevent configuration of rocm-dkms:
 rocm-dkms depends on rock-dkms; however:
  Package rock-dkms is not configured yet.

dpkg: error processing package rocm-dkms (--configure):
 dependency problems - leaving unconfigured
Setting up gcc-multilib (4:9.3.0-1ubuntu2) ...
No apport report written because the error message indicates its a followup erro
r from a prevIoUs failure.
                          Setting up g++-9-multilib (9.3.0-17ubuntu1~20.04) ...
Setting up g++-multilib (4:9.3.0-1ubuntu2) ...
Processing triggers for sgml-base (1.29.1) ...
Setting up x11proto-dev (2019.2-1ubuntu1) ...
Setting up libxau-dev:amd64 (1:1.0.9-0ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Processing triggers for man-db (2.9.1-1) ...
Setting up libxdmcp-dev:amd64 (1:1.1.3-0ubuntu1) ...
Setting up x11proto-core-dev (2019.2-1ubuntu1) ...
Setting up libxcb1-dev:amd64 (1.14-2) ...
Setting up libx11-dev:amd64 (2:1.6.9-2ubuntu1.1) ...
Setting up libglx-dev:amd64 (1.3.2-1~ubuntu0.20.04.1) ...
Setting up libgl-dev:amd64 (1.3.2-1~ubuntu0.20.04.1) ...
Setting up mesa-common-dev:amd64 (20.2.6-0ubuntu0.20.04.1) ...
Setting up rocm-opencl-dev (3.6Beta-17-g875c1f8-rocm-rel-4.0-23) ...
Settin XT g up rocm-clang-ocl (0.5.0.64-rocm-rel-4.0-23-50fb51a) ...
Setting up rocm-utils (4.0.0.40000-23) ...
Setting up rocm-dev (4.0.0.40000-23) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Errors were encountered while processing:
 rock-dkms
 rocm-dkms
E: Sub-process /usr/bin/dpkg returned an error code (1)

我的内核版本是 5.8.0-41-generic。我的 VGA 卡是 Gigabyte Radeon RX6900 XT。我的 cpu 是 AMD 锐龙 9 3900 XT。我尝试了之前帖子中建议的几种解决方案,但没有解决我的问题。我可以为您提供解决此问题的建议吗。

解决方法

我也遇到了同样的问题。我发现修复它的唯一方法是回滚到 5.6.0-1042-oem 内核。 AMD 驱动程序似乎不支持超过此内核的任何内核。

编辑:这也是一种让 amdgpupro 驱动程序顺利安装的方法。

警告:我是在事后写下这一切的,我可能错过了一步或沿途的东西。请非常小心,尤其是在尝试删除内核和在引导目录中工作时。如果您对破坏系统的想法感到不舒服,您可以随时设置 grub 的默认选择,这比删除 initramfs 安全得多。

这是我如何让 RocM 工作

sudo apt install linux-image-5.6.0-1042-oem linux-headers-5.6.0-1042-oem && reboot

确保通过访问 grub 中的 Ubuntu 高级选项启动到 5.6 内核。

sudo apt remove linux-image-5.8.0-41-generic linux-headers-5.8.0-41-generic && sudo apt autoremove && reboot

同样,您必须通过高级选项重新启动到 5.6。返回后,最好将标题和图像设置为保留状态,因为内核更新很可能会破坏 RocM

sudo apt-mark hold linux-image-generic linux-headers-generic

现在我们将尝试刷新 5.8 内核。首先清除临时文件。

sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*

现在列出所有安装的内核

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+'

并尝试删除 5.8 内核。对我们安装的 5.6 以上的任何内核执行此操作。

sudo update-initramfs -d -k 5.8.0-41-generic

现在 initramfs、Systemmap 和 config 仍然存在于引导目录中,因此我们需要清除它们以使 grub 再次正常工作。

cd /boot/
sudo rm vmlinuz-5.8.0-41-generic System.map-5.8.0-41-generic config-5.8.0-41-generic

现在您应该终于准备好更新 grub

sudo update-grub && reboot

现在当您重新加载时,您应该可以安装 RocM

sudo apt install rocm-dkms
,

根据本 link 中的官方说明,AMD ROCm 平台旨在支持 Ubuntu 20.04.1(5.4 和 5.6-oem)和 18.04.5(内核 5.4)。

因此不支持内核版本 5.8。但是,降级是一种选择,但您不必急于降级,只需启动到旧版本的内核即可。

尝试以下步骤:

  1. 重新启动计算机,
  2. 等待 grub 菜单打开(如何打开 grub 菜单:link)。
  3. 选择advanced options for ubuntu
  4. 从显示的列表中选择一个备用内核。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?