You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配AMD RX6700xt时Bark项目出现RuntimeError问题求助

问题概述

正在将基于PyTorch CUDA的Bark项目适配DirectML以使用AMD RX6700XT GPU时,遇到RuntimeError: Cannot set version_counter for inference tensor错误。按官方文档将所有.to(device)替换为.to(dml)后,GPU能启动但随即报错;尝试torch-mlir实现加速时Windows环境仅调用CPU;将inference_mode()改为inference_mode(mode=False)后,出现aten::tril.out算子不支持的警告,后续又触发新的RuntimeError。使用Python版本为3.9.16。

解决方案尝试与修复

1. 解决Cannot set version_counter for inference tensor错误

该错误源于DirectML与PyTorch inference_mode的兼容性问题,调整推理模式并规范设备迁移逻辑即可修复:

  • 先正确初始化DirectML设备:
    import torch_directml
    dml = torch_directml.device()
    
  • 不要全局零散替换.to(device),而是在模型加载完成后一次性将整个模型迁移到DML设备:
    model = model.to(dml)
    
  • 将代码中所有torch.inference_mode()替换为torch.no_grad(),DirectML对inference_mode的支持存在局限性,no_grad()能更好地兼容。

2. 处理aten::tril.out算子不支持警告

DirectML暂不支持该算子,会自动回退到CPU运行,手动生成因果掩码可规避此问题:

  • 在model.py的注意力层中,替换原scaled_dot_product_attention调用:
    # 原代码
    # y = torch.nn.functional.scaled_dot_product_attention(q, k, v, dropout_p=self.dropout, is_causal=is_causal)
    
    # 修改后的代码
    batch_size, seq_len, _ = q.size()
    # 手动生成因果掩码并迁移到DML设备
    causal_mask = torch.tril(torch.ones(seq_len, seq_len, device=dml)).view(1, 1, seq_len, seq_len)
    y = torch.nn.functional.scaled_dot_product_attention(
        q, k, v, dropout_p=self.dropout, attn_mask=causal_mask
    )
    

3. 修复torch.hstack触发的RuntimeError

此错误多因拼接张量的设备不一致或形状不兼容导致:

  • 检查generation.py第633行的x_in = torch.hstack(部分,确保所有参与拼接的张量都已迁移到DML设备:
    # 确保拼接前所有张量都在DML设备上
    tensor_a = tensor_a.to(dml)
    tensor_b = tensor_b.to(dml)
    x_in = torch.hstack([tensor_a, tensor_b])
    
  • 同时验证张量形状,确保它们的维度数一致,且除拼接维度外的其他维度大小匹配。

4. torch-mlir相关建议

Windows环境下torch-mlir对AMD GPU的支持尚不成熟,配置复杂且性能表现不稳定,建议优先完成DirectML的适配工作,暂时放弃torch-mlir的尝试。

内容的提问来源于stack exchange,提问作者Milor123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:44