使用 apt 源安装 ROCm 6.0.x 在Ubuntu 22.04.01

本文详细介绍了在Linux系统上从卸载旧版ROCm到安装最新版本,包括处理Clang编译时的缺失头文件问题,以及使用AMD官方示例rocsolver_dgeqrf进行GPUQR分解的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从源码编译 rocSolver

本人只操作过单个rocm版本的情景,20240218 ubuntu 22.04.01


1,卸载原先的rocm


https://docs.amd.com/en/docs-5.1.3/deploy/linux/os-native/uninstall.html
 

# Uninstall single-version ROCm packages
sudo apt autoremove rocm-core

# Uninstall Kernel-mode Driver
sudo apt autoremove amdgpu-dkms

# remove apt source
sudo rm /etc/apt/sources.list.d/<rocm_repository-name>.list
sudo rm /etc/apt/sources.list.d/<amdgpu_repository-name>.list
sudo rm /etc/apt/sources.list.d/rocm.list
sudo rm /etc/apt/sources.list.d/amdgpu.list

sudo rm -rf /var/cache/apt/*
sudo apt-get clean all

sudo reboot

2,安装最新的rocm


https://rocm.docs.amd.com/projects/install-on-linux/en/latest/tutorial/quick-start.html#rocm-install-quick

sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
# See prerequisites. Adding current user to Video and Render groups
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/6.0.2/ubuntu/jammy/amdgpu-install_6.0.60002-1_all.deb
sudo apt install ./amdgpu-install_6.0.60002-1_all.deb
sudo apt update
sudo apt install amdgpu-dkms
sudo apt install rocm
sudo reboot
sudo amdgpu-install --usecase=graphics,rocm
sudo reboot

3,安装依赖

Clang: ...  'cmath' file not found
找不到 #include_next <cmath>

sudo apt install libstdc++-12-dev

4,示例

4.1 amd官方示例

$ git clone --recursive  https://github.com/amd/rocm-examples.git
$ cd HIP-Basic/device_query
$ make
$ ./hip_device_query

4.2 rocsolver_dgeqrf

ex_rocsolver_dgeqrf.cpp

/
// example.cpp source code //
/

#include <algorithm> // for std::min
#include <stddef.h>  // for size_t
#include <stdio.h>
#include <vector>
#include <hip/hip_runtime_api.h> // for hip functions
#include <rocsolver/rocsolver.h> // for all the rocsolver C interfaces and type declarations

void init_vector(double* A, int n)
{
  for(int i=0; i<n; i++)
    A[i] = (rand()%2000)/1000.0;
}

void print_matrix(double* A, int M, int N, int lda)
{
  for(int i=0; i<M; i++)
  {
    for(int j=0; j<N; j++)
    {
      printf("%7.4f, ", A[i + j*lda]);
    }
    printf("\n");
  }

}

int main() {
  rocblas_int M = 7;
  rocblas_int N = 7;
  rocblas_int lda = M;

  // here is where you would initialize M, N and lda with desired values

  rocblas_handle handle;
  rocblas_create_handle(&handle);

  size_t size_A = size_t(lda) * N;          // the size of the array for the matrix
  size_t size_piv = size_t(std::min(M, N)); // the size of array for the Householder scalars

  std::vector<double> hA(size_A);      // creates array for matrix in CPU
  std::vector<double> hIpiv(size_piv); // creates array for householder scalars in CPU

  init_vector(hA.data(), size_A);
  memset(hIpiv.data(), 0, size_piv*sizeof(double));

  print_matrix(hA.data(), M, N, lda);

  double *dA, *dIpiv;
  hipMalloc(&dA, sizeof(double)*size_A);      // allocates memory for matrix in GPU
  hipMalloc(&dIpiv, sizeof(double)*size_piv); // allocates memory for scalars in GPU

  // here is where you would initialize matrix A (array hA) with input data
  // note: matrices must be stored in column major format,
  //       i.e. entry (i,j) should be accessed by hA[i + j*lda]

  // copy data to GPU
  hipMemcpy(dA, hA.data(), sizeof(double)*size_A, hipMemcpyHostToDevice);
  // compute the QR factorization on the GPU
  rocsolver_dgeqrf(handle, M, N, dA, lda, dIpiv);
  // copy the results back to CPU
  hipMemcpy(hA.data(), dA, sizeof(double)*size_A, hipMemcpyDeviceToHost);
  hipMemcpy(hIpiv.data(), dIpiv, sizeof(double)*size_piv, hipMemcpyDeviceToHost);

  printf("\nR =\n");
  print_matrix(hA.data(), M, N, lda);
  printf("\ntau=\n");
  print_matrix(hIpiv.data(), 1, N, 1);

  // the results are now in hA and hIpiv, so you can use them here

  hipFree(dA);                        // de-allocate GPU memory
  hipFree(dIpiv);
  rocblas_destroy_handle(handle);     // destroy handle
}

Makefile:

EXE := ex_rocsolver_dgeqrf

all: $(EXE)

INC :=  -I /opt/rocm/include -D__HIP_PLATFORM_AMD__
LD_FLAGS := -L /opt/rocm/lib -lamdhip64 -lrocblas -lrocsolver

ex_rocsolver_dgeqrf.o: ex_rocsolver_dgeqrf.cpp
        g++ $< $(INC) -c -o $@

ex_rocsolver_dgeqrf: ex_rocsolver_dgeqrf.o
        g++ $< $(LD_FLAGS) -o $@


.PHONY: clean
clean:
        ${RM} *.o $(EXE)

运行效果:

使用matlab对结果做验证:

<think>好的,我现在需要帮助用户解决在Ubuntu上通过APT安装ROCM相关包时出现的找不到软件包的问题。根据用户提供的引用内容,特别是引用[1],用户尝试设置ROCM的软件源,但安装时仍然遇到问题。首先,我应该检查用户提到的环境变量是否正确配置,以及软件源列表是否生成正确。 首先,用户设置的ROCM_REPO_BASEURL是5.7.1版本,可能这个版本已经过时,或者软件包名称有所变化。我需要确认当前可用的ROCM版本,并建议用户更新到最新的稳定版本。比如,ROCm 5.7.1可能已经被更高版本取代,导致旧的仓库中没有对应的软件包。 其次,检查软件源列表的生成是否正确。用户使用echo命令将软件源写入/etc/apt/sources.list.d/rocm.list,这一步是否正确?需要确保没有语法错误,比如URL是否正确,发行版名称(如ubuntu)是否与系统匹配。如果用户使用的是不同的Ubuntu版本,比如22.04(Jammy),可能需要调整仓库配置。 另外,用户可能没有正确更新软件包列表。在修改源列表后,必须运行sudo apt-get update才能获取最新的软件包信息。如果用户遗漏了这一步,或者更新过程中出现错误,就会导致找不到软件包。 还有,软件包的名称是否正确?比如rocblas、rocsparse等,可能在不同的版本中有不同的命名方式,或者被拆分到其他组件中。用户提到的包是否存在,或者是否有替代名称? 根据引用[2],用户之前遇到ROS安装问题,通过重新安装解决。这可能意味着用户的系统存在依赖问题或部分软件源配置错误,需要清理或修复损坏的包。 可能的解决步骤包括: 1. 确认系统版本和架构,确保与ROCM兼容。 2. 更新ROCM的软件源到最新版本,比如将5.7.1改为6.0或更高。 3. 检查软件源文件的格式是否正确,包括发行版名称和组件。 4. 运行apt-get update,确保没有错误。 5. 安装必要的依赖和密钥,如添加GPG密钥。 6. 尝试安装完整的rocm-hip-sdk或其他元数据包,可能个别包已被整合。 同时,用户可能需要安装额外的依赖项,如libnuma-dev、libpci-dev等,这些在官方文档中通常有列出。此外,检查是否有拼写错误或大小写问题,比如rocm-hip-sdk是否应该全部小写。 如果上述方法无效,可能需要参考官方安装指南,或者检查网络连接是否能够正确访问仓库URL。最后,建议用户查看ROCm的GitHub问题或论坛,看看是否有其他用户遇到类似问题及解决方案。</think>要解决在Ubuntu上通过APT安装ROCM相关包时找不到软件包的问题,可按照以下步骤排查和修复: ### 1. **确认软件源配置** 引用[1]中设置的仓库地址为`https://repo.radeon.com/rocm/apt/5.7.1/`,但该版本可能已过时或仓库结构变化。建议改用**最新稳定版本**的仓库: ```bash # 将5.7.1替换为当前稳定版本(如6.0.2) export ROCM_VERSION="6.0.2" echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/$ROCM_VERSION ubuntu main" | sudo tee /etc/apt/sources.list.d/rocm.list ``` ### 2. **添加GPG密钥** 部分仓库需验证签名密钥,否则可能无法拉取软件包列表: ```bash wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add - ``` ### 3. **更新软件包列表** 修改仓库配置后必须执行: ```bash sudo apt-get update ``` 若报错`Failed to fetch`,需检查网络是否可访问仓库URL,或尝试更换镜像源。 --- ### 4. **检查系统兼容性** - **Ubuntu版本**:ROCm 6.x支持Ubuntu 22.04(Jammy),若系统版本过低需升级。 - **架构匹配**:确保系统为`amd64`架构(ARM或旧版32位系统不兼容)。 --- ### 5. **安装元数据包替代单个包** 部分软件包可能整合到元数据包中。例如: ```bash # 安装完整ROCm开发环境(包含hip-sdk、rocblas等) sudo apt-get install rocm-dev ``` 或根据需求选择: ```bash # 仅安装HIP运行时和基础库 sudo apt-get install rocm-hip-libraries ``` --- ### 6. **修复依赖问题** 若提示依赖错误(如引用[2]中ROS安装问题),可尝试修复: ```bash # 清理损坏的依赖 sudo apt-get autoremove sudo apt-get install -f # 重新安装 sudo apt-get install rocm-hip-sdk rocblas rocsparse hipblas ``` --- ### 7. **手动下载安装(备用方案)** 若APT仍无法解决,可从ROCm官网手动下载`.deb`包: 1. 访问[ROCm下载页](https://rocm.docs.amd.com/en/latest/deploy/install/quick_start.html) 2. 选择对应版本的`.deb`包 3. 执行安装: ```bash sudo dpkg -i package.deb ``` --- ### 总结问题原因 1. **仓库版本过时**:旧版本仓库可能已移除或路径调整[^1]。 2. **缺少GPG密钥**:导致APT拒绝拉取软件列表。 3. **系统版本不匹配**:如Ubuntu 20.04尝试安装仅支持22.04ROCm 6.x。 4. **软件包名称变更**:部分包可能合并或重命名(如`rocm-hip-sdk`改为`rocm-hip-libraries`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值