1. 为什么选择Manjaro和AMD RX 5700如果你和我一样是个喜欢折腾、追求性价比的AI爱好者那么这套组合绝对值得你花时间研究。几年前当我在N卡和A卡之间纠结时最终选择了AMD RX 5700原因很简单同样的算力价格几乎便宜一半。但说实话这条路一开始并不好走尤其是在Linux系统上搭建深度学习环境踩过的坑能写满一个笔记本。Manjaro这个发行版可以说是Arch Linux的“亲民版”。它继承了Arch的滚动更新和庞大的软件库AUR但安装和配置过程友好了不止一个档次。对于深度学习开发来说这意味着你能更快地用上最新的驱动和软件包不用像在Ubuntu上那样苦苦等待PPA更新。我当初从Ubuntu转到Manjaro最大的感受就是“自由”几乎所有开发需要的工具都能通过pacman或yay一键搞定省去了大量编译依赖的麻烦。而我们的主角AMD RX 5700基于RDNA架构拥有36个计算单元和8GB GDDR6显存。从纸面参数看它的FP32性能足以应对大多数中小规模的模型训练和推理任务。但它的“灵魂”在于ROCm——AMD为高性能计算和AI打造的开放软件平台。你可以把它理解为AMD版的CUDA。虽然生态上CUDA依然强势但ROCm这几年的进步有目共睹对PyTorch等主流框架的支持也越来越好。最关键的是它开源、免费没有使用限制。所以这套组合的核心优势就是极高的性价比和完全开源可控的软件栈。你不用为昂贵的专业计算卡付费也不用受限于闭源驱动的黑箱。当然天下没有免费的午餐这份自由需要你付出一些学习和配置的时间。接下来我就带你一步步走通这条路把我趟过的雷都给你标出来。2. 系统准备与ROCm安装万事开头难打好基础是关键。在开始安装ROCm之前我们必须确保Manjaro系统本身处在一个“健康”的状态。2.1 系统更新与内核选择首先打开你的终端进行一次全面的系统更新。这步很重要因为滚动更新的系统需要保持组件同步。sudo pacman -Syu更新过程中可能会提示你选择要安装的软件包通常直接回车确认即可。更新完成后强烈建议重启一次系统以确保所有更新生效尤其是内核更新。接下来是内核。ROCm对Linux内核版本有一定要求太旧或太新的内核都可能引发兼容性问题。经过我的实测对于当前主流的Manjaro使用Linux 6.1 LTS或6.6版本的内核是比较稳妥的选择。Manjaro的内核管理器非常方便你可以在“系统设置”里找到它或者用命令安装sudo pacman -S linux61 linux61-headers # 安装6.1 LTS内核安装后在GRUB启动菜单里选择新内核进入系统。你可以用uname -r命令确认当前运行的内核版本。2.2 安装ROCm核心组件Manjaro的官方仓库里已经包含了ROCm这让我们省去了手动添加仓库和解决依赖的麻烦。安装命令非常简单sudo pacman -S rocm-hip-sdk rocm-opencl-sdk这个命令会安装ROCm的核心SDK包括HIP运行时、编译器以及OpenCL的支持。安装过程可能会比较长因为它会拉取不少依赖包。这里有个小细节rocm-hip-sdk这个包是ROCm的核心而rocm-opencl-sdk则包含了OpenCL的头文件和库。虽然我们的深度学习训练主要用HIP对应CUDA但有些工具或库比如后面会提到的Katago守门员可能需要OpenCL所以一并装上更省心。安装完成后我们需要将当前用户添加到render和video用户组这样才能让我们的程序有权限访问GPU设备。sudo usermod -a -G render,video $USER注意修改用户组后你需要完全注销当前桌面会话然后重新登录这个改动才会生效。仅仅重启终端是不够的。2.3 验证ROCm安装重新登录后我们来验证一下ROCm是否安装成功。首先检查HIP是否能识别到你的RX 5700。hipinfo如果安装正确你应该能看到类似下面的输出其中列出了你的GPU设备信息比如我这里的“gfx1012”这是RX 5700的设备代号。... Device 0: gfx1012 ...然后我们用一个更直观的命令来测试计算能力/opt/rocm/bin/rocminfo这个命令会输出非常详细的ROCm系统信息。你主要关注两点一是确认有“Agent”信息显示你的GPU比如“Name: gfx1012”二是看“ISA”信息里是否包含了“gfx1010:xnack-”或“gfx1012”。RX 5700的架构代号是gfx1012但ROCm通常使用一个更通用的gfx1010来指代这一系列显卡。这个细节非常重要后面配置环境变量时会用到。最后测试一下OpenCL是否就绪clinfo如果看到大量关于平台和设备的输出并且其中有你的AMD显卡信息那就说明OpenCL环境也准备好了。3. PyTorch与深度学习环境配置核心平台搭好了现在来安装我们最重要的工具PyTorch。这是最容易出错的一步版本兼容性是最大的敌人。3.1 创建并配置Conda环境我强烈建议使用Conda或Mamba来管理Python环境这样可以完美隔离项目依赖避免把系统Python搞得一团糟。如果你还没安装可以用pacman安装miniconda。sudo pacman -S miniconda安装后初始化一下然后创建一个专用于本项目的环境比如叫rocm_train并指定Python版本。Python 3.9或3.10是目前与ROCm和PyTorch兼容性比较好的选择。conda create -n rocm_train python3.9 -y conda activate rocm_train3.2 安装正确版本的PyTorch这是整个流程中最关键的一步。千万不要直接pip install torch官方PyTorch的稳定版通常只提供CUDA版本我们需要专门为ROCm编译的版本。根据我大量的踩坑经验以及原始文章里提到的血泪教训PyTorch版本不能追求最新。太新的版本如2.0可能与特定版本的ROCm驱动产生诡异的兼容性问题比如那个令人头疼的HSA_STATUS_ERROR_MEMORY_APERTURE_VIOLATION错误。这个错误信息看起来像是内存访问越界实际上很多时候是底层驱动和运行时库的版本不匹配导致的。经过反复测试一个非常稳定的组合是PyTorch 1.13.1 ROCm 5.2。这个组合在RX 5700上工作得非常可靠。使用以下命令安装pip install torch1.13.1rocm5.2 torchvision0.14.1rocm5.2 torchaudio0.13.1rocm5.2 -f https://download.pytorch.org/whl/rocm5.2/torch_stable.html这个命令会从PyTorch官方指定的仓库下载预编译好的ROCm版本轮子文件。安装过程可能需要几分钟。3.3 验证PyTorch能否调用GPU安装完成后启动Python交互环境进行验证import torch print(fPyTorch版本: {torch.__version__}) print(f是否可用ROCm: {torch.cuda.is_available()}) # 注意对于ROCm这个函数名仍然是cuda if torch.cuda.is_available(): print(fGPU设备名称: {torch.cuda.get_device_name(0)}) print(fROCm版本: {torch.version.hip})如果一切正常你会看到torch.cuda.is_available()返回True并且能正确打印出你的RX 5700显卡信息以及HIPROCm的版本号。看到这个输出恭喜你最难的关卡已经过去了4. 关键优化与避坑指南环境能跑起来只是第一步想要稳定、高效地训练还需要进行一些关键的优化和配置。下面这几个点都是我亲身踩坑后总结出的宝贵经验。4.1 解决rocBLAS库文件错误在运行一些复杂的模型时你可能会遇到一个让人困惑的错误提示找不到或无法读取TensileLibrary.dat文件并列出一些其他架构的.dat文件比如gfx900、gfx1030等但偏偏没有gfx1010或gfx1012。这个错误的根源在于ROCm的rocBLAS库使用了一个名为Tensile的后端来优化计算。它会根据检测到的GPU架构gfx1010去/opt/rocm/lib/rocblas/library/目录下寻找对应的库文件。但有时候ROCm的预编译包可能没有包含所有架构的文件或者识别有偏差。解决这个问题有一个“魔法”环境变量HSA_OVERRIDE_GFX_VERSION。它的作用是告诉ROCm运行时将你的GPU伪装成另一个架构。对于RX 5700我们可以将它伪装成架构非常接近的gfx1030这是RX 6000系列部分显卡的架构因为gfx1030的库文件通常是齐全的。方法是在启动你的Python训练脚本前设置这个环境变量HSA_OVERRIDE_GFX_VERSION10.3.0 python your_training_script.py注意这里的10.3.0对应的是gfx1030。这个技巧在实践中非常有效它相当于绕过了架构检测直接使用一个兼容的计算库。原始文章里在命令前加这个变量就是为了解决这个问题。4.2 性能调优与环境变量除了解决错误我们还可以通过设置一些环境变量来榨干RX 5700的性能。设置HIP可见设备如果你有多块显卡可以用这个变量指定使用哪一块。对于单卡用户也可以明确设置以避免歧义。export HIP_VISIBLE_DEVICES0提升内核编译速度PyTorch在首次运行某些操作时会即时编译JITGPU内核。这个过程可能有点慢。我们可以指定一个缓存目录来加速后续的编译。export PYTORCH_HIP_ALLOC_CONFbackend:python # 这个不一定需要但某些情况下有助于内存管理 export TORCH_HIP_CACHE_DIR/tmp/torch_hip_cache # 设置内核缓存目录确保这个目录有写入权限。调整内存分配器对于某些工作负载切换内存分配器可能带来性能提升。ROCm默认使用“托管”内存模式但你也可以尝试export HIP_MEMORY_ALLOCATORsystem # 使用系统分配器这并非总是更好建议在你的具体任务上对比测试一下。4.3 监控GPU状态与温度长时间训练显卡的温度和状态监控很重要。ROCm提供了rocm-smi工具功能类似NVIDIA的nvidia-smi。rocm-smi这个命令会显示每块GPU的利用率、显存占用、功耗和温度。你可以使用watch -n 1 rocm-smi来每秒刷新一次实时监控训练过程。RX 5700的散热设计因品牌而异我建议在长时间满载时核心温度最好控制在80-85摄氏度以下这样更稳定。5. 实战以Katago为例的模型训练理论说再多不如实际跑一个项目。这里我以原始文章中提到的围棋AI“Katago”的训练为例展示一个完整的从环境到启动训练的过程。Katago是一个用C编写的高性能围棋引擎其训练部分支持使用PyTorch和GPU加速。5.1 安装额外的依赖Katago的训练脚本需要一些额外的Python包我们在Conda环境里安装它们conda activate rocm_train pip install numpy psutil requests5.2 获取与配置Katago训练代码从GitHub上克隆Katago的训练仓库这里假设你已有基础Git操作知识git clone https://github.com/lightvector/KataGo.git cd KataGoKatago的编译和运行稍微复杂。首先你需要按照其官方文档编译C核心部分。通常这个过程需要CMake和合适的C编译器。重点在于在编译时如果检测到ROCm它会启用GPU支持。5.3 启动训练并应用优化假设你已经成功编译了Katago并准备好了训练数据和配置文件。启动训练脚本时务必加上我们之前提到的关键环境变量cd KataGo/python HSA_OVERRIDE_GFX_VERSION10.3.0 python3 train.py ../training_configs/train_example.cfg这个命令做了两件事1) 将RX 5700伪装成gfx1030架构避免库文件错误2) 启动Python训练脚本。关于训练参数原始文章的作者提到他用的是“b4c32”可能是4个残差块32个通道的较小网络batch_size8。对于RX 5700的8GB显存来说这是一个比较保守且稳妥的配置可以确保不会因为显存不足OOM而崩溃。你可以根据你的显存占用情况适当调整batch_size或网络大小。训练开始后用rocm-smi监控显存使用确保留有几百MB的余量。5.4 可能遇到的问题与解决思路编译失败确保安装了所有编译依赖如cmake,gcc,rocm-hip-sdk。仔细阅读Katago的编译指南可能需要对CMake参数进行微调以指向正确的ROCm路径。训练速度慢首先确认rocm-smi中GPU利用率是否接近100%。如果利用率低可能是数据加载DataLoader成了瓶颈。可以尝试增加数据加载的线程数num_workers或者使用更快的存储如NVMe SSD。进程意外中止如果训练中途崩溃首先检查系统日志dmesg | tail和训练脚本的输出日志。常见的罪魁祸首仍然是内存访问错误或库不兼容。重申一遍使用HSA_OVERRIDE_GFX_VERSION环境变量和匹配的PyTorch版本1.13.1rocm5.2能解决绝大部分稳定性问题。训练一个强大的围棋AI需要海量的计算资源和时间。作者用RTX 4090训练了7小时迭代了12代我们的RX 5700计算速度大约是其1/4到1/3可能需要更长时间。但这正是乐趣所在——用平民硬件一步步见证一个AI从零开始学习围棋。当它第一次下出一步让你惊讶的棋时那种成就感是无与伦比的。这套Manjaro RX 5700 ROCm的方案经过我近一年的使用已经非常稳定可靠。它可能没有NVIDIA生态那种“开箱即用”的便利但每一步的配置都让你对底层有更深的了解。最重要的是它证明了在Linux世界里用AMD显卡进行深度学习研究和学习是一条完全可行且充满乐趣的道路。