# 2025-lzm-hw2 **Repository Path**: gpuap/2025-lzm-hw2 ## Basic Information - **Project Name**: 2025-lzm-hw2 - **Description**: 国科大GPU架构与编程大作业二 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 225 - **Created**: 2026-01-25 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GPU编程智能问答系统 > **2025年秋季国科大《GPU架构与编程》大作业二** 基于Qwen大模型的GPU编程领域智能问答系统,通过LoRA微调实现专业知识注入,结合vLLM高性能推理引擎实现快速部署。 ## 项目概述 | 项目 | 说明 | |------|------| | 基座模型 | Qwen2.5-1.5B-Instruct | | 微调方法 | LoRA (r=128, alpha=256) | | 推理引擎 | vLLM 0.10.0 | | 训练数据 | 196条GPU编程问答对 | | 部署平台 | MetaX沐曦 MXC500 GPU | ## 文件结构 ``` ├── README.md # 项目说明文档 ├── Dockerfile # 容器构建配置 ├── requirements.txt # Python依赖 ├── download_model.py # 模型下载脚本 ├── serve.py # 推理服务代码(核心) ├── dataset_all.json # 训练数据集 └── LORA微调训练代码.txt # 训练代码 ``` ## 推理服务详解 推理服务(`serve.py`)是本项目的核心,基于vLLM引擎实现高性能推理。 ### 核心架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ FastAPI Server │ ├─────────────────────────────────────────────────────────────┤ │ POST /predict ──→ Prompt格式化 ──→ vLLM推理 ──→ 响应 │ │ GET / ──→ 健康检查 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ vLLM Engine │ │ • 前缀缓存 (Prefix Caching) │ │ • 多步调度 (num_scheduler_steps=8) │ │ • 分块预填充 (Chunked Prefill) │ │ • 高并发支持 (max_num_seqs=512) │ └─────────────────────────────────────────────────────────────┘ ``` ### vLLM引擎优化配置 ```python llm = LLM( model=MODEL_PATH, dtype="half", # FP16精度 gpu_memory_utilization=0.95, # 95%显存利用率 max_model_len=512, # 最大序列长度 max_num_seqs=512, # 最大并发序列数 enable_prefix_caching=True, # 启用前缀缓存 num_scheduler_steps=8, # 多步调度,减少CPU-GPU交互 max_num_batched_tokens=8192, # 批处理token数 enable_chunked_prefill=True, # 分块预填充 ) ``` **优化说明:** | 优化项 | 配置值 | 作用 | |--------|--------|------| | `gpu_memory_utilization` | 0.95 | 最大化GPU显存使用 | | `enable_prefix_caching` | True | 复用相同前缀的KV Cache | | `num_scheduler_steps` | 8 | 减少CPU-GPU同步开销 | | `enable_chunked_prefill` | True | 优化长序列预填充 | | `max_num_batched_tokens` | 8192 | 提升批处理吞吐量 | ### 采样参数 ```python sampling_params = SamplingParams( temperature=0, # 贪婪解码,确保一致性 top_k=1, # 仅选最高概率token max_tokens=256, # 最大生成长度 stop=["<|im_end|>", "<|endoftext|>"], ) ``` ### Prompt格式化 采用与训练一致的ChatML格式: ```python SYSTEM_PROMPT = "你是GPU编程专家,请准确回答问题。" def format_prompt(msg: str) -> str: message = [ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": msg} ] return tokenizer.apply_chat_template( message, tokenize=False, add_generation_prompt=True ) ``` ### 预热机制 服务启动时自动加载训练数据进行预热,预先构建KV Cache: ```python # 加载数据集作为预热数据 with open(DATASET_PATH, 'r', encoding='utf-8') as f: data = json.load(f) warmup_prompts = [format_prompt(item["instruction"]) for item in data] # 执行3轮预热推理 warmup_list = warmup_prompts * 3 outputs = llm.generate(warmup_list, sampling_params) ``` ### API接口 **预测接口:** ```bash POST /predict Content-Type: application/json # 单条请求 {"prompt": "什么是CUDA核函数?"} # 批量请求 {"prompt": ["问题1", "问题2", "问题3"]} ``` **响应格式:** ```json {"response": "核函数是CUDA中标记有__global__关键字的特殊函数..."} ``` **健康检查:** ```bash GET / Response: {"status": "batch"} ``` ## 模型训练简述 采用LoRA方法微调Qwen2.5-1.5B-Instruct,核心配置: - **LoRA参数**: r=128, alpha=256, 目标模块包含全部注意力层 - **训练设置**: 50轮, 学习率5e-5, cosine调度 - **训练平台**: Kaggle Tesla P100 GPU 详细训练代码见 `LORA微调训练代码.txt`。 ## 部署说明 ### Docker部署(推荐) ```bash # 构建镜像 docker build -t gpu-qa-system . # 运行服务 docker run -p 8000:8000 --gpus all gpu-qa-system ``` ### 本地运行 ```bash # 安装依赖 pip install -r requirements.txt # 下载模型 python download_model.py --model_name Tom0078/qwen-gpu-bonus --cache_dir ./ # 启动服务 uvicorn serve:app --host 0.0.0.0 --port 8000 ``` ### 测试请求 ```bash curl -X POST http://localhost:8000/predict \ -H "Content-Type: application/json" \ -d '{"prompt": "什么是CUDA核函数?"}' ``` ## 相关链接 | 资源 | 地址 | |------|------| | 微调模型 | https://modelscope.cn/models/Tom0078/qwen-gpu-bonus | --- **2025年秋季国科大《GPU架构与编程》**