找回密码
 加入我们
搜索
      
查看: 26152|回复: 81

[电脑] A卡深度学习福音!超详细AI绘画+ROCm部署教程

  [复制链接]
发表于 2023-12-15 22:53 | 显示全部楼层 |阅读模式
本帖最后由 gwha2 于 2023-12-15 22:53 编辑

某国政客扇扇嘴皮子,CN玩硬件和深度学习的圈子里就掀起了一场风暴,这就是著名的嘴皮子效应(误)。没了高性能计算的A100H100倒也能理解,但是美利坚这波把RTX4090禁售了就让人无语了,所以不少做深度学习的老哥都在找替代方案。没了RTX4090之后,完全CUDA应用就只有上一代的RTX3090堪用,但是很多朋友不知道,其实AMD的Radeon系列民用显卡也是能做深度学习的,而且性能也并不差。而且就在不久之前,AMD的11月和12月驱动两次加强了7000系显卡的深度学习能力,DirectML也有提升
0.png
DirectML API在Windows和Linux都有对应的AI绘图整合包,也可以使用Olive或者HIP,同时ROCm在Linux上能够替代CUDA做Pytorch或者TensorFlow的GPU加速,算是目前非常有潜力的CUDA替代方案。今天我就来给大家详细说说如何使用大家手中的A卡,来部署深度学习用的ROCm和ONNX,以及如何实现在Windows和Linux上跑AI绘图!
1、选择你的系统和环境
平台的选择会决定显卡用什么样的方式来运行,因为深度学习开发一般都是使用Python的,所以Win和Linux上有比较大的区别。一般玩家肯定是需要Windows来玩游戏的,但是开发老鸟或许更熟悉Linux一些,因此给大家列出下面这些选项
如果是一般玩家,家里有一张A卡,看着AI绘画眼馋,可以直接看第二段的Windows入门级教程。
如果是对于开发比较熟悉的,想要体验性能比较高的AMD显卡深度学习推理,可以看第三段的windows ONNX+Olive,这个也可以用于其他模型的深度学习推理。
如果家里有多的硬盘,可以装双系统或者直接有多余的主机可以装Linux的,可以看第四段的Linux ROCm满血部署方案,这个可以直接作为开发平台使用(优先推荐用这个)
这次我用的配置是我一直以来用作辅机的配置,R9 7900X+RX7900XT,但是换了新的内存和硬盘,如图,这个配置我跑AI绘画和简单的开发是没有问题的,大规模训练肯定还是优先上服务器
P1017.jpg

P1017287.jpg

P1017287a.jpg

P1017287aa.png

P1017287ab.png
从测试上来看,7900XT这仗显卡实际上有56T单精度浮点的实力,理论上深度学习能力应该不差,现在ROCm更新之后终于好好优化了这几张顶级的显卡
P1017287ac.png
2、Windows AMD GPU AI绘画教程
这一部分内容很简单,因为ai绘画目前已经有非常多的整合包了,所以直接使用是没有任何问题的。这里使用的整合包是某站大up秋叶地址的包,具体的使用过程和包的选择可以查看他的文章,需要根据自己的平台和想要的版本来进行选择。
因为本次使用的平台是AMD,所以选中的是使用DirectML API的整合包,直接下载之后打开即可。程序会自动检查更新并且安装依赖的.Net6.0,整个UI非常整洁易懂
P1017287ad.png
在使用过程之前,还需要一些小设置,首先是引擎选到GPU上,现在AMD可以直接使用DirectML进行AI图像生成,选自己的显卡即可。显存优化根据自己显卡的显存来判断,一般选择8G优化会比较快,其他的就不用更改,一键启动即可开始AI绘画
P1017287ae.png
可以看到生成过程中,显卡实际上使用最多就是自己的张量核心,不过可惜的是目前DirectML并不能获取满血的性能,需要更高性能的话需要Olive或者使用linux
P1017287af.png

P1017287ag.png
3、Windows AMD GPU ONNX+Olive使用教程
ONNX即是Open Neural Network Exchange,是为了适应多种不同的深度学习框架而产生的一种通用性深度学习框架,可以处理Keras、Pytorch以及Chainer等一系列不同的模型文件并获得ONNX模型。获得ONNX模型之后就可以使用Windows的ML进行加速了,而AMD与微软一起维护了一个Olive的优化方法,这个方法可以将GPU原本DirectML的调用方法改为使用ONNX+Olive,从而大幅度提高性能
部署方法也不难,首先第一步是安装Conda环境,我推荐使用anaconda,miniconda也可以,用anaconda的GUI会更方便一些。打开conda的prompt.exe,分步执行下面这些命令,即可完成Olive安装
conda create -n onnx python=3.11
conda activate onnx
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install olive-ai[gpu]
然后需要安装一个git,这个熟悉代码的朋友应该都知道,我这里就不具体讲述怎么安装了,安装之后重启,然后继续进入conda中onnx环境的prompt.exe,考虑到大部分网友都在本地,所以比官方教程多了换源的步骤
git config --global url."https://hub.nuaa.cf/".insteadOf "https://github.com/"
cd stable-diffusion-webui-directml
git submodule update --init --recursive
venvScriptsactivate
pip install httpx==0.24.1
webui.bat --onnx --backend directml --precision full --no-half
接下来就进入的是带有onnx的Stable Diffusion,在Olive选项卡中选择Optimizing model with Olive即可获取一个经过优化的模型,在最上方的选项卡中选择这个模型,即可加速AI绘画过程了
性能对比
经过测试,这样的方法能把AI绘画的速度提升到原来的三倍左右,但是仍然不是完全体。使用512x512的大小进行测试,使用DPM++ SDE Karras采样方法,可以看到,在9月的驱动中,直接使用DirectML的话只有1.11次迭代这样的速度,也就是画图一张图20次迭代需要18s左右,如果使用新的12.1驱动,DirectML的性能暴涨到了3.58,画图仅需要不到6s,有超过3倍的提升。如果进一步使用Olive提升速度,则能达到10.71,2s一张出图速度已经非常快了
但这仍然不是AMD深度学习的极限,ROCm目前可以做到完全释放显卡的性能,在简单的深度学习开发上基本能和CUDA平起平坐,也是我最为推荐的一种方式,下面一个章节我来详细介绍一下如何安装部署一个基于ROCm的深度学习环境,并且实现stable diffusion
P1017287aga.png
4、Linux AMD ROCm部署
随着AMD不懈努力,AMD的ROCm on Linux终于形成了一个还不错的环境,是目前仅次于CUDA的一种深度学习API了。而且ROCm在Pytorch以及Keras中的使用方法仍然呼做cuda,所以很多代码是不用更改就能换成ROCm来使用的。而且ROCm有自己的amdgpu-dkms管理,安装上比起一言不合就not found 的cuda要稳定不少,所以我个人是非常推荐目前有A卡的朋友在做开发的过程中使用ROCm作为CUDA的平替
ROCm的部署过程也不复杂,我这里就手把手的来教大家用一下。因为7000系显卡是最新支持的,AMD把这些显卡的应用内核版本限制到了22.04的Linux上以便uptodate,所以首先我们需要准备的是Ubuntu22.04.3版本的系统,可以直接官网下载,具体安装过程我就不赘述了,网上的教程已经非常丰富
开机第一步,使用apt命令对源以及包进行一次更新,然后确认内核版本是否为ROCm所支持的(目前LTS版本是一定支持的,这一步可以省略),然后安装一些一定会用到的应用,比如curl git 和vim这些
sudo apt update
sudo apt install curl vim ffmpeg gfortran libsrdc++-12-dev cockpit openssh-server
uname -a (检查版本用)
P1017287aga1.png
按照AMD官方的指引一步一步地安装ROCm,一般来说使用AMDgpudkms是最方便的安装方法,我这里推荐使用5.7版本的ROCm,使用官方的dkms来安装管理这个系统。分步执行下面这些命令,即可安装ROCm。这些包非常大,所以建议耐心等待或者使用更流畅的网络
sudo apt install ./amdgpu-install_5.7.50701-1_all.deb
sudo amdgpu-install --usecase=hiplibsdk,rocm
sudo usermod -aG video $USER
sudo usermod -aG render $USER
sudo reboot (重启之后才能看到rocm安装好没有)
P1017287aga2.png

P1017287aga3.png
重启之后,再次打开terminal,就能使用rocminfo命令以及rocm-smi对硬件进行监测了。可以看到ROCM支持的设备一共有三个,分别是CPU、79TXT和核显
rocminfo
watch -n .5 rocm-smi
P1017287aga4.png
P1017287aga5.png

P1017287aga6.png
下一步需要安装miniconda或者anaconda,这个我就不细说了,网上教程非常多。安装之后重启terminal,然后对conda进行换源,并且创建一个针对ROCm的新环境,我这里命名为ROCm57,大家可以自行更改。随后,进入这个环境,更换pip的源,安装深度学习所需要的torch包,这个包也是Stable Diffusion所需要的。有两种方案,一种是安装稳定版的,一种是安装preview版的,我使用的是preview版,也是可以自行选择其中之一
conda create -n rocm57 python=3.11
conda activate rocm57
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
(安装稳定版)pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6
(或者安装预览版)pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm5.7
P1017287aga7.png
到此为止,这个环境就已经可以使用torch对代码进行调试开发了,rocm的呼唤方法和cuda是一样的,不用特意修改代码
需要Stable diffusion的话,下面就可以使用git clone对Stable Diffusion进行下载,用pip安装依赖。安装好之后就能进行试运行了,试运行的目的是为了检查代码是否能跑通,否则用bash是跑不起来的
git config --global url."https://hub.nuaa.cf/".insteadOf "https://github.com/"
cd stable-diffusion-webui
pip install -r requirements.txt
HF_ENDPOINT=https://hf-mirror.com python launch.py --listen --autolaunch
可以看到这里有一个module错误,这个错误是因为basicSR年久失修没有跟上torch版本导致的,所以我们需要根据自己环境地址,对这个文件进行修改
P1017287aga8.png
使用vim命令修改文件,改成如下的格式
sudo vim ~/miniconda3/envs/rocm57/lib/python3.11/site-packages/basicsr/data/degradations.py
P1017287aga9.png
下面继续进行测试,一般不会出现报错了,如有报错可以在评论区交流。但是如果网络不佳会出现如下这种下载不了与训练模型的情况,这个情况是非常好解决的,目前网络中SD的预训练模型很多,下载一个喜欢的放一个进去就行,~/stable-diffusion-webui/models/Stable-diffusion/,如果之前操作了win上的整合包,那么要做的就是直接把整个models文件复制过去!非常方便快捷
P1017287agaa.png
下面就能启动模型画图了,我这里提供一个便捷的启动脚本和命令。其中有一些需要自己修改,比如HSAversion,你的显卡是7000系的,就用11.0.0,如果是上一代或者上上代就用10.3.0
cat < ~/stable-diffusion-webui/ezlaunch.sh
#!/bin/sh
# select version according to your GPU: RX7000s use 11.0.0; RX6000s5000s use 10.3.0
export HSA_OVERRIDE_GFX_VERSION=11.0.0
# select HIP according to your GPU node: GPU:0, iGPU:1
export HIP_VISIBLE_DEVICES=0
export PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.8,max_split_size_mb:512
python3 launch.py --listen --opt-split-attention-invokeai --enable-insecure-extension-access --no-half-vae
EOF
然后使用下面这个命令在任意时候都能打开SD服务,如果家在模型完成(出现model loaded),打开本地的0.0.0.0:7860就能使用了
conda activate sd && cd ~/stable-diffusion-webui && bash ezlaunch.sh
P1017287agab.png
大模型+高显存+大图片会让迭代速度下降很多,不过在相同的512x512环境下使用SD的话,14iterations/s的速度可以说是吊着windows上任意方式打的
P1017287agae.png

P1017287agaf.png
512x512的图片分辨率不够的话可以提升到1200x1200,迭代速度大概4it/s,只要显存够,那么迭代速度只根据图像大小线性下降,倒也是能接受的
P1017287agag.png

P1017287agah.png
这样的环境是可以进行深度学习开发的,除了系统中指定显卡和版本的语句不一样之外,在pytorch中的使用和CUDA是完全一致的,所以我认为目前ROCm在简单的深度学习开发上,基本可以做到替代CUDA了
5、硬件介绍
本文使用的CPU和主板是AMD R9 7900X+ ProArt X670E-Creator,性能充沛,且内存适配也不错,比如这词用的内存就是7200MHz的,可以直接EXPO ii开机,如果要部署工作站或者开发机的话,也可以选择R9 7900
P1017369.jpg

P1017372.jpg
P1017373.jpg

P1017374.jpg

P1017377.jpg

P1017378.jpg

P1017380.jpg

P1017381.jpg

P1017382.jpg

P1017383.jpg

P1017385.jpg

P1017387.jpg

P1017388.jpg



显卡用的是蓝宝石的超白金RX7900XT,这张显卡是目前蓝宝石最好的7900XT型号,玩游戏基本可以畅玩4K,做深度学习也有20GB的显存,而且价格比79XTX低不少,而且散热不错,个人很喜欢
P1017388a.jpg
P1017388a0.jpg
P1017388b.jpg
P1017388c.jpg
P1017388d.jpg
P1017388e.jpg
内存和硬盘是金士顿的RENEGADE 7200MHz 16x2和KC30002T,最近硬盘即将涨价,需要买硬盘的朋友得赶紧了。金士顿的高频灯条RENEGADE造型做得确实非常不错,灯光也可以同步,频率高而且稳定,在X670E上也能直接EXPO开机,我觉得是目前比较值得买的高频DDR5内存
P1017391.jpg
P1017391a.jpg
P1017391c.jpg
P1017391d.jpg
P1017391f.jpg
P1017391g.jpg
P1017391h.jpg
P1017391i.jpg
P1017391k.jpg
P1017391l.jpg
P1017391m.jpg
P1017393.jpg
P1017394.jpg
P1017395.jpg
P1017396.jpg

电源是海韵的新Focus GX1000,在经过多次改良之后,海运的新版Focus不仅标准符合了ATX3.0标准,而且也支持12VHPWR接口,面对新的显卡也毫无压力
P1017399.jpg
P1017403.jpg
P1017407.jpg
P1017412.jpg
P1017420.jpg
纯白色的造型并且还送一套压纹线,直接免去了定制线的需求,而且这个线还挺软,走线也没什么压力,用起来很舒服
P1017426.jpg
P1017429.jpg

总结
很多朋友都觉得买了AMD就和深度学习绝缘了,其实并不然,AMD现在不仅在Linux上有ROCm,在Win上使用Olive加速之后,进行模型推理也并不慢。而AI绘画这个原本只有顶级显卡才能跑的项目,现在经过层层优化,也能轻松部署在家用显卡上了。对AI绘画感兴趣的朋友可以赶紧用手上的显卡尝试一下,毕竟现在AMD显卡是真不贵,对比一下某禁售的4090,就只要三分之一的价格就能买到次旗舰我是真觉得不亏
RX7900XT这张显卡我是比较推荐的,一来没有旗舰卡那种维持门面的价格,也不用把频率调校得离谱高,二来这卡用的又是旗舰散热,让显卡的散热爽到飞起,完全不用担心热量压力。而且性能和显存完全够用,进可畅爽玩AI,退可畅爽打游戏,非常理想
感谢大家围观!



评分

参与人数 7邪恶指数 +290 门户文章 +1 收起 理由
ilas + 200
Kevin_Aidaren + 10
silverse + 10
陈靖仇 + 20
xuran007 + 30
幽幽子 + 20
nApoleon + 1

查看全部评分

发表于 2023-12-15 23:46 来自手机 | 显示全部楼层
不错。。。。
发表于 2023-12-16 00:07 | 显示全部楼层
使劲超。。。。。。。。。。。。。
发表于 2023-12-16 09:56 | 显示全部楼层
我学会了,快删~不然AMD显卡也要涨价了
发表于 2023-12-16 11:17 | 显示全部楼层
我也一直非常信赖海韵的电源!
发表于 2023-12-16 11:36 | 显示全部楼层
看着方案不错哦
发表于 2023-12-16 11:47 | 显示全部楼层
这家伙好棒哦。
发表于 2023-12-16 11:53 来自手机 | 显示全部楼层
很棒啊这个
 楼主| 发表于 2023-12-16 13:01 | 显示全部楼层
Oxyer 发表于 2023-12-16 09:56
我学会了,快删~不然AMD显卡也要涨价了

我再不刪美国要禁售a卡了!
发表于 2023-12-16 13:20 | 显示全部楼层
这个主板相当贵。。。。上这主板是为了什么呢?雷电口吗
发表于 2023-12-16 13:33 | 显示全部楼层
AMD显卡也要涨价了
发表于 2023-12-16 13:34 | 显示全部楼层
A卡20G显存的最佳分辨率是多少?
即不使用任何内存,完全在显存范围内能生成多大的图片
共享了内存的话速度会慢很多
以前A卡试过用ML,显存的效率惨不忍睹
N卡用Hires,8GB大概1k分辨率的图片,12GB 1.5k,16GB 2k
发表于 2023-12-16 13:49 | 显示全部楼层
这贴太高端了,我都看不太懂……
发表于 2023-12-16 14:03 来自手机 | 显示全部楼层
感谢分享!技术贴!
发表于 2023-12-16 14:04 来自手机 | 显示全部楼层
陈靖仇 发表于 2023-12-16 13:49
这贴太高端了,我都看不太懂……

玩硬件的表示很牛逼
 楼主| 发表于 2023-12-16 14:35 | 显示全部楼层
vindemiarrix 发表于 2023-12-16 13:34
A卡20G显存的最佳分辨率是多少?
即不使用任何内存,完全在显存范围内能生成多大的图片
共享了内存的话速度 ...

试过2400x1600的,仍然是线性的,应该没爆显存,最大不知道多少
发表于 2023-12-16 14:50 | 显示全部楼层
本来想进来看一眼就走,结果看到某些图片愣是没出去……
发表于 2023-12-16 14:53 | 显示全部楼层
看着替代方案不错,看后面优化及相关软件跟进了
发表于 2023-12-16 15:55 | 显示全部楼层
6950XT可以用不,
发表于 2023-12-16 16:16 | 显示全部楼层
只能说先收藏了,太棒
 楼主| 发表于 2023-12-16 18:31 | 显示全部楼层
qbgu 发表于 2023-12-16 15:55
6950XT可以用不,

可以,改脚本就好
发表于 2023-12-16 19:59 | 显示全部楼层
手指多少还是有些问题....囧
发表于 2023-12-16 20:20 | 显示全部楼层
学习了,7900GRE能用起来吗?
发表于 2023-12-16 21:53 | 显示全部楼层
机器学习平台路过。。。没想到有生之年能在CHH看到技术贴,哈哈哈
发表于 2023-12-16 22:27 | 显示全部楼层
技术贴,知识浅薄,真心没太看懂
发表于 2023-12-17 08:36 | 显示全部楼层
太高端,先收藏慢慢看
发表于 2023-12-17 10:36 | 显示全部楼层
很有用的帖子!
发表于 2023-12-17 11:14 | 显示全部楼层
感谢,收藏学习。
发表于 2023-12-17 12:47 | 显示全部楼层
头像很牛啊
发表于 2023-12-17 12:52 | 显示全部楼层
ai的手。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-12-22 19:33 , Processed in 0.029439 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表