本文针对阿里通义千问系列大模型(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. 云平台环境准备(推荐新手,以智星云为例)

  1. 登录智星云平台,选择「学术专属镜像」,直接选择“Qwen模型训练专用镜像”(预装PyTorch 2.4、CUDA 12.2、PEFT等所有依赖,无需手动安装)。

  2. 选择对应GPU卡型(如训练Qwen 14B轻量化微调,选择RTX 4090 24G;训练Qwen 72B,选择4×A100 80G集群),点击“启动实例”,等待5-10分钟,实例启动完成后,进入Jupyter Notebook(可视化操作,新手友好)。

  3. 启动实例后,验证环境:在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. 本地环境准备(有运维能力者)

需先确保本地服务器满足前文推荐的算力配置,再执行以下步骤:

  1. 安装Python 3.8+,推荐使用Anaconda创建虚拟环境(避免依赖冲突):

conda create -n qwen_train python=3.8
conda activate qwen_train
  1. 安装依赖包(指定对应版本,避免兼容问题):

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. 验证环境:运行上述云平台的验证代码,无报错即可。

(三)模型与数据集准备

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,打开浏览器即可使用千问模型生成回复。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐