MindSpore Transformers是昇思MindSpore生态下的大模型全流程开发套件,整合了Transformer架构核心能力与MindSpore高效训练特性,支持主流LLM(如Qwen、Llama、DeepSeek)的预训练、微调、推理全流程,适配昇腾NPU、CPU、GPU等多硬件平台,兼具高性能与易用性。介绍LLM预训练与微调的核心逻辑,重点呈现基于MindSpore Transformers的实操流程,搭配完整可执行代码,助力开发者快速上手大模型预训练与微调实践。
一、核心概念与框架优势
LLM预训练是基于海量无标注文本,训练模型学习语言规律、知识语义的过程,为模型提供通用语言能力;微调则是在预训练模型基础上,使用特定任务数据集(如指令集、行业数据)微调参数,让模型适配具体场景。MindSpore Transformers针对LLM训练优化了三大核心优势:一是全流程适配,覆盖预训练、微调、评测、部署全链路;二是高效并行,支持张量并行、流水线并行,适配多卡分布式训练;三是多模型兼容,已支持Qwen3、DeepSeek-V3等主流LLM,可直接加载Hugging Face权重。
二、环境搭建(适配多硬件平台)
首先完成MindSpore Transformers环境搭建,支持昇腾NPU、GPU、CPU多场景,代码如下,适配Python3.8,兼顾新手友好性与企业级部署需求:
# 1. 创建虚拟环境并激活
conda create -n ms-transformers python=3.8
conda activate ms-transformers
# 2. 安装核心依赖(根据硬件选择对应版本)
# 昇腾NPU版本(适配Ascend 910B/310B)
pip install mindspore-npu==2.3.0 mindspore-transformers==1.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# GPU版本
# pip install mindspore-gpu==2.3.0 mindspore-transformers==1.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# CPU版本(新手入门)
# pip install mindspore-cpu==2.3.0 mindspore-transformers==1.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 3. 安装辅助依赖
pip install datasets sentencepiece accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple
# 4. 验证环境
python -c "import mindspore; import mindspore_transformers; print('环境搭建成功')"
三、LLM预训练实践(以Qwen3-8B为例)
MindSpore Transformers提供预训练配置模板,支持稠密模型与MOE模型预训练,可通过修改配置文件快速启动训练,核心代码如下,适配多卡分布式训练场景:
# 1. 下载预训练模板与模型配置
git clone https://gitee.com/mindspore/mindformers.git
cd mindformers
# 复制稠密模型预训练模板
cp configs/llm/llm_pretrain_dense_template.yaml qwen3_8b_pretrain.yaml
# 2. 修改配置文件(关键参数,适配Qwen3-8B)
sed -i 's#pretrained_model_dir: ""#pretrained_model_dir: "./qwen3-8b"#g' qwen3_8b_pretrain.yaml
sed -i 's#train_dataset: ""#train_dataset: "./pretrain_data"#g' qwen3_8b_pretrain.yaml
sed -i 's#model_type: "gpt2"#model_type: "qwen3"#g' qwen3_8b_pretrain.yaml
sed -i 's#micro_batch_size: 2#micro_batch_size: 4#g' qwen3_8b_pretrain.yaml
# 3. 准备预训练数据(Megatron格式,示例脚本)
python tools/dataset/convert_dataset.py \
--input ./raw_pretrain_data.txt \
--output ./pretrain_data \
--tokenizer qwen-tokenizer \
--seq_length 2048
# 4. 启动预训练(8卡分布式训练,适配昇腾NPU)
mpirun -np 8 python -m mindspore_transformers.trainer \
--config qwen3_8b_pretrain.yaml \
--run_mode pretrain \
--device_target Ascend
# 5. 查看预训练日志,确认训练正常
tail -f ./output/pretrain/log.txt
预训练核心说明:采用Megatron格式数据集,配置合适的序列长度与批次大小,启用并行策略提升训练效率,训练过程中通过CheckpointMonitor定期保存模型权重,支持断点续训功能。
四、LLM微调实践(LoRA低参微调,适配行业场景)
微调优先选择LoRA低参微调(仅更新部分参数),兼顾训练效率与效果,适配指令跟随等场景,代码如下,以Qwen3-8B微调为例,使用Alpaca风格指令数据集:
from mindspore_transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
# 1. 加载预训练模型与分词器
model = AutoModelForCausalLM.from_pretrained(
"qwen3-8b",
device_target="Ascend", # 切换为GPU/CPU
load_in_8bit=False,
lora_config={"r": 8, "lora_alpha": 16, "target_modules": ["c_attn"]} # LoRA配置
)
tokenizer = AutoTokenizer.from_pretrained("qwen3-8b")
tokenizer.pad_token = tokenizer.eos_token
# 2. 加载并预处理微调数据集
dataset = load_dataset("tatsu-lab/alpaca", split="train[:1000]") # 简化版数据集
def preprocess_function(examples):
# 构建指令-响应对格式
texts = [f"### 指令: {inst}\n### 输入: {inp}\n### 输出: {out}"
for inst, inp, out in zip(examples["instruction"], examples["input"], examples["output"])]
# 分词处理
return tokenizer(texts, truncation=True, max_length=512, padding="max_length")
tokenized_dataset = dataset.map(preprocess_function, batched=True)
# 3. 配置训练参数
training_args = TrainingArguments(
output_dir="./qwen3_8b_lora_finetune",
per_device_train_batch_size=4,
num_train_epochs=3,
logging_dir="./logs",
logging_steps=10,
save_steps=100,
learning_rate=2e-4,
fp16=True, # 启用混合精度,提升训练速度
remove_unused_columns=False
)
# 4. 启动微调
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset
)
trainer.train()
# 5. 保存微调后的模型(LoRA适配器)
model.save_pretrained("./qwen3_8b_finetuned")
tokenizer.save_pretrained("./qwen3_8b_finetuned")
五、微调效果验证与模型导出
微调完成后,验证模型指令跟随能力,并导出模型用于后续部署,代码如下:
from mindspore_transformers import AutoModelForCausalLM, AutoTokenizer
# 加载微调后的模型与分词器
model = AutoModelForCausalLM.from_pretrained(
"./qwen3_8b_finetuned",
device_target="Ascend"
)
tokenizer = AutoTokenizer.from_pretrained("./qwen3_8b_finetuned")
# 测试指令跟随效果
prompt = "### 指令: 解释MindSpore Transformers LLM微调的核心优势\n### 输入: \n### 输出: "
inputs = tokenizer(prompt, return_tensors="ms").to("Ascend")
# 推理生成
outputs = model.generate(
**inputs,
max_new_tokens=100,
temperature=0.7,
top_p=0.9
)
# 输出结果
print("微调后模型输出:")
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
# 导出模型(适配昇腾MindIE推理)
model.export("./qwen3_8b_finetuned_export", file_format="MINDIR")
六、实践总结
MindSpore Transformers简化了LLM预训练与微调的复杂度,通过配置模板与高阶接口,开发者无需关注底层并行细节,即可快速启动训练。预训练核心在于海量数据准备与并行策略配置,微调则可根据场景选择LoRA低参微调(轻量高效)或全量微调(效果更优)。该框架深度适配昇腾生态,可充分利用NPU算力,同时支持多硬件平台,兼顾科研与企业级落地需求。