千问大模型(Qwen)训练教程(适配14B/72B,新手可直接上手)
本文针对阿里通义千问系列大模型(Qwen 14B、Qwen 72B,最常用场景),提供从“环境准备-数据处理-模型训练-效果验证-部署优化”的全流程实操教程,结合2026年主流算力配置与适配平台,兼顾新手便捷性与学术/企业级实用性,无需复杂运维经验,跟着步骤即可完成千问大模型的微调/预训练,同时规避训练中的常见坑点。
核心说明:千问大模型训练核心分为「全参数微调」和「轻量化微调(QLoRA)」,新手优先选择轻量化微调(省显存、效率高、成本低);Qwen 14B适合个人科研、课题组攻关,Qwen 72B适合企业级研发、高校重点项目,教程将分别适配两种模型的训练流程,全程结合前文推荐的算力配置与平台,确保每一步可落地。
一、训练前准备(核心前提,决定训练成败)
(一)明确训练需求与算力适配(必看)
结合千问模型特性,先明确自身需求,匹配对应算力(参考前文配置,避免显存不足、算力瓶颈),新手优先选择云平台(无需本地部署,一键启动):
模型版本
训练场景
推荐算力配置(本地/云平台)
适配平台(优先推荐)
Qwen 14B
轻量化微调(新手首选)
单卡RTX 4090 24G(需QLoRA省显存);单卡A800 80G(无需省显存,效率更高)
智星云(按小时付费,卡型齐全,一键部署环境)
Qwen 14B
全参数微调(精度更高)
2×RTX 4090 24G(支持NVLink);单卡A100 80G
腾讯云TI-ONE(内置加速,单位算力成本最优)
Qwen 72B
轻量化微调
Qwen 72B
全参数微调(企业/科研重点)
4×H100 80G集群;8×A800 80G集群
新手避坑:无需追求顶级配置,Qwen 14B轻量化微调用单卡RTX 4090即可完成,成本低、上手快;若直接训练Qwen 72B,务必选择4卡及以上集群,单卡无法满足显存需求(会频繁爆显存)。
(二)工具与环境准备(云平台/本地通用)
核心依赖:Python 3.8+、PyTorch 2.4+、CUDA 12.2+、Hugging Face Transformers、PEFT(用于轻量化微调)、Accelerate(用于多卡并行),以下分「云平台」和「本地部署」两种方式,新手优先选云平台(无需手动配置环境)。
1. 云平台环境准备(推荐新手,以智星云为例)
-
登录智星云平台,选择「学术专属镜像」,直接选择“Qwen模型训练专用镜像”(预装PyTorch 2.4、CUDA 12.2、PEFT等所有依赖,无需手动安装)。
-
选择对应GPU卡型(如训练Qwen 14B轻量化微调,选择RTX 4090 24G;训练Qwen 72B,选择4×A100 80G集群),点击“启动实例”,等待5-10分钟,实例启动完成后,进入Jupyter Notebook(可视化操作,新手友好)。
-
启动实例后,验证环境:在Notebook中运行以下代码,无报错即环境正常。
import torch
import transformers
from peft import LoraConfig
# 验证CUDA是否可用
print("CUDA可用:", torch.cuda.is_available())
# 验证PyTorch版本
print("PyTorch版本:", torch.__version__)
# 验证千问模型依赖
print("Transformers版本:", transformers.__version__)
2. 本地环境准备(有运维能力者)
需先确保本地服务器满足前文推荐的算力配置,再执行以下步骤:
-
安装Python 3.8+,推荐使用Anaconda创建虚拟环境(避免依赖冲突):
conda create -n qwen_train python=3.8
conda activate qwen_train
-
安装依赖包(指定对应版本,避免兼容问题):
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu122
pip install transformers==4.41.0 peft==0.11.1 accelerate==0.30.0 datasets==2.19.0 sentencepiece==0.1.99
-
验证环境:运行上述云平台的验证代码,无报错即可。
(三)模型与数据集准备
1. 千问模型权重获取
千问模型(Qwen 14B、Qwen 72B)开源可获取,优先从Hugging Face官网下载,或使用云平台内置的模型权重(无需手动下载,节省时间):
-
云平台(智星云):直接在Notebook中调用模型名称,平台会自动下载权重(如“Qwen/Qwen-14B”“Qwen/Qwen-72B”)。
-
本地部署:从Hugging Face下载,代码如下(需注册Hugging Face账号,获取访问令牌):
from huggingface_hub import hf_hub_download
# 下载Qwen 14B模型权重(本地部署)
hf_hub_download(repo_id="Qwen/Qwen-14B", filename="pytorch_model-00001-of-00004.bin", token="你的Hugging Face令牌")
# 下载Qwen 72B模型权重(本地部署,需足够存储空间,约144GB)
hf_hub_download(repo_id="Qwen/Qwen-72B", filename="pytorch_model-00001-of-00008.bin", token="你的Hugging Face令牌")
2. 数据集准备(核心,决定训练效果)
千问模型训练需适配中文数据集,格式为JSON或CSV,核心要求:数据干净、贴合训练场景(如对话生成、情感分析、行业定制),以下提供两种方案,新手可直接复用:
方案1:使用公开数据集(新手首选)
推荐使用中文对话数据集(如Alpaca-Chinese、Belle-0.5M),直接从Hugging Face下载,适配千问模型的对话生成场景:
from datasets import load_dataset
# 加载中文对话数据集(Alpaca-Chinese,约5万条样本,适合Qwen 14B微调)
dataset = load_dataset("silk-road/alpaca-data-chinese")
# 查看数据集结构
print(dataset["train"][0]) # 输出第一条数据,确认格式
方案2:自定义数据集(学术/企业级需求)
若需训练行业定制模型(如金融、医疗),可自定义数据集,格式如下(JSON格式,核心字段:instruction(指令)、input(输入,可选)、output(输出)):
[
{"instruction": "解释什么是人工智能", "input": "", "output": "人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新技术科学,核心是让机器具备类似人类的感知、推理、学习和决策能力。"},
{"instruction": "分析某医疗案例的病因", "input": "患者男性,50岁,长期吸烟,出现咳嗽、胸闷症状3个月", "output": "结合患者症状及病史,初步判断可能为慢性支气管炎,长期吸烟是主要诱因,建议进一步做胸片、肺功能检查明确诊断。"}
]
自定义数据集后,使用datasets库加载:
from datasets import load_dataset
# 加载自定义JSON数据集
dataset = load_dataset("json", data_files="custom_dataset.json")
数据集避坑:1. 数据量建议:Qwen 14B微调至少500条,Qwen 72B微调至少1000条,数据量过少会导致过拟合;2. 避免重复数据、无意义数据,否则会影响模型训练效果。
二、千问大模型训练实操(分模型、分场景)
以下分「Qwen 14B轻量化微调(新手首选)」「Qwen 14B全参数微调」「Qwen 72B多卡并行微调」三种场景,全程提供可直接运行的代码,结合云平台操作,新手可直接复制粘贴运行。
(一)场景1:Qwen 14B 轻量化微调(QLoRA,新手首选)
核心优势:省显存、效率高、成本低,单卡RTX 4090 24G即可完成,适合个人科研、轻量化应用研发,适配智星云平台。
步骤1:数据集预处理(统一格式,适配千问模型)
将数据集处理为千问模型支持的格式(指令+输入+输出),代码如下:
def format_dataset(example):
# 格式化数据:instruction + input(可选) + output
if example["input"]:
prompt = f"### 指令:{example['instruction']}\n### 输入:{example['input']}\n### 输出:"
else:
prompt = f"### 指令:{example['instruction']}\n### 输出:"
return {
"prompt": prompt,
"response": example["output"]
}
# 处理数据集
formatted_dataset = dataset["train"].map(format_dataset)
# 划分训练集和验证集(比例9:1)
split_dataset = formatted_dataset.train_test_split(test_size=0.1)
train_dataset = split_dataset["train"]
val_dataset = split_dataset["test"]
# 查看处理后的数据
print(train_dataset[0]["prompt"] + train_dataset[0]["response"])
步骤2:配置QLoRA参数(省显存核心)
QLoRA通过量化模型权重,降低显存占用,核心参数配置如下(无需修改,直接复用):
from peft import LoraConfig, get_peft_model
# QLoRA配置
lora_config = LoraConfig(
r=8, # 低秩矩阵的秩,越大效果越好,显存占用越高
lora_alpha=32, # 缩放系数,通常为r的4倍
target_modules=["c_attn"], # 千问模型的注意力层,固定配置
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM" # 因果语言模型,适配文本生成
)
# 加载千问14B模型和tokenizer
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen-14B"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token # 设置pad_token,避免报错
# 加载模型(量化为4bit,省显存)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto", # 自动分配设备(GPU/CPU)
load_in_4bit=True, # 4bit量化,显存占用降低75%
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# 应用QLoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # 查看可训练参数(仅占总参数的0.1%左右,省算力)
步骤3:配置训练参数并启动训练
使用Trainer API启动训练,参数适配Qwen 14B,可根据自身算力调整batch_size:
from transformers import TrainingArguments, Trainer, DataCollatorForLanguageModeling
# 训练参数配置
training_args = TrainingArguments(
output_dir="./qwen_14b_lora_train", # 训练结果保存路径
per_device_train_batch_size=4, # 单卡batch_size,RTX 4090 24G可设4-8
per_device_eval_batch_size=4,
gradient_accumulation_steps=4, # 梯度累积,模拟更大batch_size
learning_rate=2e-4, # 学习率,千问模型微调推荐1e-4~3e-4
num_train_epochs=3, # 训练轮次,3轮足够,过多易过拟合
logging_steps=10, # 每10步打印一次日志
evaluation_strategy="epoch", # 每轮验证一次
save_strategy="epoch", # 每轮保存一次模型
fp16=True, # 开启混合精度训练,提升效率
load_best_model_at_end=True, # 训练结束后加载最优模型
report_to="none" # 关闭wandb日志(新手可忽略)
)
# 数据整理器(处理padding、截断)
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False, # 因果语言模型,关闭掩码语言建模
)
# 定义Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=val_dataset,
data_collator=data_collator,
)
# 启动训练
trainer.train()
训练时长:单卡RTX 4090 24G,5万条数据,3轮训练约3-5天(与前文配置一致);若使用单卡A800 80G,可缩短至2-3天。
(二)场景2:Qwen 14B 全参数微调(精度更高)
核心优势:训练精度高,适配对效果要求较高的场景(如学术实验、企业级应用),需2×RTX 4090 24G(支持NVLink)或单卡A100 80G,适配腾讯云TI-ONE平台。
步骤1-步骤2(数据集预处理、模型加载)与场景1一致,仅修改模型加载和训练参数(无需QLoRA量化):
# 加载千问14B模型(不量化,全参数训练)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-14B",
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto",
)
# 训练参数调整(适配全参数训练)
training_args = TrainingArguments(
output_dir="./qwen_14b_full_train",
per_device_train_batch_size=8, # 单卡A800 80G可设8-16
gradient_accumulation_steps=2,
learning_rate=1e-5, # 全参数微调学习率更低,避免过拟合
num_train_epochs=2,
logging_steps=10,
evaluation_strategy="epoch",
save_strategy="epoch",
fp16=True,
load_best_model_at_end=True,
report_to="none"
)
# 启动训练(其余代码与场景1一致)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=val_dataset,
data_collator=data_collator,
)
trainer.train()
全参数微调避坑:需确保GPU显存≥48G(单卡A800 80G最优),双卡训练需支持NVLink,否则多卡效率极低(仅比单卡提升20%),推荐使用腾讯云TI-ONE平台(内置TI-ACC加速,提升训练效率)。
三、训练后操作:效果验证与模型部署
(一)模型效果验证
训练完成后,加载最优模型,进行效果测试,代码如下:
from peft import PeftModel
# 加载基础模型和训练好的LoRA权重(轻量化微调)
base_model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-14B", # 若为Qwen 72B,替换为"Qwen/Qwen-72B"
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto"
)
fine_tuned_model = PeftModel.from_pretrained(base_model, "./qwen_14b_lora_train/checkpoint-xxx") # 替换为最优 checkpoint 路径
# 测试对话生成
def generate_response(prompt):
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = fine_tuned_model.generate(
**inputs,
max_new_tokens=200, # 最大生成长度
temperature=0.7, # 随机性,越小越严谨
top_p=0.9,
do_sample=True
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# 测试示例
prompt = "### 指令:解释千问大模型的核心优势\n### 输出:"
print(generate_response(prompt))
验证标准:生成内容贴合指令、逻辑清晰、无冗余,若效果不佳,可增加训练数据量、调整学习率或训练轮次。
(二)模型保存与部署
1. 模型保存
轻量化微调仅保存LoRA权重(体积小,约几十MB),全参数微调保存完整模型(Qwen 14B约28GB,Qwen 72B约144GB):
# 保存LoRA权重(轻量化微调)
fine_tuned_model.save_pretrained("./qwen_14b_lora_final")
tokenizer.save_pretrained("./qwen_14b_lora_final")
# 保存完整模型(全参数微调)
fine_tuned_model.merge_and_unload().save_pretrained("./qwen_14b_full_final")
tokenizer.save_pretrained("./qwen_14b_full_final")
2. 模型部署(简单上手)
新手可使用Streamlit搭建简单的可视化部署界面,方便测试和使用:
import streamlit as st
st.title("千问大模型(Qwen)训练部署演示")
# 加载模型和tokenizer
model = AutoModelForCausalLM.from_pretrained("./qwen_14b_lora_final", trust_remote_code=True, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("./qwen_14b_lora_final", trust_remote_code=True)
# 输入框
prompt = st.text_input("请输入指令:")
if st.button("生成回复"):
if prompt:
inputs = tokenizer(f"### 指令:{prompt}\n### 输出:", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
st.write(response)
else:
st.warning("请输入指令!")
运行部署代码:streamlit run app.py,打开浏览器即可使用千问模型生成回复。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)