AMD Radeon RX7900XTX 双显卡/多显卡本地大语言模型生成内容乱码问题和解决方案(使用IOMMU=PT)

在Ubuntu 22.04系统中,我安装了当前最新的AMD AI平台ROCm6.1.1,并使用了两张显存容量为24GiB的RX 7900XTX显卡,在本地跑LLMs大语言模型推理任务。

我选择了GitHub开源的两种方式在AMD显卡上部署大语言模型,分别如下:

  • ollama
  • text-generation-webui

在装入双7900XTX前,我首先测试了单张7900XTX运行ollama或text-gen-webui进行文字生成的情况。从huggingface下载的llama2-7b-chat-hf/llama2-13b/qwen/chatglm3等模型都可以顺利调用显卡的计算资源并且快速生成文字内容。生成的文字内容清晰可读符合逻辑。

接着,我装入两张7900XTX,开机并使用amd-smi和rocminfo等工具查看两张显卡的待机情况,如图:

 输入rocminfo指令,可以看到ROCm6.1.1已经正常识别到两个Agent,代表两块7900XTX

输入amd-smi指令,查看两块卡的当前状态

显卡的准备工作完成,接下来分别在ollama和text-gen-webui运行llama2-13b模型,发现生成的内容全是乱码,如图片所示

text-gen-webui:llama2-13b-chat-hf

ollama:llama2-13b

解决方案

关闭IOMMU(Input/Output Memory Management Unit)或将IOMMU设置为Passthrough模式可解决该问题,具体方法如下:

用gedit编辑器打开grub

添加iommu=pt以指定passthrough模式

更新grub

重启

重启后,再次启用ollama或text-gen-webui进行大语言模型生成文字,一切正常

ollama:llama2-70b

text-gen-webui:llama2-13b

### Llama 大模型输出乱码的原因与解决方案 #### 一、硬件配置中的潜在问题使用 AMD Radeon RX7900XTX 进行双显卡多显卡训练时,如果未正确启用 IOMMU=PT 配置,则可能导致 GPU 访问内存地址映射出现问题,从而引发生成内容乱码现象[^1]。因此,在启动系统前需确认 BIOS 设置中已开启虚拟化功能,并通过内核参数设置 `iommu=pt` 来确保设备直通模式正常工作。 此外,还需验证驱动程序版本是否兼容当前使用的框架环境以及 CUDA 工具链版本是否匹配目标平台需求。任何环节上的不一致都可能间接影响到最终推理结果的质量。 #### 二、软件层面的因素考量 即使解决了上述提到的硬件相关障碍之后仍然存在乱码情况的话,那么很可能是由于所加载的基础预训练权重本身存在问题或者是针对特定语言的支持程度不足所致[^2]。例如原生 llama 系列虽然具备强大的泛化能力但在处理某些复杂场景下的中文表达时常表现出一定局限性。 为此可以尝试切换至专门面向亚洲地区优化过的变体比如[Llama-3.1-8B 中文 DPO 模型],该版本经过大量高质量语料库微调后能够显著提升对中国本土文化背景知识的理解水平进而减少错误率发生几率. 同时也要注意检查输入序列编码方式是否符合预期标准因为不同的 tokenizer 实现之间可能存在细微差异如果不小心混用了两种不同风格就很容易造成解析失败进而表现为不可读字符串形式呈现给用户端看到的就是所谓的"乱码". 最后别忘了定期更新依赖包列表保持最新状态以便及时获取官方修复补丁来应对新出现的各种边界条件异常状况. ```python # 示例代码片段展示如何正确初始化并测试一个基于PyTorch实现的大规模深度学习项目 import torch from transformers import AutoTokenizer, AutoModelForCausalLM device = 'cuda' if torch.cuda.is_available() else 'cpu' model_name_or_path = "path/to/fine-tuned-model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path).to(device) input_text = "你好世界!" inputs = tokenizer(input_text, return_tensors="pt").to(device) outputs = model.generate(**inputs,max_new_tokens=50) print(tokenizer.decode(outputs[0])) ``` 以上脚本可以帮助开发者快速定位是否存在因tokenization过程不当而引起的显示失真等问题。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值