Llama-Factory 能否在国产化硬件上跑起来?信创适配的实战解析

在政务云系统要求全面替换国外GPU、金融行业亟需构建自主可控大模型训练能力的今天,一个现实问题摆在面前:我们手里的开源大模型工具链,真能在昇腾910、海光DCU这些国产芯片上稳定运行吗?

最近某省级政务AI平台项目中,团队尝试用LLama-Factory微调行业专用模型时就遇到了典型困境——服务器换成了搭载鲲鹏CPU和昇腾NPU的国产机型,原本在NVIDIA A100上流畅运行的QLoRA流程突然报错不断。这背后折射出的,正是当前信创落地中最关键的一环:从“能用”到“好用”的跨越,究竟卡在哪?

要回答这个问题,得先搞清楚LLama-Factory到底是个什么样的存在。

它本质上是一个“大模型微调流水线打包器”。你不再需要手动写数据加载、梯度累积、LoRA权重注入这些重复代码,只需通过Web界面点选或修改几行YAML配置,就能启动一次完整的训练任务。底层依然是熟悉的PyTorch + Hugging Face生态,但它把全参数微调、LoRA、QLoRA这些复杂技术封装成了可选项开关。

比如下面这段Python调用:

from llmtuner import run_exp

run_exp(
    model_name_or_path="Qwen/Qwen-7B",
    finetuning_type="qlora",
    quantization_bit=4,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    fp16=True
)

短短几行就定义了一个典型的低资源微调场景:基于通义千问7B模型,使用4-bit量化加载以节省显存,配合梯度累积模拟大batch训练。这种抽象层级极大降低了使用门槛——哪怕是对Transformer结构一知半解的工程师,也能快速上手。

但当这套逻辑搬到国产平台时,真正的挑战才开始浮现。

最核心的问题始终是那个老生常谈却又绕不开的命题:PyTorch能不能调度国产NPU? 毕竟整个框架的生命线都系于这条底层通路。目前来看,华为昇腾走出了相对成熟的路径。通过CANN(Compute Architecture for Neural Networks)软件栈提供的torch_npu插件,开发者可以用几乎无感的方式将.to('cuda')替换为.to('npu')。这意味着大量现有代码无需重写即可迁移。

import torch

device = "npu" if torch.npu.is_available() else "cpu"
model.to(device)  # 接口兼容,行为一致

听起来很理想,实际操作却没那么简单。我们在Atlas 800训练服务器上的实测发现,虽然基础张量运算可以正常执行,但某些高级算子(如FlashAttention)在NPU后端仍处于实验阶段,必须降级使用常规注意力机制。更麻烦的是分布式训练——尽管支持DDP模式,但集合通信依赖HCCL(HUAWEI Collective Communication Library),与NCCL的行为差异导致DeepSpeed某些优化策略失效。

相比之下,海光DCU的处境更为微妙。它的架构设计本就参考了GPGPU理念,并宣称兼容ROCm生态。理论上只要编译一个支持ROCm的PyTorch版本,就能复用AMD那套工具链。然而现实是,驱动层对特定指令集的支持尚不完善,我们在某款海光服务器上编译PyTorch时遭遇了汇编级兼容性错误,最终不得不回退到FP32精度才能完成训练。

至于寒武纪MLU,现状则更加清晰:强于推理,弱于训练。MagicMind引擎在模型部署环节表现出色,但训练侧缺乏完整的自动微分支持,像LoRA这种需要动态插入可训练参数的技术难以实现。换句话说,如果你的目标只是运行已训练好的模型,MLU完全胜任;但若想做定制化微调,现阶段仍需借助其他平台完成训练后再导出部署。

那么回到最初的问题——LLama-Factory究竟能不能在国产平台上跑起来?答案是:能,但有条件

在昇腾体系下,已有成功案例验证其可在8卡Ascend 910集群上完成Qwen-7B的LoRA微调任务。关键在于三点:
1. 使用官方发布的torch_npu包而非自行编译;
2. 关闭FlashAttention等未适配特性;
3. 修改DeepSpeed配置文件,指定NPU专用通信后端。

而在系统架构层面,推荐采用容器化部署方案。将操作系统(如统信UOS)、驱动、PyTorch插件、LLama-Factory及其依赖打包进Docker镜像,既能避免复杂的环境冲突,也便于在多台国产服务器间快速复制部署。

# 启动命令示例
python src/webui.py --port 7860 --host 0.0.0.0 --device npu

一旦服务启动,用户便可从任意终端浏览器访问WebUI界面,选择本地模型路径、配置QLoRA参数、上传自有数据集并启动训练。整个过程无需编写任何代码,特别适合那些缺乏深度学习背景但急需定制化模型的业务部门。

当然,这条路还远未达到“开箱即用”的程度。我们总结了几条实战经验:
- 显存管理要更精细:国产NPU的显存调度策略与CUDA不同,建议将per_device_batch_size设得更保守些,配合更大的gradient_accumulation_steps来平衡吞吐;
- 优先使用内部模型仓库:信创环境中通常禁用外网直连HuggingFace Hub,应提前将所需模型下载至内网NAS并通过model_name_or_path指向本地路径;
- 监控指标要看懂差异:NPU利用率、内存带宽等指标的含义与GPU有所不同,不能简单套用原有调优经验。

有意思的是,正是这些限制反过来推动了一些积极变化。例如某银行项目组因无法使用FlashAttention,转而采用分块处理长文本的方法,意外提升了对金融合同类长文档的理解效果。这也提醒我们:技术适配不仅是被动兼容,也可能催生新的优化思路。

展望未来,随着更多国产芯片厂商加大对PyTorch生态的投入,以及LLama-Factory社区逐步增加对NPU后端的原生支持(如内置设备检测、自动配置推荐),国产化平台不仅会“跑得动”大模型,更有望实现“跑得稳”、“跑得快”。

毕竟,真正的自主可控,从来不是简单地替换零件,而是建立起一套完整、可持续演进的技术闭环。当我们在国产服务器上点击“开始训练”按钮,看到loss曲线平稳下降时,那不仅仅是一次成功的任务执行,更是中国AI基础设施韧性的一次真实丈量。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐