T5,全称 Text-To-Text Transfer Transformer,是由 Google 在 2019 年提出的一个具有里程碑意义的自然语言处理模型。它的核心思想是 “万物皆可文本到文本”。 T5 最革命性的贡献在于它将几乎所有 NLP 任务都重新定义为一个统一的 文本到文本 的格式。 输入 是一段文本。 输出 也是一段文本。 这意味着,无论什么任务,模型都使用相同的架构、相同的损失函数和相同的训练过程。
本次工作的核心目标是将具有里程碑意义的统一自然语言处理模型T5成功迁移到国产昇腾NPU平台,并验证其文本到文本的生成能力。这标志着NPU生态向大规模语言模型领域的重要拓展。 其背景源于以下几个关键需求: NLP技术国产化需求:自然语言处理是AI的核心领域,T5作为将多种NLP任务统一到文本生成框架的典范,其成功迁移对构建全国产化NLP技术栈具有战略意义。 统一架构模型的代表性:T5的"万物皆文本"理念对后续大语言模型(如GPT、T0等)产生了深远影响。验证T5在NPU上的运行,是为后续更复杂LLM迁移铺平道路的关键一步。 生成式AI基础设施验证:T5的文本生成能力代表了典型的自回归生成任务,成功运行T5意味着NPU具备了处理现代生成式AI工作负载的基本能力。 将T5这样的Transformer架构文本生成模型迁移到NPU,面临独特的挑战: 动态计算图与自回归生成的复杂性:T5在generate方法中进行自回归解码,每一步生成都依赖前一步的输出,形成动态计算图。这对NPU的图编译和优化策略提出了比静态前向传播更高的要求。 注意力机制的大规模计算:T5模型中的自注意力机制随着序列长度增加计算量平方级增长,需要NPU提供高效的注意力计算支持,特别是在处理长文本时。 复杂的输入输出处理流水线:T5使用特定的分词器(Tokenizer)进行文本预处理和后处理,需要确保整个transformers库的流水线与NPU环境兼容。 模型与数据的一致性设备放置:必须确保模型参数、输入张量、注意力掩码等所有计算元素都正确放置在NPU设备上,任何细微的设备不匹配都会导致运行时错误。 依赖环境的精确配置:需要精确匹配PyTorch、transformers和torch-npu的版本兼容性,特别是对于beam search等复杂生成策略的支持。
镜像下载:
from atomgit_hub import snapshot_download
snapshot_download("Ascend-SACT/tacotron2", local_dir = './download')创建镜像并安装驱动
conda create -n t5 python=3.9
conda activate t5
source /usr/local/Ascend/ascend-toolkit/set_env.sh
pip install transformers torch
pip install psutil numpy==1.26.4 attrs==22.2.0 attr scipy decorator国内hf镜像源
unset HF_HOME
export HF_HOME=/home/models
export HF_ENDPOINT=https://hf-mirror.comimport torch
from transformers import T5Tokenizer, T5ForConditionalGeneration
def t5_inference(input_text, model_name="t5-small"):
device = "npu" if torch.npu.is_available() else "cpu"
print(f"Using device: {device}")
model = T5ForConditionalGeneration.from_pretrained(model_name).to(device)
tokenizer = T5Tokenizer.from_pretrained(model_name)
inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)
inputs = {key: value.to(device) for key, value in inputs.items()}
print(f"Model device: {model.device}")
for key, value in inputs.items():
print(f"{key} device: {value.device}")
outputs = model.generate(inputs["input_ids"], max_length=50, num_beams=4, early_stopping=True)
output_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return output_text
if __name__ == "__main__":
input_text = "translate English to French: How are you?"
translated_text = t5_inference(input_text)
print(f"Input: {input_text}")
print(f"Output: {translated_text}")正确将英文"How are you?"翻译为法文,证明了模型在NPU上的功能完整性
本次迁移验证的成功,在技术突破和生态建设上具有深远意义: 一、 技术价值:攻克了文本生成模型的关键技术障碍 自回归生成验证:成功运行T5的generate方法,证实了昇腾NPU能够有效处理复杂的动态计算图和自回归文本生成这一核心LLM能力。 完整流水线验证:从文本输入→分词→模型推理→文本解码的完整NLP流水线在NPU上成功运行,证明了transformers库与NPU的良好兼容性。 二、 应用价值:为NLP应用国产化奠定基础 多任务统一框架的可行性:T5的成功迁移意味着基于同一模型架构的翻译、摘要、问答、分类等多种NLP任务都可以在NPU上运行,大大拓展了NPU在NLP领域的应用场景。 为企业NLP应用提供国产化路径:为需要部署文本生成、智能客服、内容创作等NLP应用的企业提供了基于国产硬件的技术选项,支持NLP技术的自主可控。 证明NPU在生成式AI领域的通用性:继视觉模型、语音模型之后,T5的成功进一步证明了昇腾NPU在多模态生成式AI领域的通用计算能力。