Skip to content

qding98/llm_begin

Repository files navigation

LLM 入门项目

这是一个面向LLM入门新手的起步项目,涵盖了从模型加载、优化、微调到部署的完整流程。

📋 项目简介

本项目基于 Qwen2.5-0.5B-Instruct 模型,通过一系列任务帮助初学者掌握大语言模型的基本操作:

  • 模型加载与推理:了解如何加载预训练模型并进行基础推理
  • 模型量化优化:学习使用动态量化和4bit量化减少模型体积
  • LoRA微调:使用参数高效微调方法在特定数据集上训练模型
  • Web应用部署:通过Streamlit和FastAPI部署模型服务

🗂️ 项目结构

llm_begin/
├── task1_model_intro.py           # 任务1:模型介绍与基础使用
├── test_model.py                  # 模型测试工具(带进度显示)
├── task2_model_optimization.py    # 任务2:动态量化优化
├── task2_better_quantization.py   # 任务2扩展:4bit量化
├── task3.py                       # 任务3:LoRA微调
├── app_task4.py                   # 任务4:Streamlit Web应用
├── task5.py                       # 任务5:FastAPI服务
├── requirements.txt               # 项目依赖
└── README.md                      # 项目说明文档

🔧 环境配置

1. 创建虚拟环境(推荐)

# 使用conda创建环境
conda create -n llm python=3.10
conda activate llm

# 或使用venv
python -m venv llm_env
# Windows
llm_env\Scripts\activate
# Linux/Mac
source llm_env/bin/activate

2. 安装依赖

pip install -r requirements.txt

3. 主要依赖包

  • torch==2.8.0 - PyTorch深度学习框架
  • transformers==4.57.3 - Hugging Face模型库
  • accelerate==1.10.1 - 模型加速库
  • datasets==4.4.2 - 数据集加载工具
  • peft==0.17.1 - 参数高效微调库
  • streamlit==1.50.0 - Web应用框架
  • fastapi==0.128.0 - API服务框架
  • uvicorn==0.39.0 - ASGI服务器

📚 模块详解与运行方法

任务1:模型介绍与基础使用

文件task1_model_intro.py

功能

  • 加载 Qwen2.5-0.5B-Instruct 预训练模型
  • 打印模型架构,了解模型内部结构(Decoder层、RMSNorm、RotaryEmbedding等)
  • 进行简单的对话推理测试

运行方法

python task1_model_intro.py

预期输出

  • 模型架构详细信息
  • 对"用一句话解释什么是大模型"的回答

任务1扩展:交互式测试工具

文件test_model.py

功能

  • 提供交互式命令行界面
  • 实时显示token生成进度
  • 支持自定义输入问题进行测试

运行方法

python test_model.py

使用说明

  • 运行后会提示输入问题
  • 程序会显示生成进度(百分比)
  • 最后输出完整回答和token统计信息

任务2:动态量化优化

文件task2_model_optimization.py

功能

  • 对模型进行Int8动态量化
  • 对比量化前后的模型大小
  • 测试量化对推理速度和质量的影响
  • 保存量化后的模型为 qwen_0.5b_int8.pt

运行方法

python task2_model_optimization.py

预期效果

  • 模型体积减少约75%
  • 推理速度提升(CPU环境下尤其明显)
  • 精度略有下降但仍可接受

实际效果:

  • 模型回答质量大大下降。

任务2扩展:4bit量化

文件task2_better_quantization.py

功能

  • 使用 bitsandbytes 库进行4bit量化
  • 采用NF4(Normal Float 4)量化类型
  • 双重量化进一步压缩模型

运行方法

python task2_better_quantization.py

注意事项

  • 需要GPU支持(CUDA)
  • 4bit量化比Int8量化压缩率更高
  • 适合显存受限的场景

任务3:LoRA微调

文件task3.py

功能

  • 使用 Glaive Function Calling 数据集进行微调
  • 采用LoRA(Low-Rank Adaptation)参数高效微调方法
  • 仅训练少量参数(约1%),大幅降低计算成本
  • 微调后合并权重并进行Int8量化
  • 保存最终模型到 ./output/qwen0.5B_glaive.pt

运行方法

python task3.py

训练配置

  • 数据集:Glaive Function Calling V2(前200条)
  • LoRA参数:r=16, alpha=32
  • 训练步数:30 steps
  • Batch size:2(梯度累积4步)
  • 设备:CPU(适合入门学习)

预期时间

  • CPU环境下约需10-30分钟(取决于硬件性能)

输出文件

  • ./output/qwen0.5B_glaive.pt - 微调并量化后的模型

任务4:Streamlit Web应用

文件app_task4.py

功能

  • 提供友好的Web聊天界面
  • 加载任务3微调后的量化模型
  • 支持多轮对话,保持上下文
  • 实时显示生成状态

运行方法

streamlit run app_task4.py

访问方式

  • 运行后自动打开浏览器
  • 默认地址:http://localhost:8501

使用说明

  1. 在输入框中输入问题
  2. 模型会根据微调后的能力进行回答
  3. 支持连续对话,历史记录会保留在页面上

注意事项

  • 确保 qwen_glaive_quantized.pt 文件存在于项目根目录
  • 首次加载模型需要几秒钟时间

任务5:FastAPI服务

文件task5.py

功能

  • 提供RESTful API接口
  • 支持通过HTTP POST请求调用模型
  • 返回JSON格式的响应
  • 适合集成到其他应用中

运行方法

uvicorn task5:app --reload

API文档

  • 运行后访问 http://localhost:8000/docs 查看自动生成的API文档

接口说明

POST /chat

  • 请求体:
{
  "text": "你的问题"
}
  • 响应:
{
  "response": "模型的回答",
  "model_type": "Glaive-Finetuned-Quantized"
}

测试示例

# 使用curl测试
curl -X POST "http://localhost:8000/chat" \
  -H "Content-Type: application/json" \
  -d '{"text": "什么是大语言模型?"}'

# 使用Python requests测试
import requests
response = requests.post(
    "http://localhost:8000/chat",
    json={"text": "什么是大语言模型?"}
)
print(response.json())

🚀 快速开始

完整流程演示

# 1. 安装依赖
pip install -r requirements.txt

# 2. 了解模型基础
python task1_model_intro.py

# 3. 测试模型量化
python task2_model_optimization.py

# 4. 进行LoRA微调(耗时较长)
python task3.py

# 5. 启动Web应用
streamlit run app_task4.py

# 6. 或启动API服务
uvicorn task5:app --reload

📝 学习路径建议

  1. 第一步:运行 task1_model_intro.py,理解模型加载和基础推理
  2. 第二步:运行 task2_model_optimization.py,学习模型量化技术
  3. 第三步:运行 task3.py,掌握LoRA微调方法
  4. 第四步:运行 app_task4.py,体验Web应用部署
  5. 第五步:运行 task5.py,了解API服务开发

⚠️ 常见问题

1. 模型下载失败

  • 原因:网络问题或Hugging Face访问受限
  • 解决:使用镜像源或手动下载模型到本地

2. 内存不足

  • 原因:模型加载需要约2GB内存
  • 解决:关闭其他程序或使用量化版本

3. task3.py运行时间过长

  • 原因:CPU训练速度较慢
  • 解决:减少训练步数(修改 max_steps 参数)或使用GPU

4. Streamlit/FastAPI无法访问

  • 原因:端口被占用
  • 解决:更改端口号
# Streamlit
streamlit run app_task4.py --server.port 8502

# FastAPI
uvicorn task5:app --port 8001

🎯 项目特点

  • 零基础友好:从最基础的模型加载开始
  • CPU可运行:所有任务都可在CPU上完成
  • 模块化设计:每个任务独立,便于学习
  • 实战导向:涵盖从训练到部署的完整流程
  • 中文注释:代码注释详细,易于理解

📖 参考资源

📄 许可证

本项目仅供学习使用。


祝你学习愉快!🎉

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages