人工评估表
【免费下载链接】chatglm3_6b chatglm3_6b对话大模型 项目地址: https://ai.gitcode.com/MooYeh/chatglm3_6b
| 样本ID | 相关性 | 流畅性 | 知识性 | 安全性 | 整体评分 | 改进建议 |
|---|---|---|---|---|---|---|
| 1 | 5 | 4 | 5 | 5 | 4.8 | - |
| 2 | 4 | 5 | 3 | 5 | 4.2 | 增加具体案例 |
| ... | ... | ... | ... | ... | ... | ... |
评估维度说明:
- **相关性**:回答与问题的相关程度(1-5分)
- **流畅性**:语言表达的自然流畅度(1-5分)
- **知识性**:回答内容的准确性和深度(1-5分)
- **安全性**:是否包含不当或有害内容(1-5分)
### 6.3 对比测试
与微调前的基础模型进行对比测试:
```python
def compare_models(base_model, fine_tuned_model, test_cases):
results = []
for case in test_cases:
base_response = get_model_response(base_model, case)
fine_tuned_response = get_model_response(fine_tuned_model, case)
results.append({
"question": case,
"base_model": base_response,
"fine_tuned_model": fine_tuned_response
})
return results
对比测试应关注:
- 领域知识的准确性提升
- 回答一致性改善
- 特定指令的遵循能力
- 幻觉(Hallucination)减少程度
七、模型部署:从Checkpoint到生产服务
7.1 模型合并与导出
微调完成后,需要将PEFT适配器与基础模型合并:
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
def merge_and_save_model(base_model_path, peft_model_path, save_path):
# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained(
base_model_path,
trust_remote_code=True,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(
base_model_path,
trust_remote_code=True
)
# 加载PEFT模型
peft_model = PeftModel.from_pretrained(base_model, peft_model_path)
# 合并模型
merged_model = peft_model.merge_and_unload()
# 保存合并后的模型
merged_model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
print(f"合并后的模型已保存至: {save_path}")
if __name__ == "__main__":
merge_and_save_model(
base_model_path="./",
peft_model_path="./output/checkpoint-1000",
save_path="./merged_model"
)
7.2 量化部署选项
根据部署环境选择合适的量化方式:
4位量化部署(最低配置,8GB内存)
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("./merged_model", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
"./merged_model",
trust_remote_code=True,
device_map="auto",
load_in_4bit=True
)
# 测试对话
response, history = model.chat(tokenizer, "什么是阴虚体质?", history=[])
print(response)
8位量化部署(平衡性能与资源)
model = AutoModelForCausalLM.from_pretrained(
"./merged_model",
trust_remote_code=True,
device_map="auto",
load_in_8bit=True
)
FP16部署(最佳性能,需要足够显存)
model = AutoModelForCausalLM.from_pretrained(
"./merged_model",
trust_remote_code=True,
device_map="auto",
torch_dtype=torch.float16
)
7.3 API服务部署
使用FastAPI构建模型服务:
from fastapi import FastAPI, Request
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
app = FastAPI(title="ChatGLM3-6B API服务")
# 加载模型
tokenizer = AutoTokenizer.from_pretrained("./merged_model", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
"./merged_model",
trust_remote_code=True,
device_map="auto",
load_in_8bit=True
)
model.eval()
@app.post("/chat")
async def chat(request: Request):
data = await request.json()
query = data.get("query", "")
history = data.get("history", [])
with torch.no_grad():
response, new_history = model.chat(tokenizer, query, history=history)
return {
"response": response,
"history": new_history
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
启动服务后,可通过HTTP请求调用模型:
curl -X POST "http://localhost:8000/chat" \
-H "Content-Type: application/json" \
-d '{"query": "什么是阴虚体质?", "history": []}'
八、常见问题与解决方案
8.1 训练过程问题
GPU内存不足
| 问题表现 | 解决方案 |
|---|---|
| 训练中报CUDA out of memory | 1. 使用8-bit/4-bit量化 2. 减小batch size 3. 增加梯度累积步数 4. 降低序列长度 |
| 验证时内存溢出 | 1. 减小验证集batch size 2. 缩短验证集长度 |
训练不稳定
- 学习率过高:损失出现NaN或大幅波动,解决方案:降低学习率至1e-4以下
- 数据质量问题:损失下降缓慢或停滞,解决方案:检查数据质量,增加清洗步骤
- 梯度消失:损失下降到一定值后不再变化,解决方案:调整PEFT参数,增加r值
8.2 模型性能问题
过拟合
表现:训练损失低但验证损失高,解决方案:
- 增加训练数据量
- 加入正则化(增大dropout)
- 提前停止训练(early stopping)
- 减小模型容量(降低r值)
生成重复内容
解决方案:
- 增加repetition_penalty至1.1-1.3
- 调整temperature和top_p参数
- 在生成时限制n-gram重复
# 改进的生成参数
generation_config = GenerationConfig(
max_new_tokens=512,
temperature=0.9,
top_p=0.8,
repetition_penalty=1.2, # 增加重复惩罚
no_repeat_ngram_size=3 # 禁止3-gram重复
)
【免费下载链接】chatglm3_6b chatglm3_6b对话大模型 项目地址: https://ai.gitcode.com/MooYeh/chatglm3_6b
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



