前言
SFT: 监督学习,解决的是对不对的问题。
RLHF: 强化学习,解决的是能不能安全做对的问题。
DPO:直接优化偏好,解决的是如何又快又好的做到的问题
目前格局:80%场景用 SFT + DPO,20% 高安全场景用 RLHF
一、项目背景
需求一:
AI电商类目生成项目因文本大模型生成文本太单一,故需微调开源模型部署
二、环境准备
1.AutoDl租卡
AutoDL算力云 | 弹性、好用、省钱,GPU算力零售价格新标杆
2.vscode remote远程连接ssh
3.数据集 ModelScope :
git clone https://www.modelscope.cn/datasets/haiyang/product_description_generation.git
数据清洗:训练集/验证集/测试集 为8 : 1 :1,转为用于 LLaMAFactory 的 Alpaca 格式数据

采用5090

vscode连接远程服务器
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
mkdir -p /root/autodl-tmp/conda/pkgs
conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs
mkdir -p /root/autodl-tmp/conda/envs
conda config --add envs_dirs /root/autodl-tmp/conda/envs
conda create -n llama-factory python=3.12
conda activate llama-factory
# 报错就刷新
source ~/.bashrc
pip install -e ".[torch,metrics]"
llamafactory-cli version
llamafactory-cli webui
从 HuggingFace 上下载基座模型
mkdir Hugging-Face
export HF_ENDPOINT=https://hf-mirror.com
export HF_HOME=/root/autodl-tmp/Hugging-Face
echo $HF_ENDPOINT echo $HF_HOME
pip install -U huggingface_hub
hf download Qwen/Qwen2.5-7B-Instruct
选择模型Qwen2.5-7B-Instruct
因为:
- 是 instruction-tuned 模型
- 支持 29+ 语言,包含中文
- 支持很长上下文
- 对 结构化输出(尤其 JSON) 做了增强描述。
Qwen3-8B 官方模型卡的亮点是:
- 支持 thinking / non-thinking 两种模式切换
- 在数学、代码、逻辑推理上更强。
但是任务是商品文案生成,训练快成本低。
三、微调过程
微调训练之前

加载已经清洗好的数据集:
模型名称 Qwen2.5-1.5B-Instruct
模型路径 /root/autodl-tmp/Hugging-Face/hub/models--Qwen--Qwen2.5-1.5B-Instruct/snapshots/989aa7980e4cf806f80c7fef2b1adb7bc71aa306
微调方法 lora
训练方式 Supervised Fine-Tuning
数据集 上面粘贴到LLaMA-Factory 的data下面,另外改dataset_info.json不然不会显示你添加的数据集
学习率:5e-5 :每次更新参数时迈多大步子,大了学得快,但容易训崩;小了更稳,但收敛慢
训练轮数 3.0 :整个数据集完整训练几遍,多了可能更充分,但也更容易过拟合
最大梯度范数 1.0:梯度裁剪阈值,防止梯度爆炸,太小会限制学习,太大保护作用弱
最大样本数 100000:每个数据集最多取多少条样本参与训练,用来限流,防止数据太多训太久
计算类型 bf16:用什么精度训练,bf16更省显存、速度通常更好,前提是显卡支持
截断长度 2048:单条样本最多保留多少 token,超出就截断大,保留上下文更多,但更吃显存、更慢
批处理大小 2 每张 GPU 一次前向/反向处理多少条样本 大:训练更快,但更吃显存
梯度累积 8 不马上更新参数,累计 8 次小 batch 再更新 1 次 显存不够时伪装成大 batch 的常用手段
验证集比例 0 拿多少训练数据出来做验证
学习率调节器 cosine 学习率怎么变化 就是先高后低,平滑衰减,比较常用
第一轮实验:

还在下降,存在欠拟合状态,继续加大轮数
微调完成

因数据质量属于公开,所以公司内部都是用真实用户集
配置导出模型

嗯,可以用,但考虑是个人项目(租服务器显卡成本过高),故以另外一种方式来实现业务构思,从而有条件后可泛化至实际场景。
构思:
本地显卡4060训练最小模块模型,进行Lora微调三种特色化模型,在让site站点通过不同的Lora配置不同的推理方式。
采用方案:
Windows 主机 + WSL2 Ubuntu + LLaMA-Factory
1.启动wsl
mkdir -p /mnt/e/AI_Models
mkdir -p /mnt/e/AI_Models/models
mkdir -p /mnt/e/AI_Models/data
mkdir -p /mnt/e/AI_Models/output
mkdir -p /mnt/e/AI_Models/LLaMA-Factory
nvidia-smi
sudo apt update
wsl -u root
passwd ubuntu
sudo apt install -y python3-venv
python3 -m venv ~/llm-env
source ~/llm-env/bin/activate
python3 --version
pip install --upgrade pip setuptools wheel
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 确认显卡
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
11111
git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git /mnt/e/AI_Models/LLaMA-Factory
cd /mnt/e/AI_Models/LLaMA-Factory
pip install -e .
pip install -r requirements.txt
pip install -r requirements/metrics.txt
多开终端
wsl
cd /mnt/e/AI_Models/
source ~/llm-env/bin/activate
pip install -U "huggingface_hub[cli]"
hf download Qwen/Qwen2.5-1.5B-Instruct --local-dir /mnt/e/AI_Models/models/Qwen2.5-1.5B-Instruct
mkdir -p /mnt/e/AI_Models/hf_cache
export HF_HOME=/mnt/e/AI_Models/hf_cache
sudo apt update
sudo apt install -y openssh-server
111
vscode 安装Remote - WSL
在wsl终端所在项目目录中 code .
通用的模型:

继续训练Lora微调模型,分别是tiktok、amazon、shopee
1.shopee 风格:高性价比

2. tiktok风格:场景使用版

3.amazon风格:功能清晰版

采用 vllm 部署微调模型接口服务
source ~/llm-env/bin/activate
pip install vllm
运行全是错误
缺少c++、内存太小。。。,不过问题不大,问ai基本解决

多次尝试后:启动成功
vllm serve /mnt/e/AI_Models/export/default --host 0.0.0.0 --port 8000 --served-model-name default --gpu-memory-utilization 0.7 --max-model-len 1024

但是有个问题:我有四个lora模型,后台要启动4个太耗内存了,于是采用一个基座模型+lora 适配器的模型
- 1 个 vLLM 服务
- 1 个 base model
- 4 个 LoRA adapter
vllm serve /mnt/e/AI_Models/export/Qwen2.5-1.5B-Instruct \ --port 8000 \ --served-model-name qwen-base \ --enable-lora \ --lora-modules \ shopee=/mnt/e/AI_Models/LLaMA-Factory/saves/Qwen2.5-1.5B-Instruct/lora/shopee \ amazon=/mnt/e/AI_Models/LLaMA-Factory/saves/Qwen2.5-1.5B-Instruct/lora/amazon \ tiktok=/mnt/e/AI_Models/LLaMA-Factory/saves/Qwen2.5-1.5B-Instruct/lora/tiktok \ default=/mnt/e/AI_Models/LLaMA-Factory/saves/Qwen2.5-1.5B-Instruct/lora/default \ --max-loras 4 \ --api-key EMPTY \ --generation-config vllm \ --gpu-memory-utilization 0.6 \ --max-model-len 1024 \ --max-num-seqs 1
ok,成功
测试vllm的适配器服务
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="EMPTY",
)
resp_amazon = client.chat.completions.create(
model="amazon",
messages=[
{
"role": "system",
"content": "你是跨境电商商品文案助手。请根据输入信息输出严格JSON。"
},
{
"role": "user",
"content": """<SITE=amazon><LOCALE=中文><TASK=bundle_json>
{
"category_path": "",
"source_title": "垃圾桶 两侧 - 功能清晰款",
"features": ["双侧设计", "家用", "收纳方便"]
}"""
}
],
temperature=0.1
)
resp_tiktok = client.chat.completions.create(
model="tiktok",
messages=[
{
"role": "system",
"content": "你是跨境电商商品文案助手。请根据输入信息输出严格JSON。"
},
{
"role": "user",
"content": """<SITE=tiktok><LOCALE=中文><TASK=bundle_json>
{
"category_path": "",
"source_title": "垃圾桶 两侧 - 功能清晰款",
"features": ["双侧设计", "家用", "收纳方便"]
}"""
}
],
temperature=0.1
)
resp_shopee = client.chat.completions.create(
model="shopee",
messages=[
{
"role": "system",
"content": "你是跨境电商商品文案助手。请根据输入信息输出严格JSON。"
},
{
"role": "user",
"content": """<SITE=shopee><LOCALE=中文><TASK=bundle_json>
{
"category_path": "",
"source_title": "垃圾桶 两侧 - 功能清晰款",
"features": ["双侧设计", "家用", "收纳方便"]
}"""
}
],
temperature=0.1
)
respones = {
"amazon": resp_amazon,
"tiktok": resp_tiktok,
"shopee": resp_shopee
}
for name, item in respones.items():
content = item.choices[0].message.content or ""
print("\n" + "=" * 30)
print(f"模型: {name}")
print("=" * 30)
print(content)
print("-" * 30)

接下来在项目上数据库加字段,把原先的第二轮最后面的生成大模型换成根据site 分配路由 lora适配模型:

python3 -m venv ~/.venvs/litellm
source ~/.venvs/litellm/bin/activate
pip install -U "litellm[proxy]"
启动
litellm --config /mnt/f/AI_Models/DEMO/My_Demo/1.ai_list_generate/backend/litellm_config.yaml --host 0.0.0.0 --port 4000
共有 0 条评论