基于AMDGPU-ROCm的深度学习环境搭建

在风起云涌的AI江湖,NVIDIA凭借其CUDA生态和优秀的硬件立下赫赫战功,而另一家公司AMD也不甘示弱,带着他的生态解决方案ROCm开始了与不世出的NVIDA的正面硬钢,"ROCm is the answer to CUDA", AMD官网如是说。之前有搭建过CUDA的学习平台,今天尝试基于AMDGPU,搭建一个ROCm的学习平台。

平台信息

基于Ubuntu 20.04.6 LTS x86_64,显卡为AMD Ryzen 5 5600G with Radeon Graphics集显,应该是VEGA系列,支持VULKAN,OPENCL,当然,不支持CUDA。

搭建步骤

执行如下命令序列,添加用户组和安装ROCm一步到位:

sudo apt update && sudo apt dist-upgrade
sudo apt-get install wget gnupg2 
sudo usermod -a -G video $LOGNAME
sudo usermod -a -G render $LOGNAME
echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=render' | sudo tee -a /etc/adduser.conf
sudo wget https://repo.radeon.com/amdgpu-install/22.10/ubuntu/focal/amdgpu-install_22.10.50100-1_all.deb
sudo apt-get install ./amdgpu-install_22.10.50100-1_all.deb 
sudo amdgpu-install --usecase=dkms
amdgpu-install -y --usecase=rocm
echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin' | sudo tee -a /etc/profile.d/rocm.sh

安装结束后,将会在/opt目录下安装GPU开发SDK, LLVM编译器, opencl, profile, tools等开发工具,便于用户开发自己的基于AMDGPU加速的应用程序。

测试环境

执行rocm-smi获取显卡设备信息,执行时发现在获取SCLK和功耗两个参数时报错,可能是SDK和显卡兼容方面的问题,不过没有影响后面的简单测试,所以也就没有理会。

AMD一直提倡一种混合异构架构(HSA),这种架构下CPU和GPU乃至各种异构算力被一视同仁,遵守同样的编成模型开发,从rocminfo工具的输出可以看到这一点:

$ sudo /opt/rocm/bin/rocminfo

我的计算平台有两个AGENT,分别是CPU和GPU:

GPU Agent信息,计算单元数量,计算最大的TENSOR维数信息,QUEUE数量,WAVE(Warpper)大小等信息:

opencl支持信息

ROCm不直接支持CUDA,但是 support another GPU programming mode opencl,通过clinfo查看:

/opt/rocm/opencl/bin/clinfo

docker容器运行测试

下载pytorch环境的docker:

sudo docker run -it -v $HOME:/data --privileged --rm --device=/dev/kfd --device=/dev/dri --group-add video --name pytorch rocm/pytorch:latest

之后,在docker终端中执行如下命令,验证对CUDA的支持(猜测是利用CUDA的生态,底层是CUDA转OpenCL的算子实现):

>>> import torch
>>> torch.cuda.is_available()

输出为TRUE,说明AMDGPU的硬件加速平台搭建成功了。

简单分析

细心的同学可能注意到,在启动docker的测试命令中,传入了一个设备参数--device=/dev/kfd给到DOCKER环境,这个非常重要,kfd本身就是代表AMDGPU异构计算的GPU设备驱动(KMD)的设备节点,它是用户使用的基础。

AMD的amdkfd 可以理解为在 DRM 子系统中提供了 CPU 与 GPU 沟通的快速通道,使得两者可以平等的访问内存资源而无需额外拷贝。

我们可以在运行上面的测试时,简单追踪以下对KFD内核驱动的调用,以验证加速环境确实使用的AMDGPU显卡,KFD是一个字符设备,所以可以追踪其中的几个FOPS调用,不出所料,我们追踪到了对KFD的调用:

参考资料

Index of /amdgpu-install/

https://www.cnblogs.com/lllzhuang/articles/16083003.html

结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/487663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 11+docker desktop+grafana+influxDB

下载安装docker desktop 出现WSL相关的错误。WSL是一个linux内核的子系统,docker是基于linux内核的,所以运行docker需要WSL。 以管理员权限打开powershell,查看WSL状态 wsl --status 我遇到的错误是因为我关闭了windows的某些更新 执行上…

opengl pyqt 显示文字

目录 效果图 效果图 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QOpenGLWidgetfrom OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import *class OpenGLWidget(QOpenGLWidget):def __init__(self, parentNone):super(OpenGLWidget…

财报解读:英伟达的“蝶变时刻”已然到来?

搭上了AI快车的英伟达,再一次交出了亮眼“答卷”。 财报显示,2024财年,英伟达营收609亿美元,同比增长126%,净利润297.6亿美元,同比增长581%。其中,Q4实现营收221亿美元,同比增长 26…

【深度学习】微调通义千问模型:LoRA 方法,微调Qwen1.8B教程,实践

官网资料: https://github.com/QwenLM/Qwen/blob/main/README_CN.md 文章目录 准备数据运行微调设置网络代理启动容器执行 LoRA 微调修改 finetune/finetune_lora_single_gpu.sh运行微调 执行推理 在本篇博客中,我们将介绍如何使用 LoRA 方法微调通义千问模型&#…

RobotGPT:利用ChatGPT的机器人操作学习框架,三星电子研究院与张建伟院士、孙富春教授、方斌教授合作发表RAL论文

1 引言 大型语言模型(LLMs)在文本生成、翻译和代码合成方面展示了令人印象深刻的能力。最近的工作集中在将LLMs,特别是ChatGPT,整合到机器人技术中,用于任务如零次系统规划。尽管取得了进展,LLMs在机器人技…

uni-app 黑魔法探秘 (一)—— 重写内置标签

一、背景 政采前端团队的移动端跨端解决方案选择的是 uni-app。跨端方案的好处就是一码多端,即书写一次就可以输出到 web、小程序、Anroid、iOS 等各端。既然是开发,那必然少不了配套的组件库和方法库,而我们公司因为历史原因存在一些的非 u…

[NCTF2019]True XML cookbook --不会编程的崽

题目的提示很明显了&#xff0c;就是xxe攻击&#xff0c;直接抓包。 <?xml version "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <user><username> &xxe; </username><passwor…

【BUG】解决java.util.Date and java.lang.String

报错解析与解决方案&#xff1a;Java中处理Date类型与String比较引发的IllegalArgumentException 前言 在日常的开发过程中&#xff0c;我们可能会遇到各种类型转换和比较相关的异常。今天&#xff0c;我在调用接口时就遭遇了这样一个问题&#xff1a; 错误描述 在执行SQL查…

Spring注入

文章目录 3.1 什么是注入3.1.1 为什么需要注入3.1.2 如何进行注入3.1.3 注入好处 3.2 Spring 注入的原理分析&#xff08;简易版&#xff09;3.3 Set 注入详解3.3.1 JDK内置类型3.3.2 自定义类型3.3.2.1 第一种方式3.3.2.2 第二种方式 3.4 构造注入3.4.1 步骤3.4.2 构造方法重载…

洛谷 【算法1-6】二分查找与二分答案

【算法1-6】二分查找与二分答案 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 鄙人不才&#xff0c;刷洛谷&#xff0c;迎蓝桥&#xff0c;【算法1-6】二分查找与二分答案 已刷&#xff0c;现将 AC 代码献上&#xff0c;望有助于各位 P2249 【深基13.例1】查找 - 洛谷…

Python中if __name__ == ‘__main__‘:的原理、作用和实践

Python中if name ‘main‘&#xff1a;的原理、作用和实践 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的…

Unity之PUN2插件实现多人联机射击游戏

目录 &#x1f4d6;一、准备工作 &#x1f4fa;二、UI界面处理 &#x1f4f1;2.1 登录UI并连接PUN2服务器 &#x1f4f1;2.2 游戏大厅界面UI &#x1f4f1;2.3 创建房间UI &#x1f4f1;2.4 进入房间UI &#x1f4f1;2.5 玩家准备状态 &#x1f4f1;2.6 加载战斗场景…