Rust 表达式与语句(Expressions):Rust by Example 中的语句、块表达式与求值语义详解
2026/10/6 7:46:59
Qwen2.5-1.5B是阿里通义千问推出的轻量级大语言模型,专为本地化部署设计。本文将带您从零开始,在低显存GPU环境下搭建一个完全私有的智能对话系统。这个方案特别适合以下场景:
整套系统基于Streamlit构建可视化界面,模型推理完全在本地完成,无需联网即可使用。即使您只有基础的Python开发经验,也能在30分钟内完成部署。
最低配置要求:
推荐配置:
首先创建并激活Python虚拟环境:
python -m venv qwen_env source qwen_env/bin/activate # Linux/Mac # 或 qwen_env\Scripts\activate # Windows安装必要的Python包:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers streamlit从阿里云官方渠道下载Qwen2.5-1.5B-Instruct模型文件,建议存放在项目根目录下的models文件夹中:
qwen_project/ ├── models/ │ ├── config.json │ ├── generation_config.json │ ├── model.safetensors │ └── tokenizer.json └── app.py创建app.py文件,添加以下代码:
import torch from transformers import AutoModelForCausalLM, AutoTokenizer import streamlit as st @st.cache_resource def load_model(): model = AutoModelForCausalLM.from_pretrained( "models/", device_map="auto", torch_dtype="auto" ) tokenizer = AutoTokenizer.from_pretrained("models/") return model, tokenizer model, tokenizer = load_model() if "messages" not in st.session_state: st.session_state.messages = [] for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) if prompt := st.chat_input("你好,我是Qwen助手,有什么可以帮您?"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt) with st.chat_message("assistant"): message_placeholder = st.empty() full_response = "" inputs = tokenizer.apply_chat_template( st.session_state.messages, add_generation_prompt=True, return_tensors="pt" ).to(model.device) with torch.no_grad(): outputs = model.generate( inputs, max_new_tokens=1024, temperature=0.7, top_p=0.9, do_sample=True ) response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True) for chunk in response.split(): full_response += chunk + " " message_placeholder.markdown(full_response + "▌") message_placeholder.markdown(full_response) st.session_state.messages.append({"role": "assistant", "content": full_response})在低显存环境下,我们可以通过以下方式进一步优化:
model = AutoModelForCausalLM.from_pretrained( "models/", device_map="auto", torch_dtype=torch.float16, load_in_4bit=True )# 在generate方法中添加 outputs = model.generate( inputs, max_new_tokens=1024, batch_size=1 # 限制批处理大小 )if st.sidebar.button("🧹 清空对话"): st.session_state.messages = [] torch.cuda.empty_cache()| 参数名 | 推荐值 | 作用说明 | 调整建议 |
|---|---|---|---|
| max_new_tokens | 1024 | 控制生成文本的最大长度 | 根据显存调整,值越大占用越多 |
| temperature | 0.7 | 控制生成随机性 | 0.1-0.3更确定,0.7-1.0更有创意 |
| top_p | 0.9 | 核采样阈值 | 0.9平衡质量与多样性 |
| repetition_penalty | 1.1 | 重复惩罚因子 | 1.0-1.2防止重复内容 |
model = AutoModelForCausalLM.from_pretrained( "models/", device_map="auto", # 自动选择GPU/CPU torch_dtype="auto", # 自动选择精度 trust_remote_code=True # 信任远程代码(如需) )用户输入:
请用Python实现一个快速排序算法,并添加详细注释模型输出:
def quick_sort(arr): """ 快速排序算法实现 :param arr: 待排序的列表 :return: 排序后的列表 """ if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] # 选择中间元素作为基准 left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) # 递归排序 # 示例用法 nums = [3, 6, 8, 10, 1, 2, 1] print("排序前:", nums) print("排序后:", quick_sort(nums))用户输入:
帮我写一篇关于人工智能在医疗领域应用的短文,约200字模型输出:
人工智能正在深刻改变医疗健康领域。在医学影像诊断方面,AI算法能够快速准确地识别X光、CT等影像中的异常,辅助医生提高诊断效率。在药物研发领域,AI可以大幅缩短新药研发周期,通过模拟分子相互作用预测药物效果。个性化治疗方面,基于患者基因数据和病史,AI能提供定制化治疗方案。此外,AI健康助手可以7×24小时提供医疗咨询,缓解医疗资源紧张问题。随着技术进步,AI将在疾病预防、远程医疗、健康管理等方面发挥更大作用,但同时也需要关注数据隐私和伦理问题。问题现象:
OSError: Error no file named pytorch_model.bin...解决方案:
问题现象:
CUDA out of memory...优化方案:
max_new_tokens值(如改为512)torch.cuda.empty_cache()调用优化建议:
nvidia-smi)torch.float16)通过本文的指导,您已经成功在本地搭建了一个基于Qwen2.5-1.5B的智能对话系统。这套方案的主要优势包括:
对于希望进一步探索的开发者,可以考虑:
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。